[{"data":1,"prerenderedAt":173176},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-01-lerobot101-act-suan-fa-fu-xian\u002Fch4-yao-cao-yu-xiang-ji-jie-ru":3,"wiki-doc-nav":238},{"id":4,"title":5,"body":6,"description":230,"extension":231,"meta":232,"navigation":233,"path":234,"seo":235,"stem":236,"__hash__":237},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":8,"toc":226},"minimark",[9,13,18,87,91,105,170,174,222],[10,11,5],"h1",{"id":12},"_4-遥操与相机接入",[14,15,17],"h2",{"id":16},"_41-不带相机遥操","4.1 不带相机遥操",[19,20,25],"pre",{"className":21,"code":22,"language":23,"meta":24,"style":24},"language-bash shiki shiki-themes github-light github-dark","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","bash","",[26,27,28,41,49,57,65,73,81],"code",{"__ignoreMap":24},[29,30,33,37],"span",{"class":31,"line":32},"line",1,[29,34,36],{"class":35},"sScJk","lerobot-teleoperate",[29,38,40],{"class":39},"sj4cs"," \\\n",[29,42,44,47],{"class":31,"line":43},2,[29,45,46],{"class":39},"  --robot.type=so101_follower",[29,48,40],{"class":39},[29,50,52,55],{"class":31,"line":51},3,[29,53,54],{"class":39},"  --robot.port=\u002Fdev\u002FttyACM1",[29,56,40],{"class":39},[29,58,60,63],{"class":31,"line":59},4,[29,61,62],{"class":39},"  --robot.id=my_awesome_follower_arm",[29,64,40],{"class":39},[29,66,68,71],{"class":31,"line":67},5,[29,69,70],{"class":39},"  --teleop.type=so101_leader",[29,72,40],{"class":39},[29,74,76,79],{"class":31,"line":75},6,[29,77,78],{"class":39},"  --teleop.port=\u002Fdev\u002FttyACM0",[29,80,40],{"class":39},[29,82,84],{"class":31,"line":83},7,[29,85,86],{"class":39},"  --teleop.id=my_awesome_leader_arm\n",[14,88,90],{"id":89},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[19,92,94],{"className":21,"code":93,"language":23,"meta":24,"style":24},"lerobot-find-cameras opencv\n",[26,95,96],{"__ignoreMap":24},[29,97,98,101],{"class":31,"line":32},[29,99,100],{"class":35},"lerobot-find-cameras",[29,102,104],{"class":103},"sZZnC"," opencv\n",[19,106,108],{"className":21,"code":107,"language":23,"meta":24,"style":24},"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",[26,109,110,116,122,128,134,144,150,156,164],{"__ignoreMap":24},[29,111,112,114],{"class":31,"line":32},[29,113,36],{"class":35},[29,115,40],{"class":39},[29,117,118,120],{"class":31,"line":43},[29,119,46],{"class":39},[29,121,40],{"class":39},[29,123,124,126],{"class":31,"line":51},[29,125,54],{"class":39},[29,127,40],{"class":39},[29,129,130,132],{"class":31,"line":59},[29,131,62],{"class":39},[29,133,40],{"class":39},[29,135,136,139,142],{"class":31,"line":67},[29,137,138],{"class":39},"  --robot.cameras=",[29,140,141],{"class":103},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[29,143,40],{"class":39},[29,145,146,148],{"class":31,"line":75},[29,147,70],{"class":39},[29,149,40],{"class":39},[29,151,152,154],{"class":31,"line":83},[29,153,78],{"class":39},[29,155,40],{"class":39},[29,157,159,162],{"class":31,"line":158},8,[29,160,161],{"class":39},"  --teleop.id=my_awesome_leader_arm",[29,163,40],{"class":39},[29,165,167],{"class":31,"line":166},9,[29,168,169],{"class":39},"  --display_data=true\n",[171,172,173],"p",{},"相机参数说明：",[175,176,177,184,190,200,210,216],"ul",{},[178,179,180,183],"li",{},[26,181,182],{},"front","：相机名称。",[178,185,186,189],{},[26,187,188],{},"type: opencv","：相机驱动类型。",[178,191,192,195,196,199],{},[26,193,194],{},"index_or_path","：设备编号或设备路径（如 ",[26,197,198],{},"\u002Fdev\u002Fvideo4","）。",[178,201,202,205,206,209],{},[26,203,204],{},"width"," \u002F ",[26,207,208],{},"height","：图像分辨率。",[178,211,212,215],{},[26,213,214],{},"fps","：采样帧率。",[178,217,218,221],{},[26,219,220],{},"--display_data=true","：启用实时可视化。",[223,224,225],"style",{},"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":24,"searchDepth":43,"depth":43,"links":227},[228,229],{"id":16,"depth":43,"text":17},{"id":89,"depth":43,"text":90},null,"md",{},true,"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":5,"description":230},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",[239,5337,6445,7865,10854,12205,13694,14783,23546,23558,24155,24181,24305,24546,24611,24629,24642,24689,24812,24975,25136,25316,25521,25657,25752,25789,25802,26112,26853,27561,27582,28602,30233,30384,30397,30409,30710,50522,50537,50554,50587,53459,76807,92952,92973,93086,93207,93977,94640,95001,95039,95145,95245,95288,95314,95375,97029,97130,97155,97646,98146,99226,99509,100251,100753,100765,102781,104445,105948,107646,109563,111482,113504,116974,117406,117869,118618,121562,121910,121932,122288,125595,125607,126010,126033,126180,126347,126552,126853,127410,128067,129998,131596,132245,133739,135170,136405,138099,139851,142261,142377,143312,143523,144408,145643,145871,145884,147039,149451,151819,155140,157617,159261,161038,163051,166103,168283,170810,173004],{"id":240,"title":241,"body":242,"description":24,"extension":231,"meta":5332,"navigation":233,"path":5333,"seo":5334,"stem":5335,"__hash__":5336},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":243,"toc":5304},[244,247,251,254,258,270,274,279,282,285,288,291,294,324,328,331,334,337,340,392,396,414,416,430,433,441,444,1307,1314,1330,1334,1420,1424,1430,1517,1521,1559,1563,1627,1631,1635,1642,1653,1657,1662,1666,1671,1675,1680,1684,1688,1693,1963,1968,2106,2111,2367,2370,2378,2382,2387,2490,2493,2799,2808,2909,2912,2915,2918,2921,3181,3186,3326,3329,3508,3511,3639,3642,3794,3798,3803,3806,3817,3825,3828,3935,3939,3943,3948,3998,4003,4008,4032,4037,4090,4093,4098,4275,4280,4565,4570,4967,4971,4976,5033,5038,5046,5049,5189,5192,5301],[10,245,241],{"id":246},"_1基础入门",[14,248,250],{"id":249},"_11注释","1.1注释",[171,252,253],{},"\u002F\u002F或者\u002F* *\u002F",[14,255,257],{"id":256},"_12命名","1.2命名",[259,260,261,264,267],"ol",{},[178,262,263],{},"字母数字下划线",[178,265,266],{},"开头必须是字母或_",[178,268,269],{},"不能使用关键词",[14,271,273],{"id":272},"_13数据类型","1.3数据类型",[275,276,278],"h3",{"id":277},"_131整形","1.3.1整形",[171,280,281],{},"short 短整形 2",[171,283,284],{},"int 整形 4",[171,286,287],{},"long 长整形 win4 linux32位4 linux64位8",[171,289,290],{},"long long 长长整形 8",[171,292,293],{},"利用sizeof可以求数据类型占用的内存空间大小",[19,295,299],{"className":296,"code":297,"language":298,"meta":24,"style":24},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[26,300,301,317],{"__ignoreMap":24},[29,302,303,307,311,314],{"class":31,"line":32},[29,304,306],{"class":305},"szBVR","sizeof",[29,308,310],{"class":309},"sVt8B","(",[29,312,313],{"class":305},"int",[29,315,316],{"class":309},")\n",[29,318,319,321],{"class":31,"line":43},[29,320,306],{"class":305},[29,322,323],{"class":309},"(num)\n",[275,325,327],{"id":326},"_132浮点型","1.3.2浮点型",[171,329,330],{},"float 单精度 4节 7位有效数字",[171,332,333],{},"double 双精度 8节 15-16有效数字",[171,335,336],{},"默认情况下，输出一个小数，会显示6位有效数字",[171,338,339],{},"注意点：",[19,341,343],{"className":296,"code":342,"language":298,"meta":24,"style":24},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[26,344,345,369],{"__ignoreMap":24},[29,346,347,350,353,356,359,362,365],{"class":31,"line":32},[29,348,349],{"class":305},"float",[29,351,352],{"class":309}," f1",[29,354,355],{"class":305},"=",[29,357,358],{"class":39},"3.14",[29,360,361],{"class":305},"f",[29,363,364],{"class":309},";",[29,366,368],{"class":367},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[29,370,371,373,376,378,381,384,387,389],{"class":31,"line":43},[29,372,349],{"class":305},[29,374,375],{"class":309}," f2",[29,377,355],{"class":305},[29,379,380],{"class":39},"3",[29,382,383],{"class":305},"e",[29,385,386],{"class":39},"2",[29,388,364],{"class":309},[29,390,391],{"class":367}," \u002F\u002F科学记数法\n",[275,393,395],{"id":394},"_133字符型","1.3.3字符型",[19,397,399],{"className":296,"code":398,"language":298,"meta":24,"style":24},"char ch='a'\n",[26,400,401],{"__ignoreMap":24},[29,402,403,406,409,411],{"class":31,"line":32},[29,404,405],{"class":305},"char",[29,407,408],{"class":309}," ch",[29,410,355],{"class":305},[29,412,413],{"class":103},"'a'\n",[171,415,339],{},[259,417,418,421,424,427],{},[178,419,420],{},"在显示字符型变量时，只能单引号，双引号x",[178,422,423],{},"单引号内只能一个字符，不能字符串",[178,425,426],{},"c和c++字符型变量只占用一个字符",[178,428,429],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[171,431,432],{},"ASCII码大致由以下两部分组成：",[259,434,435,438],{},[178,436,437],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[178,439,440],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[171,442,443],{},"ASCII码表格：",[445,446,447,491],"table",{},[448,449,450],"thead",{},[451,452,453,461,466,470,475,479,483,487],"tr",{},[454,455,456,460],"th",{},[457,458,459],"strong",{},"ASCII","值",[454,462,463],{},[457,464,465],{},"控制字符",[454,467,468,460],{},[457,469,459],{},[454,471,472],{},[457,473,474],{},"字符",[454,476,477,460],{},[457,478,459],{},[454,480,481],{},[457,482,474],{},[454,484,485,460],{},[457,486,459],{},[454,488,489],{},[457,490,474],{},[492,493,494,521,547,572,597,623,648,673,699,724,750,776,802,827,853,879,905,929,954,979,1004,1029,1054,1079,1104,1129,1154,1180,1205,1230,1255,1281],"tbody",{},[451,495,496,500,503,506,509,512,515,518],{},[497,498,499],"td",{},"0",[497,501,502],{},"NUT",[497,504,505],{},"32",[497,507,508],{},"(space)",[497,510,511],{},"64",[497,513,514],{},"@",[497,516,517],{},"96",[497,519,520],{},"、",[451,522,523,526,529,532,535,538,541,544],{},[497,524,525],{},"1",[497,527,528],{},"SOH",[497,530,531],{},"33",[497,533,534],{},"!",[497,536,537],{},"65",[497,539,540],{},"A",[497,542,543],{},"97",[497,545,546],{},"a",[451,548,549,551,554,557,560,563,566,569],{},[497,550,386],{},[497,552,553],{},"STX",[497,555,556],{},"34",[497,558,559],{},"\"",[497,561,562],{},"66",[497,564,565],{},"B",[497,567,568],{},"98",[497,570,571],{},"b",[451,573,574,576,579,582,585,588,591,594],{},[497,575,380],{},[497,577,578],{},"ETX",[497,580,581],{},"35",[497,583,584],{},"#",[497,586,587],{},"67",[497,589,590],{},"C",[497,592,593],{},"99",[497,595,596],{},"c",[451,598,599,602,605,608,611,614,617,620],{},[497,600,601],{},"4",[497,603,604],{},"EOT",[497,606,607],{},"36",[497,609,610],{},"$",[497,612,613],{},"68",[497,615,616],{},"D",[497,618,619],{},"100",[497,621,622],{},"d",[451,624,625,628,631,634,637,640,643,646],{},[497,626,627],{},"5",[497,629,630],{},"ENQ",[497,632,633],{},"37",[497,635,636],{},"%",[497,638,639],{},"69",[497,641,642],{},"E",[497,644,645],{},"101",[497,647,383],{},[451,649,650,653,656,659,662,665,668,671],{},[497,651,652],{},"6",[497,654,655],{},"ACK",[497,657,658],{},"38",[497,660,661],{},"&",[497,663,664],{},"70",[497,666,667],{},"F",[497,669,670],{},"102",[497,672,361],{},[451,674,675,678,681,684,687,690,693,696],{},[497,676,677],{},"7",[497,679,680],{},"BEL",[497,682,683],{},"39",[497,685,686],{},",",[497,688,689],{},"71",[497,691,692],{},"G",[497,694,695],{},"103",[497,697,698],{},"g",[451,700,701,704,707,710,712,715,718,721],{},[497,702,703],{},"8",[497,705,706],{},"BS",[497,708,709],{},"40",[497,711,310],{},[497,713,714],{},"72",[497,716,717],{},"H",[497,719,720],{},"104",[497,722,723],{},"h",[451,725,726,729,732,735,738,741,744,747],{},[497,727,728],{},"9",[497,730,731],{},"HT",[497,733,734],{},"41",[497,736,737],{},")",[497,739,740],{},"73",[497,742,743],{},"I",[497,745,746],{},"105",[497,748,749],{},"i",[451,751,752,755,758,761,764,767,770,773],{},[497,753,754],{},"10",[497,756,757],{},"LF",[497,759,760],{},"42",[497,762,763],{},"*",[497,765,766],{},"74",[497,768,769],{},"J",[497,771,772],{},"106",[497,774,775],{},"j",[451,777,778,781,784,787,790,793,796,799],{},[497,779,780],{},"11",[497,782,783],{},"VT",[497,785,786],{},"43",[497,788,789],{},"+",[497,791,792],{},"75",[497,794,795],{},"K",[497,797,798],{},"107",[497,800,801],{},"k",[451,803,804,807,810,813,815,818,821,824],{},[497,805,806],{},"12",[497,808,809],{},"FF",[497,811,812],{},"44",[497,814,686],{},[497,816,817],{},"76",[497,819,820],{},"L",[497,822,823],{},"108",[497,825,826],{},"l",[451,828,829,832,835,838,841,844,847,850],{},[497,830,831],{},"13",[497,833,834],{},"CR",[497,836,837],{},"45",[497,839,840],{},"-",[497,842,843],{},"77",[497,845,846],{},"M",[497,848,849],{},"109",[497,851,852],{},"m",[451,854,855,858,861,864,867,870,873,876],{},[497,856,857],{},"14",[497,859,860],{},"SO",[497,862,863],{},"46",[497,865,866],{},".",[497,868,869],{},"78",[497,871,872],{},"N",[497,874,875],{},"110",[497,877,878],{},"n",[451,880,881,884,887,890,893,896,899,902],{},[497,882,883],{},"15",[497,885,886],{},"SI",[497,888,889],{},"47",[497,891,892],{},"\u002F",[497,894,895],{},"79",[497,897,898],{},"O",[497,900,901],{},"111",[497,903,904],{},"o",[451,906,907,910,913,916,918,921,924,927],{},[497,908,909],{},"16",[497,911,912],{},"DLE",[497,914,915],{},"48",[497,917,499],{},[497,919,920],{},"80",[497,922,923],{},"P",[497,925,926],{},"112",[497,928,171],{},[451,930,931,934,937,940,942,945,948,951],{},[497,932,933],{},"17",[497,935,936],{},"DCI",[497,938,939],{},"49",[497,941,525],{},[497,943,944],{},"81",[497,946,947],{},"Q",[497,949,950],{},"113",[497,952,953],{},"q",[451,955,956,959,962,965,967,970,973,976],{},[497,957,958],{},"18",[497,960,961],{},"DC2",[497,963,964],{},"50",[497,966,386],{},[497,968,969],{},"82",[497,971,972],{},"R",[497,974,975],{},"114",[497,977,978],{},"r",[451,980,981,984,987,990,992,995,998,1001],{},[497,982,983],{},"19",[497,985,986],{},"DC3",[497,988,989],{},"51",[497,991,380],{},[497,993,994],{},"83",[497,996,997],{},"S",[497,999,1000],{},"115",[497,1002,1003],{},"s",[451,1005,1006,1009,1012,1015,1017,1020,1023,1026],{},[497,1007,1008],{},"20",[497,1010,1011],{},"DC4",[497,1013,1014],{},"52",[497,1016,601],{},[497,1018,1019],{},"84",[497,1021,1022],{},"T",[497,1024,1025],{},"116",[497,1027,1028],{},"t",[451,1030,1031,1034,1037,1040,1042,1045,1048,1051],{},[497,1032,1033],{},"21",[497,1035,1036],{},"NAK",[497,1038,1039],{},"53",[497,1041,627],{},[497,1043,1044],{},"85",[497,1046,1047],{},"U",[497,1049,1050],{},"117",[497,1052,1053],{},"u",[451,1055,1056,1059,1062,1065,1067,1070,1073,1076],{},[497,1057,1058],{},"22",[497,1060,1061],{},"SYN",[497,1063,1064],{},"54",[497,1066,652],{},[497,1068,1069],{},"86",[497,1071,1072],{},"V",[497,1074,1075],{},"118",[497,1077,1078],{},"v",[451,1080,1081,1084,1087,1090,1092,1095,1098,1101],{},[497,1082,1083],{},"23",[497,1085,1086],{},"TB",[497,1088,1089],{},"55",[497,1091,677],{},[497,1093,1094],{},"87",[497,1096,1097],{},"W",[497,1099,1100],{},"119",[497,1102,1103],{},"w",[451,1105,1106,1109,1112,1115,1117,1120,1123,1126],{},[497,1107,1108],{},"24",[497,1110,1111],{},"CAN",[497,1113,1114],{},"56",[497,1116,703],{},[497,1118,1119],{},"88",[497,1121,1122],{},"X",[497,1124,1125],{},"120",[497,1127,1128],{},"x",[451,1130,1131,1134,1137,1140,1142,1145,1148,1151],{},[497,1132,1133],{},"25",[497,1135,1136],{},"EM",[497,1138,1139],{},"57",[497,1141,728],{},[497,1143,1144],{},"89",[497,1146,1147],{},"Y",[497,1149,1150],{},"121",[497,1152,1153],{},"y",[451,1155,1156,1159,1162,1165,1168,1171,1174,1177],{},[497,1157,1158],{},"26",[497,1160,1161],{},"SUB",[497,1163,1164],{},"58",[497,1166,1167],{},":",[497,1169,1170],{},"90",[497,1172,1173],{},"Z",[497,1175,1176],{},"122",[497,1178,1179],{},"z",[451,1181,1182,1185,1188,1191,1193,1196,1199,1202],{},[497,1183,1184],{},"27",[497,1186,1187],{},"ESC",[497,1189,1190],{},"59",[497,1192,364],{},[497,1194,1195],{},"91",[497,1197,1198],{},"[",[497,1200,1201],{},"123",[497,1203,1204],{},"{",[451,1206,1207,1210,1213,1216,1219,1222,1224,1227],{},[497,1208,1209],{},"28",[497,1211,1212],{},"FS",[497,1214,1215],{},"60",[497,1217,1218],{},"\u003C",[497,1220,1221],{},"92",[497,1223,892],{},[497,1225,1226],{},"124",[497,1228,1229],{},"|",[451,1231,1232,1235,1238,1241,1243,1246,1249,1252],{},[497,1233,1234],{},"29",[497,1236,1237],{},"GS",[497,1239,1240],{},"61",[497,1242,355],{},[497,1244,1245],{},"93",[497,1247,1248],{},"]",[497,1250,1251],{},"125",[497,1253,1254],{},"}",[451,1256,1257,1260,1263,1266,1269,1272,1275,1278],{},[497,1258,1259],{},"30",[497,1261,1262],{},"RS",[497,1264,1265],{},"62",[497,1267,1268],{},">",[497,1270,1271],{},"94",[497,1273,1274],{},"^",[497,1276,1277],{},"126",[497,1279,1280],{},"`",[451,1282,1283,1286,1289,1292,1295,1298,1301,1304],{},[497,1284,1285],{},"31",[497,1287,1288],{},"US",[497,1290,1291],{},"63",[497,1293,1294],{},"?",[497,1296,1297],{},"95",[497,1299,1300],{},"_",[497,1302,1303],{},"127",[497,1305,1306],{},"DEL",[171,1308,1309,1310,1313],{},"ASCII 码大致由以下",[457,1311,1312],{},"两部分组","成：",[175,1315,1316,1323],{},[178,1317,1318,1319,1322],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[457,1320,1321],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[178,1324,1325,1326,1329],{},"ASCII 打印字符：数字 ",[457,1327,1328],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[275,1331,1333],{"id":1332},"_134转义字符","1.3.4转义字符",[19,1335,1337],{"className":296,"code":1336,"language":298,"meta":24,"style":24},"\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",[26,1338,1339,1344,1360,1374,1379,1392,1397],{"__ignoreMap":24},[29,1340,1341],{"class":31,"line":32},[29,1342,1343],{"class":367},"\u002F\u002F换行符\n",[29,1345,1346,1349,1352,1355,1357],{"class":31,"line":43},[29,1347,1348],{"class":309},"cout ",[29,1350,1351],{"class":305},"\u003C\u003C",[29,1353,1354],{"class":103},"\"hello world\u002Fn\"",[29,1356,364],{"class":309},[29,1358,1359],{"class":367}," \u002F\u002F就等同于如下：\n",[29,1361,1362,1364,1366,1369,1371],{"class":31,"line":51},[29,1363,1348],{"class":309},[29,1365,1351],{"class":305},[29,1367,1368],{"class":103},"\"hello world\"",[29,1370,1351],{"class":305},[29,1372,1373],{"class":309},"endl;\n",[29,1375,1376],{"class":31,"line":59},[29,1377,1378],{"class":367},"\u002F\u002F反斜杠\n",[29,1380,1381,1383,1385,1388,1390],{"class":31,"line":67},[29,1382,1348],{"class":309},[29,1384,1351],{"class":305},[29,1386,1387],{"class":103},"\"\u002F\u002F\"",[29,1389,1351],{"class":305},[29,1391,1373],{"class":309},[29,1393,1394],{"class":31,"line":75},[29,1395,1396],{"class":367},"\u002F\u002F水平制表符\n",[29,1398,1399,1401,1403,1406,1409,1412,1414,1417],{"class":31,"line":83},[29,1400,1348],{"class":309},[29,1402,1351],{"class":305},[29,1404,1405],{"class":103},"\"aaaa",[29,1407,1408],{"class":39},"\\t",[29,1410,1411],{"class":103},"helloworld\"",[29,1413,1351],{"class":305},[29,1415,1416],{"class":309},"endl;",[29,1418,1419],{"class":367}," \u002F\u002F输出窗口时有对齐效果\n",[275,1421,1423],{"id":1422},"_135字符串型","1.3.5字符串型",[171,1425,1426,1427,1429],{},"char 变量名",[29,1428],{},"=\"字符串值\"",[19,1431,1433],{"className":296,"code":1432,"language":298,"meta":24,"style":24},"\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",[26,1434,1435,1440,1445,1450,1455,1469,1482,1487,1492,1503],{"__ignoreMap":24},[29,1436,1437],{"class":31,"line":32},[29,1438,1439],{"class":367},"\u002F\u002Fc风格字符串\n",[29,1441,1442],{"class":31,"line":43},[29,1443,1444],{"class":367},"\u002F\u002F注意事项：\n",[29,1446,1447],{"class":31,"line":51},[29,1448,1449],{"class":367},"\u002F\u002F1.char字符串名[]\n",[29,1451,1452],{"class":31,"line":59},[29,1453,1454],{"class":367},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[29,1456,1457,1459,1462,1464,1466],{"class":31,"line":67},[29,1458,405],{"class":305},[29,1460,1461],{"class":309}," str[]",[29,1463,355],{"class":305},[29,1465,1368],{"class":103},[29,1467,1468],{"class":309},";\n",[29,1470,1471,1473,1475,1478,1480],{"class":31,"line":75},[29,1472,1348],{"class":309},[29,1474,1351],{"class":305},[29,1476,1477],{"class":309},"str",[29,1479,1351],{"class":305},[29,1481,1373],{"class":309},[29,1483,1484],{"class":31,"line":83},[29,1485,1486],{"class":367},"\u002F\u002Fc++风格字符串\n",[29,1488,1489],{"class":31,"line":158},[29,1490,1491],{"class":367},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[29,1493,1494,1497,1499,1501],{"class":31,"line":166},[29,1495,1496],{"class":309},"string str2",[29,1498,355],{"class":305},[29,1500,1368],{"class":103},[29,1502,1468],{"class":309},[29,1504,1506,1508,1510,1513,1515],{"class":31,"line":1505},10,[29,1507,1348],{"class":309},[29,1509,1351],{"class":305},[29,1511,1512],{"class":309},"str2",[29,1514,1351],{"class":305},[29,1516,1373],{"class":309},[275,1518,1520],{"id":1519},"_136布尔类型bool","1.3.6布尔类型bool",[19,1522,1524],{"className":296,"code":1523,"language":298,"meta":24,"style":24},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[26,1525,1526,1541],{"__ignoreMap":24},[29,1527,1528,1531,1534,1536,1539],{"class":31,"line":32},[29,1529,1530],{"class":305},"bool",[29,1532,1533],{"class":309}," flag",[29,1535,355],{"class":305},[29,1537,1538],{"class":39},"true",[29,1540,1468],{"class":309},[29,1542,1543,1546,1549,1552,1554,1556],{"class":31,"line":43},[29,1544,1545],{"class":309},"cout",[29,1547,1548],{"class":305},"\u003C\u003Csizeof",[29,1550,1551],{"class":309},"(flag)",[29,1553,1351],{"class":305},[29,1555,1416],{"class":309},[29,1557,1558],{"class":367}," \u002F\u002F查看布尔占内存空间\n",[14,1560,1562],{"id":1561},"_14键盘输入cin","1.4键盘输入cin",[19,1564,1566],{"className":296,"code":1565,"language":298,"meta":24,"style":24},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[26,1567,1568,1581,1598,1609],{"__ignoreMap":24},[29,1569,1570,1572,1575,1577,1579],{"class":31,"line":32},[29,1571,313],{"class":305},[29,1573,1574],{"class":309}," a",[29,1576,355],{"class":305},[29,1578,499],{"class":39},[29,1580,1468],{"class":309},[29,1582,1583,1585,1587,1590,1592,1594,1596],{"class":31,"line":43},[29,1584,1545],{"class":309},[29,1586,1351],{"class":305},[29,1588,1589],{"class":103},"\"请给整型变量a赋值\"",[29,1591,1351],{"class":305},[29,1593,546],{"class":309},[29,1595,1351],{"class":305},[29,1597,1373],{"class":309},[29,1599,1600,1603,1606],{"class":31,"line":51},[29,1601,1602],{"class":309},"cin ",[29,1604,1605],{"class":305},">>",[29,1607,1608],{"class":309}," a;\n",[29,1610,1611,1613,1615,1618,1621,1623,1625],{"class":31,"line":59},[29,1612,1348],{"class":309},[29,1614,1351],{"class":305},[29,1616,1617],{"class":103}," \"整型变量a=\"",[29,1619,1620],{"class":305}," \u003C\u003C",[29,1622,546],{"class":309},[29,1624,1351],{"class":305},[29,1626,1373],{"class":309},[14,1628,1630],{"id":1629},"_15运算符","1.5运算符",[275,1632,1634],{"id":1633},"_151算术运算符","1.5.1算术运算符",[171,1636,1637,1641],{},[1638,1639],"img",{"alt":24,"src":1640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[259,1643,1644,1647,1650],{},[178,1645,1646],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[178,1648,1649],{},"两个小数不可以做取模运算",[178,1651,1652],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[275,1654,1656],{"id":1655},"_152赋值运算符","1.5.2赋值运算符",[171,1658,1659],{},[1638,1660],{"alt":24,"src":1661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[275,1663,1665],{"id":1664},"_153比较运算符","1.5.3比较运算符",[171,1667,1668],{},[1638,1669],{"alt":24,"src":1670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[275,1672,1674],{"id":1673},"_154逻辑运算符","1.5.4逻辑运算符",[171,1676,1677],{},[1638,1678],{"alt":24,"src":1679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1681,1683],{"id":1682},"_16程序流程结构","1.6程序流程结构",[275,1685,1687],{"id":1686},"_161选择结构","1.6.1选择结构",[259,1689,1690],{},[178,1691,1692],{},"if语句\n单行、多行、多条件if语句",[19,1694,1696],{"className":296,"code":1695,"language":298,"meta":24,"style":24},"\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",[26,1697,1698,1703,1718,1723,1737,1742,1747,1756,1769,1773,1786,1791,1797,1802,1816,1821,1827,1848,1853,1867,1872,1901,1906,1923,1928,1933,1938,1952,1957],{"__ignoreMap":24},[29,1699,1700],{"class":31,"line":32},[29,1701,1702],{"class":367},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[29,1704,1705,1708,1711,1713,1716],{"class":31,"line":43},[29,1706,1707],{"class":305},"if",[29,1709,1710],{"class":309},"(score",[29,1712,1268],{"class":305},[29,1714,1715],{"class":39},"600",[29,1717,316],{"class":309},[29,1719,1720],{"class":31,"line":51},[29,1721,1722],{"class":309},"{\n",[29,1724,1725,1728,1730,1733,1735],{"class":31,"line":59},[29,1726,1727],{"class":309},"    cout",[29,1729,1351],{"class":305},[29,1731,1732],{"class":103},"'这是单行if语句'",[29,1734,1351],{"class":305},[29,1736,1373],{"class":309},[29,1738,1739],{"class":31,"line":67},[29,1740,1741],{"class":309},"}\n",[29,1743,1744],{"class":31,"line":75},[29,1745,1746],{"class":367},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[29,1748,1749,1751,1753],{"class":31,"line":83},[29,1750,1602],{"class":309},[29,1752,1605],{"class":305},[29,1754,1755],{"class":309}," score\n",[29,1757,1758,1760,1762,1765,1767],{"class":31,"line":158},[29,1759,1707],{"class":305},[29,1761,1710],{"class":309},[29,1763,1764],{"class":305},"\u003C=",[29,1766,1715],{"class":39},[29,1768,316],{"class":309},[29,1770,1771],{"class":31,"line":166},[29,1772,1722],{"class":309},[29,1774,1775,1777,1779,1782,1784],{"class":31,"line":1505},[29,1776,1727],{"class":309},[29,1778,1605],{"class":305},[29,1780,1781],{"class":103},"\"小于等于600\"",[29,1783,1351],{"class":305},[29,1785,1373],{"class":309},[29,1787,1789],{"class":31,"line":1788},11,[29,1790,1741],{"class":309},[29,1792,1794],{"class":31,"line":1793},12,[29,1795,1796],{"class":305},"else\n",[29,1798,1800],{"class":31,"line":1799},13,[29,1801,1722],{"class":309},[29,1803,1805,1807,1809,1812,1814],{"class":31,"line":1804},14,[29,1806,1727],{"class":309},[29,1808,1605],{"class":305},[29,1810,1811],{"class":103},"\"大于600\"",[29,1813,1605],{"class":305},[29,1815,1373],{"class":309},[29,1817,1819],{"class":31,"line":1818},15,[29,1820,1741],{"class":309},[29,1822,1824],{"class":31,"line":1823},16,[29,1825,1826],{"class":367},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[29,1828,1830,1832,1835,1837,1839,1842,1844,1846],{"class":31,"line":1829},17,[29,1831,1707],{"class":305},[29,1833,1834],{"class":309}," (",[29,1836,499],{"class":39},[29,1838,1218],{"class":305},[29,1840,1841],{"class":309},"num",[29,1843,1218],{"class":305},[29,1845,619],{"class":39},[29,1847,316],{"class":309},[29,1849,1851],{"class":31,"line":1850},18,[29,1852,1722],{"class":309},[29,1854,1856,1858,1860,1863,1865],{"class":31,"line":1855},19,[29,1857,1727],{"class":309},[29,1859,1351],{"class":305},[29,1861,1862],{"class":103},"\"小于100\"",[29,1864,1351],{"class":305},[29,1866,1373],{"class":309},[29,1868,1870],{"class":31,"line":1869},20,[29,1871,1741],{"class":309},[29,1873,1875,1878,1881,1884,1887,1889,1892,1894,1896,1899],{"class":31,"line":1874},21,[29,1876,1877],{"class":305},"else",[29,1879,1880],{"class":305}," if",[29,1882,1883],{"class":309}," (nmu",[29,1885,1886],{"class":305},">=",[29,1888,619],{"class":39},[29,1890,1891],{"class":305},"&&",[29,1893,1841],{"class":309},[29,1895,1218],{"class":305},[29,1897,1898],{"class":39},"200",[29,1900,316],{"class":309},[29,1902,1904],{"class":31,"line":1903},22,[29,1905,1722],{"class":309},[29,1907,1909,1911,1913,1916,1918,1920],{"class":31,"line":1908},23,[29,1910,1727],{"class":309},[29,1912,1351],{"class":305},[29,1914,1915],{"class":103},"\"不小于100且小于200\"",[29,1917,1351],{"class":305},[29,1919,1416],{"class":309},[29,1921,1922],{"class":367}," \u002F\u002F可以无限else if,python中是elif：\n",[29,1924,1926],{"class":31,"line":1925},24,[29,1927,1741],{"class":309},[29,1929,1931],{"class":31,"line":1930},25,[29,1932,1796],{"class":305},[29,1934,1936],{"class":31,"line":1935},26,[29,1937,1722],{"class":309},[29,1939,1941,1943,1945,1948,1950],{"class":31,"line":1940},27,[29,1942,1727],{"class":309},[29,1944,1351],{"class":305},[29,1946,1947],{"class":103},"\"不小于200\"",[29,1949,1351],{"class":305},[29,1951,1373],{"class":309},[29,1953,1955],{"class":31,"line":1954},28,[29,1956,1741],{"class":309},[29,1958,1960],{"class":31,"line":1959},29,[29,1961,1962],{"class":367},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[259,1964,1965],{"start":43},[178,1966,1967],{},"三目运算符",[19,1969,1971],{"className":296,"code":1970,"language":298,"meta":24,"style":24},"\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",[26,1972,1973,1978,1983,2009,2031,2048,2053,2076,2091],{"__ignoreMap":24},[29,1974,1975],{"class":31,"line":32},[29,1976,1977],{"class":367},"\u002F\u002F创建三个变量a,b,c\n",[29,1979,1980],{"class":31,"line":43},[29,1981,1982],{"class":367},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[29,1984,1985,1987,1989,1991,1993,1996,1998,2000,2003,2005,2007],{"class":31,"line":51},[29,1986,313],{"class":305},[29,1988,1574],{"class":309},[29,1990,355],{"class":305},[29,1992,1008],{"class":39},[29,1994,1995],{"class":309},",b",[29,1997,355],{"class":305},[29,1999,754],{"class":39},[29,2001,2002],{"class":309},",c",[29,2004,355],{"class":305},[29,2006,499],{"class":39},[29,2008,1468],{"class":309},[29,2010,2011,2013,2015,2018,2020,2022,2024,2026,2028],{"class":31,"line":59},[29,2012,596],{"class":309},[29,2014,355],{"class":305},[29,2016,2017],{"class":309},"(a",[29,2019,1268],{"class":305},[29,2021,571],{"class":309},[29,2023,1294],{"class":305},[29,2025,546],{"class":309},[29,2027,1167],{"class":305},[29,2029,2030],{"class":309},"b)\n",[29,2032,2033,2035,2037,2040,2042,2044,2046],{"class":31,"line":67},[29,2034,1545],{"class":309},[29,2036,1351],{"class":305},[29,2038,2039],{"class":103},"\"c=\"",[29,2041,1351],{"class":305},[29,2043,596],{"class":309},[29,2045,1351],{"class":305},[29,2047,1373],{"class":309},[29,2049,2050],{"class":31,"line":75},[29,2051,2052],{"class":367},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[29,2054,2055,2057,2059,2061,2063,2065,2067,2070,2072,2074],{"class":31,"line":83},[29,2056,2017],{"class":309},[29,2058,1268],{"class":305},[29,2060,571],{"class":309},[29,2062,1294],{"class":305},[29,2064,546],{"class":309},[29,2066,1167],{"class":305},[29,2068,2069],{"class":309},"b)",[29,2071,355],{"class":305},[29,2073,619],{"class":39},[29,2075,1468],{"class":309},[29,2077,2078,2080,2082,2084,2086,2088],{"class":31,"line":158},[29,2079,1545],{"class":309},[29,2081,1351],{"class":305},[29,2083,546],{"class":309},[29,2085,1351],{"class":305},[29,2087,1416],{"class":309},[29,2089,2090],{"class":367}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[29,2092,2093,2095,2097,2099,2101,2103],{"class":31,"line":166},[29,2094,1545],{"class":309},[29,2096,1351],{"class":305},[29,2098,571],{"class":309},[29,2100,1351],{"class":305},[29,2102,1416],{"class":309},[29,2104,2105],{"class":367}," \u002F\u002F10   a>b,b还是原值\n",[259,2107,2108],{"start":51},[178,2109,2110],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[19,2112,2114],{"className":296,"code":2113,"language":298,"meta":24,"style":24},"\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",[26,2115,2116,2121,2129,2142,2152,2156,2170,2183,2193,2201,2206,2231,2252,2274,2295,2317,2338,2358,2363],{"__ignoreMap":24},[29,2117,2118],{"class":31,"line":32},[29,2119,2120],{"class":367},"\u002F\u002F案例-电影打分\n",[29,2122,2123,2126],{"class":31,"line":43},[29,2124,2125],{"class":305},"#include",[29,2127,2128],{"class":103},"\u003Ciostream>\n",[29,2130,2131,2134,2137,2140],{"class":31,"line":51},[29,2132,2133],{"class":305},"using",[29,2135,2136],{"class":305}," namespace",[29,2138,2139],{"class":35}," std",[29,2141,1468],{"class":309},[29,2143,2144,2146,2149],{"class":31,"line":59},[29,2145,313],{"class":305},[29,2147,2148],{"class":35}," main",[29,2150,2151],{"class":309},"()\n",[29,2153,2154],{"class":31,"line":67},[29,2155,1722],{"class":309},[29,2157,2158,2161,2164,2166,2168],{"class":31,"line":75},[29,2159,2160],{"class":305},"    int",[29,2162,2163],{"class":309}," score",[29,2165,355],{"class":305},[29,2167,499],{"class":39},[29,2169,1468],{"class":309},[29,2171,2172,2174,2176,2179,2181],{"class":31,"line":83},[29,2173,1727],{"class":309},[29,2175,1351],{"class":305},[29,2177,2178],{"class":103},"\"电影打分：\"",[29,2180,1351],{"class":305},[29,2182,1373],{"class":309},[29,2184,2185,2188,2190],{"class":31,"line":158},[29,2186,2187],{"class":309},"    cin",[29,2189,1605],{"class":305},[29,2191,2192],{"class":309},"score;\n",[29,2194,2195,2198],{"class":31,"line":166},[29,2196,2197],{"class":305},"    switch",[29,2199,2200],{"class":309},"(score)\n",[29,2202,2203],{"class":31,"line":1505},[29,2204,2205],{"class":309},"    {\n",[29,2207,2208,2211,2214,2217,2219,2222,2224,2226,2229],{"class":31,"line":1788},[29,2209,2210],{"class":305},"        case",[29,2212,2213],{"class":39}," 10",[29,2215,2216],{"class":309},":cout",[29,2218,1351],{"class":305},[29,2220,2221],{"class":103},"\"经典\"",[29,2223,1351],{"class":305},[29,2225,1416],{"class":309},[29,2227,2228],{"class":305},"break",[29,2230,1468],{"class":309},[29,2232,2233,2235,2238,2240,2242,2244,2246,2248,2250],{"class":31,"line":1793},[29,2234,2210],{"class":305},[29,2236,2237],{"class":39}," 9",[29,2239,2216],{"class":309},[29,2241,1351],{"class":305},[29,2243,2221],{"class":103},[29,2245,1351],{"class":305},[29,2247,1416],{"class":309},[29,2249,2228],{"class":305},[29,2251,1468],{"class":309},[29,2253,2254,2256,2259,2261,2263,2266,2268,2270,2272],{"class":31,"line":1799},[29,2255,2210],{"class":305},[29,2257,2258],{"class":39}," 8",[29,2260,2216],{"class":309},[29,2262,1351],{"class":305},[29,2264,2265],{"class":103},"\"非常好\"",[29,2267,1351],{"class":305},[29,2269,1416],{"class":309},[29,2271,2228],{"class":305},[29,2273,1468],{"class":309},[29,2275,2276,2278,2281,2283,2285,2287,2289,2291,2293],{"class":31,"line":1804},[29,2277,2210],{"class":305},[29,2279,2280],{"class":39}," 7",[29,2282,2216],{"class":309},[29,2284,1351],{"class":305},[29,2286,2265],{"class":103},[29,2288,1351],{"class":305},[29,2290,1416],{"class":309},[29,2292,2228],{"class":305},[29,2294,1468],{"class":309},[29,2296,2297,2299,2302,2304,2306,2309,2311,2313,2315],{"class":31,"line":1818},[29,2298,2210],{"class":305},[29,2300,2301],{"class":39}," 6",[29,2303,2216],{"class":309},[29,2305,1351],{"class":305},[29,2307,2308],{"class":103},"\"一般\"",[29,2310,1351],{"class":305},[29,2312,1416],{"class":309},[29,2314,2228],{"class":305},[29,2316,1468],{"class":309},[29,2318,2319,2321,2324,2326,2328,2330,2332,2334,2336],{"class":31,"line":1823},[29,2320,2210],{"class":305},[29,2322,2323],{"class":39}," 5",[29,2325,2216],{"class":309},[29,2327,1351],{"class":305},[29,2329,2308],{"class":103},[29,2331,1351],{"class":305},[29,2333,1416],{"class":309},[29,2335,2228],{"class":305},[29,2337,1468],{"class":309},[29,2339,2340,2343,2345,2347,2350,2352,2354,2356],{"class":31,"line":1829},[29,2341,2342],{"class":305},"        default",[29,2344,2216],{"class":309},[29,2346,1351],{"class":305},[29,2348,2349],{"class":103},"\"烂片\"",[29,2351,1351],{"class":305},[29,2353,1416],{"class":309},[29,2355,2228],{"class":305},[29,2357,1468],{"class":309},[29,2359,2360],{"class":31,"line":1850},[29,2361,2362],{"class":309},"    }\n",[29,2364,2365],{"class":31,"line":1855},[29,2366,1741],{"class":309},[171,2368,2369],{},"if和switch区别：",[175,2371,2372,2375],{},[178,2373,2374],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[178,2376,2377],{},"switch优点：结构清晰，执行效率高",[275,2379,2381],{"id":2380},"_162循环结构","1.6.2循环结构",[259,2383,2384],{},[178,2385,2386],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[19,2388,2390],{"className":296,"code":2389,"language":298,"meta":24,"style":24},"\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",[26,2391,2392,2397,2405,2409,2422,2436,2440,2460,2470,2474,2486],{"__ignoreMap":24},[29,2393,2394],{"class":31,"line":32},[29,2395,2396],{"class":367},"\u002F\u002F打印0-9数字\n",[29,2398,2399,2401,2403],{"class":31,"line":43},[29,2400,313],{"class":305},[29,2402,2148],{"class":35},[29,2404,2151],{"class":309},[29,2406,2407],{"class":31,"line":51},[29,2408,1722],{"class":309},[29,2410,2411,2413,2416,2418,2420],{"class":31,"line":59},[29,2412,2160],{"class":305},[29,2414,2415],{"class":309}," num",[29,2417,355],{"class":305},[29,2419,499],{"class":39},[29,2421,1468],{"class":309},[29,2423,2424,2427,2430,2432,2434],{"class":31,"line":67},[29,2425,2426],{"class":305},"    while",[29,2428,2429],{"class":309},"(num",[29,2431,1218],{"class":305},[29,2433,754],{"class":39},[29,2435,316],{"class":309},[29,2437,2438],{"class":31,"line":75},[29,2439,2205],{"class":309},[29,2441,2442,2445,2448,2450,2452,2454,2457],{"class":31,"line":83},[29,2443,2444],{"class":35},"       std",[29,2446,2447],{"class":309},"::cout",[29,2449,1351],{"class":305},[29,2451,1841],{"class":309},[29,2453,1351],{"class":305},[29,2455,2456],{"class":35},"std",[29,2458,2459],{"class":309},"::endl;\n",[29,2461,2462,2465,2468],{"class":31,"line":158},[29,2463,2464],{"class":309},"        num",[29,2466,2467],{"class":305},"++",[29,2469,1468],{"class":309},[29,2471,2472],{"class":31,"line":166},[29,2473,2362],{"class":309},[29,2475,2476,2479,2481,2484],{"class":31,"line":1505},[29,2477,2478],{"class":35},"    system",[29,2480,310],{"class":309},[29,2482,2483],{"class":103},"\"pause\"",[29,2485,316],{"class":309},[29,2487,2488],{"class":31,"line":1788},[29,2489,1741],{"class":309},[171,2491,2492],{},"注意：写好循环条件，避免死循环情况",[19,2494,2496],{"className":296,"code":2495,"language":298,"meta":24,"style":24},"\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",[26,2497,2498,2503,2510,2517,2527,2535,2539,2544,2571,2576,2581,2589,2616,2621,2626,2639,2649,2653,2663,2668,2681,2686,2700,2705,2720,2724,2737,2741,2746,2750,2764,2772,2777,2783,2789,2794],{"__ignoreMap":24},[29,2499,2500],{"class":31,"line":32},[29,2501,2502],{"class":367},"\u002F\u002F循环结构-猜数字\n",[29,2504,2505,2507],{"class":31,"line":43},[29,2506,2125],{"class":305},[29,2508,2509],{"class":103}," \u003Ciostream>\n",[29,2511,2512,2514],{"class":31,"line":51},[29,2513,2125],{"class":305},[29,2515,2516],{"class":103}," \u003Cctime>\n",[29,2518,2519,2521,2523,2525],{"class":31,"line":59},[29,2520,2133],{"class":305},[29,2522,2136],{"class":305},[29,2524,2139],{"class":35},[29,2526,1468],{"class":309},[29,2528,2529,2531,2533],{"class":31,"line":67},[29,2530,313],{"class":305},[29,2532,2148],{"class":35},[29,2534,2151],{"class":309},[29,2536,2537],{"class":31,"line":75},[29,2538,1722],{"class":309},[29,2540,2541],{"class":31,"line":83},[29,2542,2543],{"class":367},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[29,2545,2546,2549,2552,2555,2558,2560,2563,2565,2568],{"class":31,"line":158},[29,2547,2548],{"class":35},"    srand",[29,2550,2551],{"class":309},"((",[29,2553,2554],{"class":305},"unsigned",[29,2556,2557],{"class":305}," int",[29,2559,737],{"class":309},[29,2561,2562],{"class":35},"time",[29,2564,310],{"class":309},[29,2566,2567],{"class":39},"NULL",[29,2569,2570],{"class":309},"));\n",[29,2572,2573],{"class":31,"line":166},[29,2574,2575],{"emptyLinePlaceholder":233},"\n",[29,2577,2578],{"class":31,"line":1505},[29,2579,2580],{"class":367},"    \u002F\u002F1.系统生成随机数\n",[29,2582,2583,2586],{"class":31,"line":1788},[29,2584,2585],{"class":367},"    \u002F\u002Frand()%100",[29,2587,2588],{"class":367}," \u002F\u002F生成0-99的随机数\n",[29,2590,2591,2593,2595,2597,2600,2603,2605,2607,2609,2611,2613],{"class":31,"line":1793},[29,2592,2160],{"class":305},[29,2594,2415],{"class":309},[29,2596,355],{"class":305},[29,2598,2599],{"class":35},"rand",[29,2601,2602],{"class":309},"()",[29,2604,636],{"class":305},[29,2606,619],{"class":39},[29,2608,789],{"class":305},[29,2610,525],{"class":39},[29,2612,364],{"class":309},[29,2614,2615],{"class":367}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[29,2617,2618],{"class":31,"line":1799},[29,2619,2620],{"class":367},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[29,2622,2623],{"class":31,"line":1804},[29,2624,2625],{"class":367},"    \u002F\u002F2.玩家猜测\n",[29,2627,2628,2630,2633,2635,2637],{"class":31,"line":1818},[29,2629,2160],{"class":305},[29,2631,2632],{"class":309}," val",[29,2634,355],{"class":305},[29,2636,499],{"class":39},[29,2638,1468],{"class":309},[29,2640,2641,2643,2645,2647],{"class":31,"line":1823},[29,2642,2426],{"class":305},[29,2644,1834],{"class":309},[29,2646,525],{"class":39},[29,2648,316],{"class":309},[29,2650,2651],{"class":31,"line":1829},[29,2652,2205],{"class":309},[29,2654,2655,2658,2660],{"class":31,"line":1850},[29,2656,2657],{"class":309},"        cin",[29,2659,1605],{"class":305},[29,2661,2662],{"class":309},"val;\n",[29,2664,2665],{"class":31,"line":1855},[29,2666,2667],{"class":367},"        \u002F\u002F3.判断玩家猜测\n",[29,2669,2670,2673,2676,2678],{"class":31,"line":1869},[29,2671,2672],{"class":305},"        if",[29,2674,2675],{"class":309},"(val",[29,2677,1218],{"class":305},[29,2679,2680],{"class":309},"num) \n",[29,2682,2683],{"class":31,"line":1874},[29,2684,2685],{"class":309},"        {\n",[29,2687,2688,2691,2693,2696,2698],{"class":31,"line":1903},[29,2689,2690],{"class":309},"            cout",[29,2692,1351],{"class":305},[29,2694,2695],{"class":103},"\"猜小了！\"",[29,2697,1351],{"class":305},[29,2699,1373],{"class":309},[29,2701,2702],{"class":31,"line":1908},[29,2703,2704],{"class":309},"        }\n",[29,2706,2707,2710,2712,2715,2717],{"class":31,"line":1925},[29,2708,2709],{"class":305},"        else",[29,2711,1880],{"class":305},[29,2713,2714],{"class":309}," (val",[29,2716,1268],{"class":305},[29,2718,2719],{"class":309},"num)\n",[29,2721,2722],{"class":31,"line":1930},[29,2723,2685],{"class":309},[29,2725,2726,2728,2730,2733,2735],{"class":31,"line":1935},[29,2727,2690],{"class":309},[29,2729,1351],{"class":305},[29,2731,2732],{"class":103},"\"猜大了！\"",[29,2734,1351],{"class":305},[29,2736,1373],{"class":309},[29,2738,2739],{"class":31,"line":1940},[29,2740,2704],{"class":309},[29,2742,2743],{"class":31,"line":1954},[29,2744,2745],{"class":305},"        else\n",[29,2747,2748],{"class":31,"line":1959},[29,2749,2685],{"class":309},[29,2751,2753,2755,2757,2760,2762],{"class":31,"line":2752},30,[29,2754,2690],{"class":309},[29,2756,1351],{"class":305},[29,2758,2759],{"class":103},"\"猜对了！\"",[29,2761,1351],{"class":305},[29,2763,1373],{"class":309},[29,2765,2767,2770],{"class":31,"line":2766},31,[29,2768,2769],{"class":305},"            break",[29,2771,1468],{"class":309},[29,2773,2775],{"class":31,"line":2774},32,[29,2776,2704],{"class":309},[29,2778,2780],{"class":31,"line":2779},33,[29,2781,2782],{"class":367},"        \u002F\u002F猜对 退出游戏\n",[29,2784,2786],{"class":31,"line":2785},34,[29,2787,2788],{"class":367},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[29,2790,2792],{"class":31,"line":2791},35,[29,2793,2362],{"class":309},[29,2795,2797],{"class":31,"line":2796},36,[29,2798,1741],{"class":309},[259,2800,2801],{"start":43},[178,2802,2803,2804,2807],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[457,2805,2806],{},"do...while会先执行一次循环语句","，在判断循环语句",[19,2809,2811],{"className":296,"code":2810,"language":298,"meta":24,"style":24},"\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",[26,2812,2813,2818,2826,2830,2842,2850,2854,2871,2878,2882,2895,2905],{"__ignoreMap":24},[29,2814,2815],{"class":31,"line":32},[29,2816,2817],{"class":367},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[29,2819,2820,2822,2824],{"class":31,"line":43},[29,2821,313],{"class":305},[29,2823,2148],{"class":35},[29,2825,2151],{"class":309},[29,2827,2828],{"class":31,"line":51},[29,2829,1722],{"class":309},[29,2831,2832,2834,2836,2838,2840],{"class":31,"line":59},[29,2833,2160],{"class":305},[29,2835,2415],{"class":309},[29,2837,355],{"class":305},[29,2839,499],{"class":39},[29,2841,1468],{"class":309},[29,2843,2844,2847],{"class":31,"line":67},[29,2845,2846],{"class":305},"    do",[29,2848,2849],{"class":309}," \n",[29,2851,2852],{"class":31,"line":75},[29,2853,2205],{"class":309},[29,2855,2856,2859,2861,2863,2865,2867,2869],{"class":31,"line":83},[29,2857,2858],{"class":35},"        std",[29,2860,2447],{"class":309},[29,2862,1351],{"class":305},[29,2864,1841],{"class":309},[29,2866,1351],{"class":305},[29,2868,2456],{"class":35},[29,2870,2459],{"class":309},[29,2872,2873,2875],{"class":31,"line":158},[29,2874,2464],{"class":309},[29,2876,2877],{"class":305},"++\n",[29,2879,2880],{"class":31,"line":166},[29,2881,2362],{"class":309},[29,2883,2884,2886,2888,2890,2892],{"class":31,"line":1505},[29,2885,2426],{"class":305},[29,2887,2429],{"class":309},[29,2889,1218],{"class":305},[29,2891,754],{"class":39},[29,2893,2894],{"class":309},");\n",[29,2896,2897,2899,2901,2903],{"class":31,"line":1788},[29,2898,2478],{"class":35},[29,2900,310],{"class":309},[29,2902,2483],{"class":103},[29,2904,2894],{"class":309},[29,2906,2907],{"class":31,"line":1793},[29,2908,1741],{"class":309},[171,2910,2911],{},"案例-水仙花数",[171,2913,2914],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[171,2916,2917],{},"例如：1^3+5^3+3^3=153",[171,2919,2920],{},"请用do...while语句，求出所有3位数的水仙花数",[19,2922,2924],{"className":296,"code":2923,"language":298,"meta":24,"style":24},"#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",[26,2925,2926,2932,2942,2950,2954,2959,2971,2977,2981,2986,3002,3018,3034,3049,3068,3083,3131,3135,3147,3151,3159,3163,3177],{"__ignoreMap":24},[29,2927,2928,2930],{"class":31,"line":32},[29,2929,2125],{"class":305},[29,2931,2509],{"class":103},[29,2933,2934,2936,2938,2940],{"class":31,"line":43},[29,2935,2133],{"class":305},[29,2937,2136],{"class":305},[29,2939,2139],{"class":35},[29,2941,1468],{"class":309},[29,2943,2944,2946,2948],{"class":31,"line":51},[29,2945,313],{"class":305},[29,2947,2148],{"class":35},[29,2949,2151],{"class":309},[29,2951,2952],{"class":31,"line":59},[29,2953,1722],{"class":309},[29,2955,2956],{"class":31,"line":67},[29,2957,2958],{"class":367},"    \u002F\u002F1.先打印所有三位数字\n",[29,2960,2961,2963,2965,2967,2969],{"class":31,"line":75},[29,2962,2160],{"class":305},[29,2964,2415],{"class":309},[29,2966,355],{"class":305},[29,2968,619],{"class":39},[29,2970,1468],{"class":309},[29,2972,2973,2975],{"class":31,"line":83},[29,2974,2846],{"class":305},[29,2976,2849],{"class":309},[29,2978,2979],{"class":31,"line":158},[29,2980,2205],{"class":309},[29,2982,2983],{"class":31,"line":166},[29,2984,2985],{"class":367},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[29,2987,2988,2991,2993,2995,2997,2999],{"class":31,"line":1505},[29,2989,2990],{"class":305},"        int",[29,2992,1574],{"class":309},[29,2994,355],{"class":305},[29,2996,499],{"class":39},[29,2998,364],{"class":309},[29,3000,3001],{"class":367}," \u002F\u002F个位\n",[29,3003,3004,3006,3009,3011,3013,3015],{"class":31,"line":1788},[29,3005,2990],{"class":305},[29,3007,3008],{"class":309}," b",[29,3010,355],{"class":305},[29,3012,499],{"class":39},[29,3014,364],{"class":309},[29,3016,3017],{"class":367}," \u002F\u002F十位\n",[29,3019,3020,3022,3025,3027,3029,3031],{"class":31,"line":1793},[29,3021,2990],{"class":305},[29,3023,3024],{"class":309}," c",[29,3026,355],{"class":305},[29,3028,499],{"class":39},[29,3030,364],{"class":309},[29,3032,3033],{"class":367}," \u002F\u002F百位\n",[29,3035,3036,3039,3041,3043,3045,3047],{"class":31,"line":1799},[29,3037,3038],{"class":309},"        a",[29,3040,355],{"class":305},[29,3042,1841],{"class":309},[29,3044,636],{"class":305},[29,3046,754],{"class":39},[29,3048,1468],{"class":309},[29,3050,3051,3054,3056,3058,3060,3062,3064,3066],{"class":31,"line":1804},[29,3052,3053],{"class":309},"        b",[29,3055,355],{"class":305},[29,3057,1841],{"class":309},[29,3059,892],{"class":305},[29,3061,754],{"class":39},[29,3063,636],{"class":305},[29,3065,754],{"class":39},[29,3067,1468],{"class":309},[29,3069,3070,3073,3075,3077,3079,3081],{"class":31,"line":1818},[29,3071,3072],{"class":309},"        c",[29,3074,355],{"class":305},[29,3076,1841],{"class":309},[29,3078,892],{"class":305},[29,3080,619],{"class":39},[29,3082,1468],{"class":309},[29,3084,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3122,3125,3128],{"class":31,"line":1823},[29,3086,2672],{"class":305},[29,3088,2017],{"class":309},[29,3090,763],{"class":305},[29,3092,546],{"class":309},[29,3094,763],{"class":305},[29,3096,546],{"class":309},[29,3098,789],{"class":305},[29,3100,571],{"class":309},[29,3102,763],{"class":305},[29,3104,571],{"class":309},[29,3106,763],{"class":305},[29,3108,571],{"class":309},[29,3110,789],{"class":305},[29,3112,596],{"class":309},[29,3114,763],{"class":305},[29,3116,596],{"class":309},[29,3118,763],{"class":305},[29,3120,3121],{"class":309},"c ",[29,3123,3124],{"class":305},"==",[29,3126,3127],{"class":309}," num)",[29,3129,3130],{"class":367}," \u002F\u002F如果是水仙花数，才打印\n",[29,3132,3133],{"class":31,"line":1829},[29,3134,2685],{"class":309},[29,3136,3137,3139,3141,3143,3145],{"class":31,"line":1850},[29,3138,2690],{"class":309},[29,3140,1351],{"class":305},[29,3142,1841],{"class":309},[29,3144,1351],{"class":305},[29,3146,1373],{"class":309},[29,3148,3149],{"class":31,"line":1855},[29,3150,2704],{"class":309},[29,3152,3153,3155,3157],{"class":31,"line":1869},[29,3154,2464],{"class":309},[29,3156,2467],{"class":305},[29,3158,1468],{"class":309},[29,3160,3161],{"class":31,"line":1874},[29,3162,2362],{"class":309},[29,3164,3165,3167,3170,3172,3175],{"class":31,"line":1903},[29,3166,2426],{"class":305},[29,3168,3169],{"class":309}," (num ",[29,3171,1218],{"class":305},[29,3173,3174],{"class":39}," 1000",[29,3176,2894],{"class":309},[29,3178,3179],{"class":31,"line":1908},[29,3180,1741],{"class":309},[259,3182,3183],{"start":51},[178,3184,3185],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[19,3187,3189],{"className":296,"code":3188,"language":298,"meta":24,"style":24},"\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",[26,3190,3191,3196,3225,3229,3241,3245,3250,3261,3268,3272,3286,3290,3297,3301,3313,3322],{"__ignoreMap":24},[29,3192,3193],{"class":31,"line":32},[29,3194,3195],{"class":367},"\u002F\u002F从数字0-9打印\n",[29,3197,3198,3201,3203,3205,3208,3210,3212,3215,3217,3219,3221,3223],{"class":31,"line":43},[29,3199,3200],{"class":305},"for",[29,3202,310],{"class":309},[29,3204,313],{"class":305},[29,3206,3207],{"class":309}," i",[29,3209,355],{"class":305},[29,3211,499],{"class":39},[29,3213,3214],{"class":309},";i",[29,3216,1218],{"class":305},[29,3218,754],{"class":39},[29,3220,3214],{"class":309},[29,3222,2467],{"class":305},[29,3224,316],{"class":309},[29,3226,3227],{"class":31,"line":51},[29,3228,1722],{"class":309},[29,3230,3231,3233,3235,3237,3239],{"class":31,"line":59},[29,3232,1727],{"class":309},[29,3234,1351],{"class":305},[29,3236,749],{"class":309},[29,3238,1351],{"class":305},[29,3240,1373],{"class":309},[29,3242,3243],{"class":31,"line":67},[29,3244,1741],{"class":309},[29,3246,3247],{"class":31,"line":75},[29,3248,3249],{"class":367},"\u002F\u002F上式可以进行拆分\n",[29,3251,3252,3254,3256,3258],{"class":31,"line":83},[29,3253,313],{"class":305},[29,3255,3207],{"class":309},[29,3257,355],{"class":305},[29,3259,3260],{"class":39},"0\n",[29,3262,3263,3265],{"class":31,"line":158},[29,3264,3200],{"class":305},[29,3266,3267],{"class":309},"(;;;)\n",[29,3269,3270],{"class":31,"line":166},[29,3271,1722],{"class":309},[29,3273,3274,3277,3280,3282,3284],{"class":31,"line":1505},[29,3275,3276],{"class":305},"    if",[29,3278,3279],{"class":309},"(i",[29,3281,1886],{"class":305},[29,3283,754],{"class":39},[29,3285,316],{"class":309},[29,3287,3288],{"class":31,"line":1788},[29,3289,2205],{"class":309},[29,3291,3292,3295],{"class":31,"line":1793},[29,3293,3294],{"class":305},"        break",[29,3296,1468],{"class":309},[29,3298,3299],{"class":31,"line":1799},[29,3300,2362],{"class":309},[29,3302,3303,3305,3307,3309,3311],{"class":31,"line":1804},[29,3304,1727],{"class":309},[29,3306,1351],{"class":305},[29,3308,749],{"class":309},[29,3310,1351],{"class":305},[29,3312,1373],{"class":309},[29,3314,3315,3318,3320],{"class":31,"line":1818},[29,3316,3317],{"class":309},"    i",[29,3319,2467],{"class":305},[29,3321,1468],{"class":309},[29,3323,3324],{"class":31,"line":1823},[29,3325,1741],{"class":309},[171,3327,3328],{},"小练习",[19,3330,3332],{"className":296,"code":3331,"language":298,"meta":24,"style":24},"#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",[26,3333,3334,3340,3350,3358,3362,3367,3372,3400,3404,3409,3414,3455,3459,3472,3476,3480,3484,3496,3500,3504],{"__ignoreMap":24},[29,3335,3336,3338],{"class":31,"line":32},[29,3337,2125],{"class":305},[29,3339,2128],{"class":103},[29,3341,3342,3344,3346,3348],{"class":31,"line":43},[29,3343,2133],{"class":305},[29,3345,2136],{"class":305},[29,3347,2139],{"class":35},[29,3349,1468],{"class":309},[29,3351,3352,3354,3356],{"class":31,"line":51},[29,3353,313],{"class":305},[29,3355,2148],{"class":35},[29,3357,2151],{"class":309},[29,3359,3360],{"class":31,"line":59},[29,3361,1722],{"class":309},[29,3363,3364],{"class":31,"line":67},[29,3365,3366],{"class":367},"    \u002F\u002F敲桌子案例\n",[29,3368,3369],{"class":31,"line":75},[29,3370,3371],{"class":367},"    \u002F\u002F1.先输出1-100的数字\n",[29,3373,3374,3377,3379,3381,3383,3385,3387,3390,3392,3394,3396,3398],{"class":31,"line":83},[29,3375,3376],{"class":305},"    for",[29,3378,310],{"class":309},[29,3380,313],{"class":305},[29,3382,3207],{"class":309},[29,3384,355],{"class":305},[29,3386,525],{"class":39},[29,3388,3389],{"class":309},"; i",[29,3391,1764],{"class":305},[29,3393,619],{"class":39},[29,3395,3389],{"class":309},[29,3397,2467],{"class":305},[29,3399,316],{"class":309},[29,3401,3402],{"class":31,"line":158},[29,3403,2205],{"class":309},[29,3405,3406],{"class":31,"line":166},[29,3407,3408],{"class":367},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[29,3410,3411],{"class":31,"line":1505},[29,3412,3413],{"class":367},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[29,3415,3416,3418,3420,3422,3424,3426,3428,3431,3433,3435,3437,3439,3441,3443,3445,3447,3449,3451,3453],{"class":31,"line":1788},[29,3417,2672],{"class":305},[29,3419,3279],{"class":309},[29,3421,636],{"class":305},[29,3423,677],{"class":39},[29,3425,3124],{"class":305},[29,3427,499],{"class":39},[29,3429,3430],{"class":305}," ||",[29,3432,3207],{"class":309},[29,3434,636],{"class":305},[29,3436,754],{"class":39},[29,3438,3124],{"class":305},[29,3440,677],{"class":39},[29,3442,3430],{"class":305},[29,3444,3207],{"class":309},[29,3446,892],{"class":305},[29,3448,754],{"class":39},[29,3450,3124],{"class":305},[29,3452,677],{"class":39},[29,3454,316],{"class":309},[29,3456,3457],{"class":31,"line":1793},[29,3458,2685],{"class":309},[29,3460,3461,3463,3465,3468,3470],{"class":31,"line":1799},[29,3462,2690],{"class":309},[29,3464,1351],{"class":305},[29,3466,3467],{"class":103},"\"敲桌子\"",[29,3469,1351],{"class":305},[29,3471,1373],{"class":309},[29,3473,3474],{"class":31,"line":1804},[29,3475,2704],{"class":309},[29,3477,3478],{"class":31,"line":1818},[29,3479,2745],{"class":305},[29,3481,3482],{"class":31,"line":1823},[29,3483,2685],{"class":309},[29,3485,3486,3488,3490,3492,3494],{"class":31,"line":1829},[29,3487,2690],{"class":309},[29,3489,1351],{"class":305},[29,3491,749],{"class":309},[29,3493,1351],{"class":305},[29,3495,1373],{"class":309},[29,3497,3498],{"class":31,"line":1850},[29,3499,2704],{"class":309},[29,3501,3502],{"class":31,"line":1855},[29,3503,2362],{"class":309},[29,3505,3506],{"class":31,"line":1869},[29,3507,1741],{"class":309},[171,3509,3510],{},"嵌套实现星图",[19,3512,3514],{"className":296,"code":3513,"language":298,"meta":24,"style":24},"#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",[26,3515,3516,3522,3532,3540,3544,3570,3574,3603,3607,3618,3622,3631,3635],{"__ignoreMap":24},[29,3517,3518,3520],{"class":31,"line":32},[29,3519,2125],{"class":305},[29,3521,2128],{"class":103},[29,3523,3524,3526,3528,3530],{"class":31,"line":43},[29,3525,2133],{"class":305},[29,3527,2136],{"class":305},[29,3529,2139],{"class":35},[29,3531,1468],{"class":309},[29,3533,3534,3536,3538],{"class":31,"line":51},[29,3535,313],{"class":305},[29,3537,2148],{"class":35},[29,3539,2151],{"class":309},[29,3541,3542],{"class":31,"line":59},[29,3543,1722],{"class":309},[29,3545,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568],{"class":31,"line":67},[29,3547,3376],{"class":305},[29,3549,1834],{"class":309},[29,3551,313],{"class":305},[29,3553,3207],{"class":309},[29,3555,355],{"class":305},[29,3557,499],{"class":39},[29,3559,3214],{"class":309},[29,3561,1218],{"class":305},[29,3563,754],{"class":39},[29,3565,3214],{"class":309},[29,3567,2467],{"class":305},[29,3569,316],{"class":309},[29,3571,3572],{"class":31,"line":75},[29,3573,2205],{"class":309},[29,3575,3576,3579,3581,3583,3586,3588,3590,3593,3595,3597,3599,3601],{"class":31,"line":83},[29,3577,3578],{"class":305},"        for",[29,3580,1834],{"class":309},[29,3582,313],{"class":305},[29,3584,3585],{"class":309}," j",[29,3587,355],{"class":305},[29,3589,499],{"class":39},[29,3591,3592],{"class":309},";j",[29,3594,1218],{"class":305},[29,3596,754],{"class":39},[29,3598,3592],{"class":309},[29,3600,2467],{"class":305},[29,3602,316],{"class":309},[29,3604,3605],{"class":31,"line":158},[29,3606,2685],{"class":309},[29,3608,3609,3611,3613,3616],{"class":31,"line":166},[29,3610,2690],{"class":309},[29,3612,1351],{"class":305},[29,3614,3615],{"class":103},"\"*\"",[29,3617,1468],{"class":309},[29,3619,3620],{"class":31,"line":1505},[29,3621,2704],{"class":309},[29,3623,3624,3627,3629],{"class":31,"line":1788},[29,3625,3626],{"class":309},"        cout",[29,3628,1351],{"class":305},[29,3630,1373],{"class":309},[29,3632,3633],{"class":31,"line":1793},[29,3634,2362],{"class":309},[29,3636,3637],{"class":31,"line":1799},[29,3638,1741],{"class":309},[171,3640,3641],{},"乘法口诀表",[19,3643,3645],{"className":296,"code":3644,"language":298,"meta":24,"style":24},"#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",[26,3646,3647,3653,3663,3671,3675,3701,3705,3730,3734,3774,3778,3786,3790],{"__ignoreMap":24},[29,3648,3649,3651],{"class":31,"line":32},[29,3650,2125],{"class":305},[29,3652,2509],{"class":103},[29,3654,3655,3657,3659,3661],{"class":31,"line":43},[29,3656,2133],{"class":305},[29,3658,2136],{"class":305},[29,3660,2139],{"class":35},[29,3662,1468],{"class":309},[29,3664,3665,3667,3669],{"class":31,"line":51},[29,3666,313],{"class":305},[29,3668,2148],{"class":35},[29,3670,2151],{"class":309},[29,3672,3673],{"class":31,"line":59},[29,3674,1722],{"class":309},[29,3676,3677,3679,3681,3683,3685,3687,3689,3691,3693,3695,3697,3699],{"class":31,"line":67},[29,3678,3376],{"class":305},[29,3680,310],{"class":309},[29,3682,313],{"class":305},[29,3684,3207],{"class":309},[29,3686,355],{"class":305},[29,3688,525],{"class":39},[29,3690,3214],{"class":309},[29,3692,1218],{"class":305},[29,3694,754],{"class":39},[29,3696,3214],{"class":309},[29,3698,2467],{"class":305},[29,3700,316],{"class":309},[29,3702,3703],{"class":31,"line":75},[29,3704,2205],{"class":309},[29,3706,3707,3709,3711,3713,3715,3717,3719,3721,3723,3726,3728],{"class":31,"line":83},[29,3708,3578],{"class":305},[29,3710,310],{"class":309},[29,3712,313],{"class":305},[29,3714,3585],{"class":309},[29,3716,355],{"class":305},[29,3718,525],{"class":39},[29,3720,3592],{"class":309},[29,3722,1764],{"class":305},[29,3724,3725],{"class":309},"i;j",[29,3727,2467],{"class":305},[29,3729,316],{"class":309},[29,3731,3732],{"class":31,"line":158},[29,3733,2685],{"class":309},[29,3735,3736,3738,3740,3742,3744,3746,3748,3750,3752,3755,3757,3759,3761,3763,3765,3768,3770,3772],{"class":31,"line":166},[29,3737,2690],{"class":309},[29,3739,1351],{"class":305},[29,3741,775],{"class":309},[29,3743,1351],{"class":305},[29,3745,3615],{"class":103},[29,3747,1351],{"class":305},[29,3749,749],{"class":309},[29,3751,1351],{"class":305},[29,3753,3754],{"class":103},"\"=\"",[29,3756,1351],{"class":305},[29,3758,749],{"class":309},[29,3760,763],{"class":305},[29,3762,775],{"class":309},[29,3764,1351],{"class":305},[29,3766,3767],{"class":103},"'",[29,3769,1408],{"class":39},[29,3771,3767],{"class":103},[29,3773,1468],{"class":309},[29,3775,3776],{"class":31,"line":1505},[29,3777,2704],{"class":309},[29,3779,3780,3782,3784],{"class":31,"line":1788},[29,3781,3626],{"class":309},[29,3783,1351],{"class":305},[29,3785,1373],{"class":309},[29,3787,3788],{"class":31,"line":1793},[29,3789,2362],{"class":309},[29,3791,3792],{"class":31,"line":1799},[29,3793,1741],{"class":309},[275,3795,3797],{"id":3796},"_163跳出语句","1.6.3跳出语句",[259,3799,3800],{},[178,3801,3802],{},"break语句\n作用：用于跳出选择结构或者循环结构",[171,3804,3805],{},"break使用时机：",[175,3807,3808,3811,3814],{},[178,3809,3810],{},"出现在switch条件语句中，作用是终止case并跳出switch",[178,3812,3813],{},"出现在循环结构中，作用是跳出当前的循环结构",[178,3815,3816],{},"出现在嵌套循环中，跳出最近的内层循环语句",[259,3818,3819,3822],{"start":43},[178,3820,3821],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[178,3823,3824],{},"goto语句\n语法：goto 标记;",[171,3826,3827],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[19,3829,3831],{"className":296,"code":3830,"language":298,"meta":24,"style":24},"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",[26,3832,3833,3841,3845,3858,3868,3881,3894,3907,3915,3931],{"__ignoreMap":24},[29,3834,3835,3837,3839],{"class":31,"line":32},[29,3836,313],{"class":305},[29,3838,2148],{"class":35},[29,3840,2151],{"class":309},[29,3842,3843],{"class":31,"line":43},[29,3844,1722],{"class":309},[29,3846,3847,3849,3851,3854,3856],{"class":31,"line":51},[29,3848,1727],{"class":309},[29,3850,1351],{"class":305},[29,3852,3853],{"class":103},"\"1\"",[29,3855,1351],{"class":305},[29,3857,1373],{"class":309},[29,3859,3860,3863,3866],{"class":31,"line":59},[29,3861,3862],{"class":305},"    goto",[29,3864,3865],{"class":35}," FLAG",[29,3867,1468],{"class":309},[29,3869,3870,3872,3874,3877,3879],{"class":31,"line":67},[29,3871,1727],{"class":309},[29,3873,1351],{"class":305},[29,3875,3876],{"class":103},"\"2\"",[29,3878,1351],{"class":305},[29,3880,1373],{"class":309},[29,3882,3883,3885,3887,3890,3892],{"class":31,"line":75},[29,3884,1727],{"class":309},[29,3886,1351],{"class":305},[29,3888,3889],{"class":103},"\"3\"",[29,3891,1351],{"class":305},[29,3893,1373],{"class":309},[29,3895,3896,3898,3900,3903,3905],{"class":31,"line":83},[29,3897,1727],{"class":309},[29,3899,1351],{"class":305},[29,3901,3902],{"class":103},"\"4\"",[29,3904,1351],{"class":305},[29,3906,1373],{"class":309},[29,3908,3909,3912],{"class":31,"line":158},[29,3910,3911],{"class":35},"    FLAG",[29,3913,3914],{"class":309},":\n",[29,3916,3917,3919,3921,3924,3926,3928],{"class":31,"line":166},[29,3918,1727],{"class":309},[29,3920,1351],{"class":305},[29,3922,3923],{"class":103},"\"5\"",[29,3925,1351],{"class":305},[29,3927,1416],{"class":309},[29,3929,3930],{"class":367},"\u002F\u002F跳过了2,3,4,直接到5\n",[29,3932,3933],{"class":31,"line":1505},[29,3934,1741],{"class":309},[14,3936,3938],{"id":3937},"_17数组","1.7数组",[275,3940,3942],{"id":3941},"_171一维数组","1.7.1一维数组",[259,3944,3945],{},[178,3946,3947],{},"一维数组定义方式",[445,3949,3950,3960],{},[448,3951,3952],{},[451,3953,3954,3957],{},[454,3955,3956],{},"方式",[454,3958,3959],{},"注意事项",[492,3961,3962,3976,3986],{},[451,3963,3964,3970],{},[497,3965,3966,3967,364],{},"数据类型 数组名",[29,3968,3969],{},"数组长度",[497,3971,3972,3973,3975],{},"这种方式是先定义再arr",[29,3974,749],{},"赋值",[451,3977,3978,3983],{},[497,3979,3966,3980,3982],{},[29,3981,3969],{},"={值1,值2....};",[497,3984,3985],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[451,3987,3988,3992],{},[497,3989,3966,3990,3982],{},[29,3991],{},[497,3993,3994,3995,3997],{},"int arr",[29,3996],{},";这是不正确的，按照这样的方式定义必须有初始长度",[259,3999,4000],{"start":43},[178,4001,4002],{},"一维数组数组名\n用途：",[175,4004,4005],{},[178,4006,4007],{},"1.可以统计整个数组在内存中的长度：",[19,4009,4011],{"className":296,"code":4010,"language":298,"meta":24,"style":24},"sizeof(arr);\nsizeof(arr[0]);\n",[26,4012,4013,4020],{"__ignoreMap":24},[29,4014,4015,4017],{"class":31,"line":32},[29,4016,306],{"class":305},[29,4018,4019],{"class":309},"(arr);\n",[29,4021,4022,4024,4027,4029],{"class":31,"line":43},[29,4023,306],{"class":305},[29,4025,4026],{"class":309},"(arr[",[29,4028,499],{"class":39},[29,4030,4031],{"class":309},"]);\n",[175,4033,4034],{},[178,4035,4036],{},"2.可以获取数组在内存中的首地址:",[19,4038,4040],{"className":296,"code":4039,"language":298,"meta":24,"style":24},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[26,4041,4042,4047,4060,4065],{"__ignoreMap":24},[29,4043,4044],{"class":31,"line":32},[29,4045,4046],{"class":367},"\u002F\u002F查看16进制的首地址\n",[29,4048,4049,4051,4053,4056,4058],{"class":31,"line":43},[29,4050,1545],{"class":309},[29,4052,1351],{"class":305},[29,4054,4055],{"class":309},"arr",[29,4057,1351],{"class":305},[29,4059,1373],{"class":309},[29,4061,4062],{"class":31,"line":51},[29,4063,4064],{"class":367},"\u002F\u002F看10进制数\n",[29,4066,4067,4069,4071,4073,4075,4077,4079,4082,4084,4086,4088],{"class":31,"line":59},[29,4068,1545],{"class":309},[29,4070,1351],{"class":305},[29,4072,310],{"class":309},[29,4074,313],{"class":305},[29,4076,737],{"class":309},[29,4078,661],{"class":305},[29,4080,4081],{"class":309},"arr[",[29,4083,499],{"class":39},[29,4085,1248],{"class":309},[29,4087,1351],{"class":305},[29,4089,1373],{"class":309},[171,4091,4092],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[175,4094,4095],{},[178,4096,4097],{},"1️⃣五只小猪称体重",[19,4099,4101],{"className":296,"code":4100,"language":298,"meta":24,"style":24},"#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",[26,4102,4103,4109,4119,4127,4131,4171,4184,4210,4214,4226,4230,4240,4244,4248,4261,4271],{"__ignoreMap":24},[29,4104,4105,4107],{"class":31,"line":32},[29,4106,2125],{"class":305},[29,4108,2128],{"class":103},[29,4110,4111,4113,4115,4117],{"class":31,"line":43},[29,4112,2133],{"class":305},[29,4114,2136],{"class":305},[29,4116,2139],{"class":35},[29,4118,1468],{"class":309},[29,4120,4121,4123,4125],{"class":31,"line":51},[29,4122,313],{"class":305},[29,4124,2148],{"class":35},[29,4126,2151],{"class":309},[29,4128,4129],{"class":31,"line":59},[29,4130,1722],{"class":309},[29,4132,4133,4135,4138,4140,4142,4144,4146,4149,4151,4154,4156,4158,4160,4163,4165,4168],{"class":31,"line":67},[29,4134,2160],{"class":305},[29,4136,4137],{"class":309}," arr[",[29,4139,627],{"class":39},[29,4141,1248],{"class":309},[29,4143,355],{"class":305},[29,4145,1204],{"class":309},[29,4147,4148],{"class":39},"300",[29,4150,686],{"class":309},[29,4152,4153],{"class":39},"350",[29,4155,686],{"class":309},[29,4157,1898],{"class":39},[29,4159,686],{"class":309},[29,4161,4162],{"class":39},"400",[29,4164,686],{"class":309},[29,4166,4167],{"class":39},"250",[29,4169,4170],{"class":309},"};\n",[29,4172,4173,4175,4178,4180,4182],{"class":31,"line":75},[29,4174,2160],{"class":305},[29,4176,4177],{"class":309}," tmp",[29,4179,355],{"class":305},[29,4181,499],{"class":39},[29,4183,1468],{"class":309},[29,4185,4186,4188,4190,4192,4194,4196,4198,4200,4202,4204,4206,4208],{"class":31,"line":83},[29,4187,3376],{"class":305},[29,4189,1834],{"class":309},[29,4191,313],{"class":305},[29,4193,3207],{"class":309},[29,4195,355],{"class":305},[29,4197,499],{"class":39},[29,4199,3214],{"class":309},[29,4201,1218],{"class":305},[29,4203,627],{"class":39},[29,4205,3214],{"class":309},[29,4207,2467],{"class":305},[29,4209,316],{"class":309},[29,4211,4212],{"class":31,"line":158},[29,4213,2205],{"class":309},[29,4215,4216,4218,4221,4223],{"class":31,"line":166},[29,4217,2672],{"class":305},[29,4219,4220],{"class":309},"(tmp",[29,4222,1218],{"class":305},[29,4224,4225],{"class":309},"arr[i])\n",[29,4227,4228],{"class":31,"line":1505},[29,4229,2685],{"class":309},[29,4231,4232,4235,4237],{"class":31,"line":1788},[29,4233,4234],{"class":309},"            tmp",[29,4236,355],{"class":305},[29,4238,4239],{"class":309},"arr[i];\n",[29,4241,4242],{"class":31,"line":1793},[29,4243,2704],{"class":309},[29,4245,4246],{"class":31,"line":1799},[29,4247,2362],{"class":309},[29,4249,4250,4252,4254,4257,4259],{"class":31,"line":1804},[29,4251,1727],{"class":309},[29,4253,1351],{"class":305},[29,4255,4256],{"class":309},"tmp",[29,4258,1351],{"class":305},[29,4260,1373],{"class":309},[29,4262,4263,4266,4269],{"class":31,"line":1818},[29,4264,4265],{"class":305},"    return",[29,4267,4268],{"class":39}," 0",[29,4270,1468],{"class":309},[29,4272,4273],{"class":31,"line":1823},[29,4274,1741],{"class":309},[175,4276,4277],{},[178,4278,4279],{},"2️⃣数组元素逆置",[19,4281,4283],{"className":296,"code":4282,"language":298,"meta":24,"style":24},"\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",[26,4284,4285,4290,4296,4306,4314,4318,4353,4369,4401,4414,4419,4424,4436,4446,4456,4461,4470,4480,4485,4490,4517,4521,4537,4541,4552,4561],{"__ignoreMap":24},[29,4286,4287],{"class":31,"line":32},[29,4288,4289],{"class":367},"\u002F\u002F元素逆置\n",[29,4291,4292,4294],{"class":31,"line":43},[29,4293,2125],{"class":305},[29,4295,2128],{"class":103},[29,4297,4298,4300,4302,4304],{"class":31,"line":51},[29,4299,2133],{"class":305},[29,4301,2136],{"class":305},[29,4303,2139],{"class":35},[29,4305,1468],{"class":309},[29,4307,4308,4310,4312],{"class":31,"line":59},[29,4309,313],{"class":305},[29,4311,2148],{"class":35},[29,4313,2151],{"class":309},[29,4315,4316],{"class":31,"line":67},[29,4317,1722],{"class":309},[29,4319,4320,4323,4325,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351],{"class":31,"line":75},[29,4321,4322],{"class":305},"   int",[29,4324,4137],{"class":309},[29,4326,627],{"class":39},[29,4328,1248],{"class":309},[29,4330,355],{"class":305},[29,4332,1204],{"class":309},[29,4334,525],{"class":39},[29,4336,686],{"class":309},[29,4338,386],{"class":39},[29,4340,686],{"class":309},[29,4342,380],{"class":39},[29,4344,686],{"class":309},[29,4346,601],{"class":39},[29,4348,686],{"class":309},[29,4350,627],{"class":39},[29,4352,4170],{"class":309},[29,4354,4355,4357,4360,4362,4364,4366],{"class":31,"line":83},[29,4356,4322],{"class":305},[29,4358,4359],{"class":309}," start",[29,4361,355],{"class":305},[29,4363,499],{"class":39},[29,4365,364],{"class":309},[29,4367,4368],{"class":367},"\u002F\u002F起始下标\n",[29,4370,4371,4373,4376,4379,4382,4385,4387,4389,4392,4394,4396,4398],{"class":31,"line":158},[29,4372,4322],{"class":305},[29,4374,4375],{"class":309}," end",[29,4377,4378],{"class":305},"=sizeof",[29,4380,4381],{"class":309},"(arr)",[29,4383,4384],{"class":305},"\u002Fsizeof",[29,4386,4026],{"class":309},[29,4388,499],{"class":39},[29,4390,4391],{"class":309},"])",[29,4393,840],{"class":305},[29,4395,525],{"class":39},[29,4397,364],{"class":309},[29,4399,4400],{"class":367},"\u002F\u002F结束下标\n",[29,4402,4403,4406,4409,4411],{"class":31,"line":166},[29,4404,4405],{"class":305},"   while",[29,4407,4408],{"class":309}," (start",[29,4410,1218],{"class":305},[29,4412,4413],{"class":309},"end)\n",[29,4415,4416],{"class":31,"line":1505},[29,4417,4418],{"class":309},"   {\n",[29,4420,4421],{"class":31,"line":1788},[29,4422,4423],{"class":367},"    \u002F\u002F实现元素互换代码\n",[29,4425,4426,4428,4431,4433],{"class":31,"line":1793},[29,4427,2160],{"class":305},[29,4429,4430],{"class":309}," temp",[29,4432,355],{"class":305},[29,4434,4435],{"class":309},"arr[start];\n",[29,4437,4438,4441,4443],{"class":31,"line":1799},[29,4439,4440],{"class":309},"    arr[start]",[29,4442,355],{"class":305},[29,4444,4445],{"class":309},"arr[end];\n",[29,4447,4448,4451,4453],{"class":31,"line":1804},[29,4449,4450],{"class":309},"    arr[end]",[29,4452,355],{"class":305},[29,4454,4455],{"class":309},"temp;\n",[29,4457,4458],{"class":31,"line":1818},[29,4459,4460],{"class":367},"    \u002F\u002F下标更新\n",[29,4462,4463,4466,4468],{"class":31,"line":1823},[29,4464,4465],{"class":309},"    start",[29,4467,2467],{"class":305},[29,4469,1468],{"class":309},[29,4471,4472,4475,4478],{"class":31,"line":1829},[29,4473,4474],{"class":309},"    end",[29,4476,4477],{"class":305},"--",[29,4479,1468],{"class":309},[29,4481,4482],{"class":31,"line":1850},[29,4483,4484],{"class":309},"   }\n",[29,4486,4487],{"class":31,"line":1855},[29,4488,4489],{"class":367},"   \u002F\u002F输出逆置后的数组\n",[29,4491,4492,4495,4497,4499,4501,4503,4505,4507,4509,4511,4513,4515],{"class":31,"line":1869},[29,4493,4494],{"class":305},"   for",[29,4496,1834],{"class":309},[29,4498,313],{"class":305},[29,4500,3207],{"class":309},[29,4502,355],{"class":305},[29,4504,499],{"class":39},[29,4506,3214],{"class":309},[29,4508,1218],{"class":305},[29,4510,627],{"class":39},[29,4512,3214],{"class":309},[29,4514,2467],{"class":305},[29,4516,316],{"class":309},[29,4518,4519],{"class":31,"line":1874},[29,4520,4418],{"class":309},[29,4522,4523,4525,4527,4530,4532,4535],{"class":31,"line":1903},[29,4524,1727],{"class":309},[29,4526,1351],{"class":305},[29,4528,4529],{"class":309},"arr[i]",[29,4531,1351],{"class":305},[29,4533,4534],{"class":103},"\" \"",[29,4536,1468],{"class":309},[29,4538,4539],{"class":31,"line":1908},[29,4540,4484],{"class":309},[29,4542,4543,4546,4548,4550],{"class":31,"line":1925},[29,4544,4545],{"class":35},"   system",[29,4547,310],{"class":309},[29,4549,2483],{"class":103},[29,4551,2894],{"class":309},[29,4553,4554,4557,4559],{"class":31,"line":1930},[29,4555,4556],{"class":305},"   return",[29,4558,4268],{"class":39},[29,4560,1468],{"class":309},[29,4562,4563],{"class":31,"line":1935},[29,4564,1741],{"class":309},[175,4566,4567],{},[178,4568,4569],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[19,4571,4573],{"className":296,"code":4572,"language":298,"meta":24,"style":24},"\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",[26,4574,4575,4580,4586,4596,4604,4608,4660,4673,4699,4703,4717,4721,4726,4731,4761,4765,4770,4804,4808,4813,4833,4838,4850,4866,4881,4886,4890,4894,4907,4933,4937,4951,4955,4963],{"__ignoreMap":24},[29,4576,4577],{"class":31,"line":32},[29,4578,4579],{"class":367},"\u002F\u002F冒泡排序,升序\n",[29,4581,4582,4584],{"class":31,"line":43},[29,4583,2125],{"class":305},[29,4585,2128],{"class":103},[29,4587,4588,4590,4592,4594],{"class":31,"line":51},[29,4589,2133],{"class":305},[29,4591,2136],{"class":305},[29,4593,2139],{"class":35},[29,4595,1468],{"class":309},[29,4597,4598,4600,4602],{"class":31,"line":59},[29,4599,313],{"class":305},[29,4601,2148],{"class":35},[29,4603,2151],{"class":309},[29,4605,4606],{"class":31,"line":67},[29,4607,1722],{"class":309},[29,4609,4610,4612,4614,4616,4619,4621,4624,4626,4628,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656,4658],{"class":31,"line":75},[29,4611,2160],{"class":305},[29,4613,4137],{"class":309},[29,4615,728],{"class":39},[29,4617,4618],{"class":309},"] ",[29,4620,355],{"class":305},[29,4622,4623],{"class":309}," {",[29,4625,601],{"class":39},[29,4627,686],{"class":309},[29,4629,386],{"class":39},[29,4631,686],{"class":309},[29,4633,703],{"class":39},[29,4635,686],{"class":309},[29,4637,499],{"class":39},[29,4639,686],{"class":309},[29,4641,627],{"class":39},[29,4643,686],{"class":309},[29,4645,677],{"class":39},[29,4647,686],{"class":309},[29,4649,525],{"class":39},[29,4651,686],{"class":309},[29,4653,380],{"class":39},[29,4655,686],{"class":309},[29,4657,728],{"class":39},[29,4659,4170],{"class":309},[29,4661,4662,4664,4666,4669,4671],{"class":31,"line":83},[29,4663,1727],{"class":309},[29,4665,1351],{"class":305},[29,4667,4668],{"class":103},"\"排序前：\"",[29,4670,1351],{"class":305},[29,4672,1373],{"class":309},[29,4674,4675,4677,4679,4681,4683,4685,4687,4689,4691,4693,4695,4697],{"class":31,"line":158},[29,4676,3376],{"class":305},[29,4678,1834],{"class":309},[29,4680,313],{"class":305},[29,4682,3207],{"class":309},[29,4684,355],{"class":305},[29,4686,499],{"class":39},[29,4688,3214],{"class":309},[29,4690,1218],{"class":305},[29,4692,728],{"class":39},[29,4694,3214],{"class":309},[29,4696,2467],{"class":305},[29,4698,316],{"class":309},[29,4700,4701],{"class":31,"line":166},[29,4702,2205],{"class":309},[29,4704,4705,4707,4709,4711,4713,4715],{"class":31,"line":1505},[29,4706,3626],{"class":309},[29,4708,1351],{"class":305},[29,4710,4529],{"class":309},[29,4712,1351],{"class":305},[29,4714,4534],{"class":103},[29,4716,1468],{"class":309},[29,4718,4719],{"class":31,"line":1788},[29,4720,2362],{"class":309},[29,4722,4723],{"class":31,"line":1793},[29,4724,4725],{"class":367},"    \u002F\u002F开始冒泡排序\n",[29,4727,4728],{"class":31,"line":1799},[29,4729,4730],{"class":367},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[29,4732,4733,4735,4737,4739,4741,4743,4745,4747,4749,4751,4753,4755,4757,4759],{"class":31,"line":1804},[29,4734,3376],{"class":305},[29,4736,1834],{"class":309},[29,4738,313],{"class":305},[29,4740,3207],{"class":309},[29,4742,355],{"class":305},[29,4744,499],{"class":39},[29,4746,3214],{"class":309},[29,4748,1218],{"class":305},[29,4750,728],{"class":39},[29,4752,840],{"class":305},[29,4754,525],{"class":39},[29,4756,3214],{"class":309},[29,4758,2467],{"class":305},[29,4760,316],{"class":309},[29,4762,4763],{"class":31,"line":1818},[29,4764,2205],{"class":309},[29,4766,4767],{"class":31,"line":1823},[29,4768,4769],{"class":367},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[29,4771,4772,4774,4776,4778,4780,4782,4784,4786,4788,4790,4792,4794,4796,4798,4800,4802],{"class":31,"line":1829},[29,4773,3578],{"class":305},[29,4775,1834],{"class":309},[29,4777,313],{"class":305},[29,4779,3585],{"class":309},[29,4781,355],{"class":305},[29,4783,499],{"class":39},[29,4785,3592],{"class":309},[29,4787,1218],{"class":305},[29,4789,728],{"class":39},[29,4791,840],{"class":305},[29,4793,749],{"class":309},[29,4795,840],{"class":305},[29,4797,525],{"class":39},[29,4799,3592],{"class":309},[29,4801,2467],{"class":305},[29,4803,316],{"class":309},[29,4805,4806],{"class":31,"line":1850},[29,4807,2685],{"class":309},[29,4809,4810],{"class":31,"line":1855},[29,4811,4812],{"class":367},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[29,4814,4815,4818,4821,4823,4826,4828,4830],{"class":31,"line":1869},[29,4816,4817],{"class":305},"            if",[29,4819,4820],{"class":309},"(arr[j]",[29,4822,1268],{"class":305},[29,4824,4825],{"class":309},"arr[j",[29,4827,789],{"class":305},[29,4829,525],{"class":39},[29,4831,4832],{"class":309},"])\n",[29,4834,4835],{"class":31,"line":1874},[29,4836,4837],{"class":309},"            {\n",[29,4839,4840,4843,4845,4847],{"class":31,"line":1903},[29,4841,4842],{"class":305},"                int",[29,4844,4430],{"class":309},[29,4846,355],{"class":305},[29,4848,4849],{"class":309},"arr[j];\n",[29,4851,4852,4855,4857,4859,4861,4863],{"class":31,"line":1908},[29,4853,4854],{"class":309},"                arr[j]",[29,4856,355],{"class":305},[29,4858,4825],{"class":309},[29,4860,789],{"class":305},[29,4862,525],{"class":39},[29,4864,4865],{"class":309},"];\n",[29,4867,4868,4871,4873,4875,4877,4879],{"class":31,"line":1925},[29,4869,4870],{"class":309},"                arr[j",[29,4872,789],{"class":305},[29,4874,525],{"class":39},[29,4876,1248],{"class":309},[29,4878,355],{"class":305},[29,4880,4455],{"class":309},[29,4882,4883],{"class":31,"line":1930},[29,4884,4885],{"class":309},"            }\n",[29,4887,4888],{"class":31,"line":1935},[29,4889,2704],{"class":309},[29,4891,4892],{"class":31,"line":1940},[29,4893,2362],{"class":309},[29,4895,4896,4898,4900,4903,4905],{"class":31,"line":1954},[29,4897,1727],{"class":309},[29,4899,1351],{"class":305},[29,4901,4902],{"class":103},"\"排序后：\"",[29,4904,1351],{"class":305},[29,4906,1373],{"class":309},[29,4908,4909,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4931],{"class":31,"line":1959},[29,4910,3376],{"class":305},[29,4912,1834],{"class":309},[29,4914,313],{"class":305},[29,4916,3207],{"class":309},[29,4918,355],{"class":305},[29,4920,499],{"class":39},[29,4922,3214],{"class":309},[29,4924,1218],{"class":305},[29,4926,728],{"class":39},[29,4928,3214],{"class":309},[29,4930,2467],{"class":305},[29,4932,316],{"class":309},[29,4934,4935],{"class":31,"line":2752},[29,4936,2205],{"class":309},[29,4938,4939,4941,4943,4945,4947,4949],{"class":31,"line":2766},[29,4940,3626],{"class":309},[29,4942,1351],{"class":305},[29,4944,4529],{"class":309},[29,4946,1351],{"class":305},[29,4948,4534],{"class":103},[29,4950,1468],{"class":309},[29,4952,4953],{"class":31,"line":2774},[29,4954,2362],{"class":309},[29,4956,4957,4959,4961],{"class":31,"line":2779},[29,4958,4265],{"class":305},[29,4960,4268],{"class":39},[29,4962,1468],{"class":309},[29,4964,4965],{"class":31,"line":2785},[29,4966,1741],{"class":309},[275,4968,4970],{"id":4969},"_172二维数组","1.7.2二维数组",[259,4972,4973],{},[178,4974,4975],{},"二维数组的四种定义方式",[445,4977,4978,4987],{},[448,4979,4980],{},[451,4981,4982,4985],{},[454,4983,4984],{},"序号",[454,4986,3956],{},[492,4988,4989,4999,5008,5017,5026],{},[451,4990,4991,4993],{},[497,4992,525],{},[497,4994,4995,4996,364],{},"数据类型 数组名[行数]",[29,4997,4998],{},"列数",[451,5000,5001,5003],{},[497,5002,386],{},[497,5004,4995,5005,5007],{},[29,5006,4998],{},"={ {数据1,数据2}，{数据3，数据4}... }",[451,5009,5010,5012],{},[497,5011,380],{},[497,5013,4995,5014,5016],{},[29,5015,4998],{},"={数据1,数据2,数据3...}",[451,5018,5019,5021],{},[497,5020,601],{},[497,5022,5023,5024,5016],{},"数据类型 数组名[]",[29,5025,4998],{},[451,5027,5028,5031],{},[497,5029,5030],{},"注意：不能只省略列数",[497,5032],{},[259,5034,5035],{"start":43},[178,5036,5037],{},"二维数组数组名",[175,5039,5040,5043],{},[178,5041,5042],{},"1.查看二维数组所占内存空间",[178,5044,5045],{},"2.获取二维数组首地址",[171,5047,5048],{},"已知二维数组，求二维数组的行数与列数",[19,5050,5052],{"className":296,"code":5051,"language":298,"meta":24,"style":24},"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",[26,5053,5054,5062,5066,5084,5088,5106,5122,5127,5152,5185],{"__ignoreMap":24},[29,5055,5056,5058,5060],{"class":31,"line":32},[29,5057,313],{"class":305},[29,5059,2148],{"class":35},[29,5061,2151],{"class":309},[29,5063,5064],{"class":31,"line":43},[29,5065,1722],{"class":309},[29,5067,5068,5070,5072,5074,5077,5079,5081],{"class":31,"line":51},[29,5069,2160],{"class":305},[29,5071,4137],{"class":309},[29,5073,386],{"class":39},[29,5075,5076],{"class":309},"][",[29,5078,380],{"class":39},[29,5080,1248],{"class":309},[29,5082,5083],{"class":305},"=\n",[29,5085,5086],{"class":31,"line":59},[29,5087,2205],{"class":309},[29,5089,5090,5093,5095,5097,5099,5101,5103],{"class":31,"line":67},[29,5091,5092],{"class":309},"        {",[29,5094,525],{"class":39},[29,5096,686],{"class":309},[29,5098,386],{"class":39},[29,5100,686],{"class":309},[29,5102,380],{"class":39},[29,5104,5105],{"class":309},"},\n",[29,5107,5108,5110,5112,5114,5116,5118,5120],{"class":31,"line":75},[29,5109,5092],{"class":309},[29,5111,601],{"class":39},[29,5113,686],{"class":309},[29,5115,627],{"class":39},[29,5117,686],{"class":309},[29,5119,652],{"class":39},[29,5121,1741],{"class":309},[29,5123,5124],{"class":31,"line":83},[29,5125,5126],{"class":309},"    };\n",[29,5128,5129,5131,5133,5136,5138,5140,5142,5144,5146,5148,5150],{"class":31,"line":158},[29,5130,1727],{"class":309},[29,5132,1351],{"class":305},[29,5134,5135],{"class":103},"\"二维数组的行数\"",[29,5137,1548],{"class":305},[29,5139,4381],{"class":309},[29,5141,4384],{"class":305},[29,5143,4026],{"class":309},[29,5145,499],{"class":39},[29,5147,4391],{"class":309},[29,5149,1351],{"class":305},[29,5151,1373],{"class":309},[29,5153,5154,5156,5158,5161,5163,5165,5167,5169,5171,5173,5175,5177,5179,5181,5183],{"class":31,"line":166},[29,5155,1727],{"class":309},[29,5157,1351],{"class":305},[29,5159,5160],{"class":103},"\"二维数组的列数\"",[29,5162,1548],{"class":305},[29,5164,4026],{"class":309},[29,5166,499],{"class":39},[29,5168,4391],{"class":309},[29,5170,4384],{"class":305},[29,5172,4026],{"class":309},[29,5174,499],{"class":39},[29,5176,5076],{"class":309},[29,5178,499],{"class":39},[29,5180,4391],{"class":309},[29,5182,1351],{"class":305},[29,5184,1373],{"class":309},[29,5186,5187],{"class":31,"line":1505},[29,5188,1741],{"class":309},[171,5190,5191],{},"查看二维数组首地址",[19,5193,5195],{"className":296,"code":5194,"language":298,"meta":24,"style":24},"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",[26,5196,5197,5214,5240,5265],{"__ignoreMap":24},[29,5198,5199,5201,5203,5206,5208,5210,5212],{"class":31,"line":32},[29,5200,1545],{"class":309},[29,5202,1351],{"class":305},[29,5204,5205],{"class":103},"\"二维数组首地址：\"",[29,5207,1351],{"class":305},[29,5209,4055],{"class":309},[29,5211,1351],{"class":305},[29,5213,1373],{"class":309},[29,5215,5216,5218,5220,5223,5225,5227,5229,5232,5234,5236,5238],{"class":31,"line":43},[29,5217,1545],{"class":309},[29,5219,1351],{"class":305},[29,5221,5222],{"class":103},"\"二维数组第一行的首地址：\"",[29,5224,1351],{"class":305},[29,5226,310],{"class":309},[29,5228,313],{"class":305},[29,5230,5231],{"class":309},")arr[",[29,5233,499],{"class":39},[29,5235,1248],{"class":309},[29,5237,1351],{"class":305},[29,5239,1373],{"class":309},[29,5241,5242,5244,5246,5249,5251,5253,5255,5257,5259,5261,5263],{"class":31,"line":51},[29,5243,1545],{"class":309},[29,5245,1351],{"class":305},[29,5247,5248],{"class":103},"\"二维数组第二行的首地址：\"",[29,5250,1351],{"class":305},[29,5252,310],{"class":309},[29,5254,313],{"class":305},[29,5256,5231],{"class":309},[29,5258,525],{"class":39},[29,5260,1248],{"class":309},[29,5262,1351],{"class":305},[29,5264,1373],{"class":309},[29,5266,5267,5269,5271,5274,5276,5278,5280,5282,5284,5286,5288,5290,5292,5294,5296,5298],{"class":31,"line":59},[29,5268,1545],{"class":309},[29,5270,1351],{"class":305},[29,5272,5273],{"class":103},"\"二维数组第一个元素的首地址:\"",[29,5275,1351],{"class":305},[29,5277,310],{"class":309},[29,5279,313],{"class":305},[29,5281,737],{"class":309},[29,5283,661],{"class":305},[29,5285,4081],{"class":309},[29,5287,499],{"class":39},[29,5289,5076],{"class":309},[29,5291,499],{"class":39},[29,5293,1248],{"class":309},[29,5295,1351],{"class":305},[29,5297,1416],{"class":309},[29,5299,5300],{"class":367},"\u002F\u002F对于数，要加取址符\n",[223,5302,5303],{},"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":24,"searchDepth":43,"depth":43,"links":5305},[5306,5307,5308,5316,5317,5323,5328],{"id":249,"depth":43,"text":250},{"id":256,"depth":43,"text":257},{"id":272,"depth":43,"text":273,"children":5309},[5310,5311,5312,5313,5314,5315],{"id":277,"depth":51,"text":278},{"id":326,"depth":51,"text":327},{"id":394,"depth":51,"text":395},{"id":1332,"depth":51,"text":1333},{"id":1422,"depth":51,"text":1423},{"id":1519,"depth":51,"text":1520},{"id":1561,"depth":43,"text":1562},{"id":1629,"depth":43,"text":1630,"children":5318},[5319,5320,5321,5322],{"id":1633,"depth":51,"text":1634},{"id":1655,"depth":51,"text":1656},{"id":1664,"depth":51,"text":1665},{"id":1673,"depth":51,"text":1674},{"id":1682,"depth":43,"text":1683,"children":5324},[5325,5326,5327],{"id":1686,"depth":51,"text":1687},{"id":2380,"depth":51,"text":2381},{"id":3796,"depth":51,"text":3797},{"id":3937,"depth":43,"text":3938,"children":5329},[5330,5331],{"id":3941,"depth":51,"text":3942},{"id":4969,"depth":51,"text":4970},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":241,"description":24},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5338,"title":5339,"body":5340,"description":24,"extension":231,"meta":6440,"navigation":233,"path":6441,"seo":6442,"stem":6443,"__hash__":6444},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5341,"toc":6432},[5342,5345,5349,5357,5365,5368,5434,5438,5441,5517,5521,5524,5527,5530,5743,5747,5752,5816,5821,5888,5893,5984,5987,6092,6096,6099,6105,6249,6253,6256,6270,6273,6318,6321,6429],[10,5343,5339],{"id":5344},"_2函数",[14,5346,5348],{"id":5347},"_21函数概述","2.1函数概述",[259,5350,5351,5354],{},[178,5352,5353],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[178,5355,5356],{},"语法：",[19,5358,5363],{"className":5359,"code":5361,"language":5362,"meta":24},[5360],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[26,5364,5361],{"__ignoreMap":24},[171,5366,5367],{},"小案例",[19,5369,5371],{"className":296,"code":5370,"language":298,"meta":24,"style":24},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[26,5372,5373,5378,5402,5406,5423,5430],{"__ignoreMap":24},[29,5374,5375],{"class":31,"line":32},[29,5376,5377],{"class":367},"\u002F\u002Fnum1,num2形参\n",[29,5379,5380,5382,5385,5387,5389,5393,5395,5397,5400],{"class":31,"line":43},[29,5381,313],{"class":305},[29,5383,5384],{"class":35}," add",[29,5386,310],{"class":309},[29,5388,313],{"class":305},[29,5390,5392],{"class":5391},"s4XuR"," num1",[29,5394,686],{"class":309},[29,5396,313],{"class":305},[29,5398,5399],{"class":5391}," num2",[29,5401,316],{"class":309},[29,5403,5404],{"class":31,"line":51},[29,5405,1722],{"class":309},[29,5407,5408,5410,5413,5415,5418,5420],{"class":31,"line":59},[29,5409,2160],{"class":305},[29,5411,5412],{"class":309}," sum",[29,5414,355],{"class":305},[29,5416,5417],{"class":309},"num1",[29,5419,789],{"class":305},[29,5421,5422],{"class":309},"num2;\n",[29,5424,5425,5427],{"class":31,"line":67},[29,5426,4265],{"class":305},[29,5428,5429],{"class":309}," sum;\n",[29,5431,5432],{"class":31,"line":75},[29,5433,1741],{"class":309},[14,5435,5437],{"id":5436},"_22函数调用","2.2函数调用",[171,5439,5440],{},"调用刚刚写的求和函数",[19,5442,5444],{"className":296,"code":5443,"language":298,"meta":24,"style":24},"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",[26,5445,5446,5454,5458,5463,5475,5487,5496,5501,5513],{"__ignoreMap":24},[29,5447,5448,5450,5452],{"class":31,"line":32},[29,5449,313],{"class":305},[29,5451,2148],{"class":35},[29,5453,2151],{"class":309},[29,5455,5456],{"class":31,"line":43},[29,5457,1722],{"class":309},[29,5459,5460],{"class":31,"line":51},[29,5461,5462],{"class":367},"    \u002F\u002Fa,b实参\n",[29,5464,5465,5467,5469,5471,5473],{"class":31,"line":59},[29,5466,2160],{"class":305},[29,5468,1574],{"class":309},[29,5470,355],{"class":305},[29,5472,499],{"class":39},[29,5474,1468],{"class":309},[29,5476,5477,5479,5481,5483,5485],{"class":31,"line":67},[29,5478,2160],{"class":305},[29,5480,3008],{"class":309},[29,5482,355],{"class":305},[29,5484,499],{"class":39},[29,5486,1468],{"class":309},[29,5488,5489,5491,5493],{"class":31,"line":75},[29,5490,2187],{"class":309},[29,5492,1605],{"class":305},[29,5494,5495],{"class":309},"a,b;\n",[29,5497,5498],{"class":31,"line":83},[29,5499,5500],{"class":367},"    \u002F\u002F调用函数时，实参值传给了形参\n",[29,5502,5503,5505,5507,5510],{"class":31,"line":158},[29,5504,1727],{"class":309},[29,5506,1351],{"class":305},[29,5508,5509],{"class":35},"add",[29,5511,5512],{"class":309},"(a,b);\n",[29,5514,5515],{"class":31,"line":166},[29,5516,1741],{"class":309},[14,5518,5520],{"id":5519},"_23值传递","2.3值传递",[171,5522,5523],{},"值传递就是函数调用时实参将数值传给形参",[171,5525,5526],{},"值传递时，如果形参发生任何改变，不会影响实参",[171,5528,5529],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[19,5531,5533],{"className":296,"code":5532,"language":298,"meta":24,"style":24},"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",[26,5534,5535,5557,5561,5574,5591,5609,5620,5629,5638,5651,5667,5683,5692,5696,5704,5708,5720,5732,5739],{"__ignoreMap":24},[29,5536,5537,5540,5543,5545,5547,5549,5551,5553,5555],{"class":31,"line":32},[29,5538,5539],{"class":305},"void",[29,5541,5542],{"class":35}," swap",[29,5544,310],{"class":309},[29,5546,313],{"class":305},[29,5548,5392],{"class":5391},[29,5550,686],{"class":309},[29,5552,313],{"class":305},[29,5554,5399],{"class":5391},[29,5556,316],{"class":309},[29,5558,5559],{"class":31,"line":43},[29,5560,1722],{"class":309},[29,5562,5563,5565,5567,5570,5572],{"class":31,"line":51},[29,5564,1727],{"class":309},[29,5566,1351],{"class":305},[29,5568,5569],{"class":103},"\"交换前：\"",[29,5571,1351],{"class":305},[29,5573,1373],{"class":309},[29,5575,5576,5578,5580,5583,5585,5587,5589],{"class":31,"line":59},[29,5577,1727],{"class":309},[29,5579,1351],{"class":305},[29,5581,5582],{"class":103},"\"num1=\"",[29,5584,1351],{"class":305},[29,5586,5417],{"class":309},[29,5588,1351],{"class":305},[29,5590,1373],{"class":309},[29,5592,5593,5595,5597,5600,5602,5605,5607],{"class":31,"line":67},[29,5594,1727],{"class":309},[29,5596,1351],{"class":305},[29,5598,5599],{"class":103},"\"num2=\"",[29,5601,1351],{"class":305},[29,5603,5604],{"class":309},"num2",[29,5606,1351],{"class":305},[29,5608,1373],{"class":309},[29,5610,5611,5613,5615,5617],{"class":31,"line":75},[29,5612,2160],{"class":305},[29,5614,4430],{"class":309},[29,5616,355],{"class":305},[29,5618,5619],{"class":309},"num1;\n",[29,5621,5622,5625,5627],{"class":31,"line":83},[29,5623,5624],{"class":309},"    num1",[29,5626,355],{"class":305},[29,5628,5422],{"class":309},[29,5630,5631,5634,5636],{"class":31,"line":158},[29,5632,5633],{"class":309},"    num2",[29,5635,355],{"class":305},[29,5637,4455],{"class":309},[29,5639,5640,5642,5644,5647,5649],{"class":31,"line":166},[29,5641,1727],{"class":309},[29,5643,1351],{"class":305},[29,5645,5646],{"class":103},"\"交换后：\"",[29,5648,1351],{"class":305},[29,5650,1373],{"class":309},[29,5652,5653,5655,5657,5659,5661,5663,5665],{"class":31,"line":1505},[29,5654,1727],{"class":309},[29,5656,1351],{"class":305},[29,5658,5582],{"class":103},[29,5660,1351],{"class":305},[29,5662,5417],{"class":309},[29,5664,1351],{"class":305},[29,5666,1373],{"class":309},[29,5668,5669,5671,5673,5675,5677,5679,5681],{"class":31,"line":1788},[29,5670,1727],{"class":309},[29,5672,1351],{"class":305},[29,5674,5599],{"class":103},[29,5676,1351],{"class":305},[29,5678,5604],{"class":309},[29,5680,1351],{"class":305},[29,5682,1373],{"class":309},[29,5684,5685,5687,5689],{"class":31,"line":1793},[29,5686,4265],{"class":305},[29,5688,364],{"class":309},[29,5690,5691],{"class":367},"\u002F\u002F或者不写\n",[29,5693,5694],{"class":31,"line":1799},[29,5695,1741],{"class":309},[29,5697,5698,5700,5702],{"class":31,"line":1804},[29,5699,313],{"class":305},[29,5701,2148],{"class":35},[29,5703,2151],{"class":309},[29,5705,5706],{"class":31,"line":1818},[29,5707,1722],{"class":309},[29,5709,5710,5712,5714,5716,5718],{"class":31,"line":1823},[29,5711,2160],{"class":305},[29,5713,1574],{"class":309},[29,5715,355],{"class":305},[29,5717,754],{"class":39},[29,5719,1468],{"class":309},[29,5721,5722,5724,5726,5728,5730],{"class":31,"line":1829},[29,5723,2160],{"class":305},[29,5725,3008],{"class":309},[29,5727,355],{"class":305},[29,5729,1008],{"class":39},[29,5731,1468],{"class":309},[29,5733,5734,5737],{"class":31,"line":1850},[29,5735,5736],{"class":35},"    swap",[29,5738,5512],{"class":309},[29,5740,5741],{"class":31,"line":1855},[29,5742,1741],{"class":309},[14,5744,5746],{"id":5745},"_24函数的常见形式","2.4函数的常见形式",[259,5748,5749],{},[178,5750,5751],{},"无参无返",[19,5753,5755],{"className":296,"code":5754,"language":298,"meta":24,"style":24},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[26,5756,5757,5766,5770,5783,5787,5795,5799,5804,5812],{"__ignoreMap":24},[29,5758,5759,5761,5764],{"class":31,"line":32},[29,5760,5539],{"class":305},[29,5762,5763],{"class":35}," test01",[29,5765,2151],{"class":309},[29,5767,5768],{"class":31,"line":43},[29,5769,1722],{"class":309},[29,5771,5772,5774,5776,5779,5781],{"class":31,"line":51},[29,5773,1727],{"class":309},[29,5775,1351],{"class":305},[29,5777,5778],{"class":103},"\"你好\"",[29,5780,1351],{"class":305},[29,5782,1373],{"class":309},[29,5784,5785],{"class":31,"line":59},[29,5786,1741],{"class":309},[29,5788,5789,5791,5793],{"class":31,"line":67},[29,5790,313],{"class":305},[29,5792,2148],{"class":35},[29,5794,2151],{"class":309},[29,5796,5797],{"class":31,"line":75},[29,5798,1722],{"class":309},[29,5800,5801],{"class":31,"line":83},[29,5802,5803],{"class":367},"    \u002F\u002F函数调用\n",[29,5805,5806,5809],{"class":31,"line":158},[29,5807,5808],{"class":35},"    test01",[29,5810,5811],{"class":309},"();\n",[29,5813,5814],{"class":31,"line":166},[29,5815,1741],{"class":309},[259,5817,5818],{"start":43},[178,5819,5820],{},"有参无返",[19,5822,5824],{"className":296,"code":5823,"language":298,"meta":24,"style":24},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[26,5825,5826,5841,5845,5857,5861,5869,5873,5884],{"__ignoreMap":24},[29,5827,5828,5830,5833,5835,5837,5839],{"class":31,"line":32},[29,5829,5539],{"class":305},[29,5831,5832],{"class":35}," test02",[29,5834,310],{"class":309},[29,5836,313],{"class":305},[29,5838,1574],{"class":5391},[29,5840,316],{"class":309},[29,5842,5843],{"class":31,"line":43},[29,5844,1722],{"class":309},[29,5846,5847,5849,5851,5853,5855],{"class":31,"line":51},[29,5848,1727],{"class":309},[29,5850,1351],{"class":305},[29,5852,5778],{"class":103},[29,5854,1351],{"class":305},[29,5856,1373],{"class":309},[29,5858,5859],{"class":31,"line":59},[29,5860,1741],{"class":309},[29,5862,5863,5865,5867],{"class":31,"line":67},[29,5864,313],{"class":305},[29,5866,2148],{"class":35},[29,5868,2151],{"class":309},[29,5870,5871],{"class":31,"line":75},[29,5872,1722],{"class":309},[29,5874,5875,5878,5880,5882],{"class":31,"line":83},[29,5876,5877],{"class":35},"    test02",[29,5879,310],{"class":309},[29,5881,619],{"class":39},[29,5883,2894],{"class":309},[29,5885,5886],{"class":31,"line":158},[29,5887,1741],{"class":309},[259,5889,5890],{"start":51},[178,5891,5892],{},"无参有返",[19,5894,5896],{"className":296,"code":5895,"language":298,"meta":24,"style":24},"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",[26,5897,5898,5907,5911,5923,5932,5936,5944,5948,5961,5980],{"__ignoreMap":24},[29,5899,5900,5902,5905],{"class":31,"line":32},[29,5901,313],{"class":305},[29,5903,5904],{"class":35}," test03",[29,5906,2151],{"class":309},[29,5908,5909],{"class":31,"line":43},[29,5910,1722],{"class":309},[29,5912,5913,5915,5917,5919,5921],{"class":31,"line":51},[29,5914,1727],{"class":309},[29,5916,1351],{"class":305},[29,5918,5778],{"class":103},[29,5920,1351],{"class":305},[29,5922,1373],{"class":309},[29,5924,5925,5927,5930],{"class":31,"line":59},[29,5926,4265],{"class":305},[29,5928,5929],{"class":39}," 100",[29,5931,1468],{"class":309},[29,5933,5934],{"class":31,"line":67},[29,5935,1741],{"class":309},[29,5937,5938,5940,5942],{"class":31,"line":75},[29,5939,313],{"class":305},[29,5941,2148],{"class":35},[29,5943,2151],{"class":309},[29,5945,5946],{"class":31,"line":83},[29,5947,1722],{"class":309},[29,5949,5950,5952,5954,5956,5959],{"class":31,"line":158},[29,5951,2160],{"class":305},[29,5953,5392],{"class":309},[29,5955,355],{"class":305},[29,5957,5958],{"class":35},"test03",[29,5960,5811],{"class":309},[29,5962,5963,5965,5967,5969,5971,5973,5975,5977],{"class":31,"line":166},[29,5964,1727],{"class":309},[29,5966,1351],{"class":305},[29,5968,5582],{"class":103},[29,5970,1351],{"class":305},[29,5972,5417],{"class":309},[29,5974,1351],{"class":305},[29,5976,1416],{"class":309},[29,5978,5979],{"class":367}," \u002F\u002F100\n",[29,5981,5982],{"class":31,"line":1505},[29,5983,1741],{"class":309},[171,5985,5986],{},"4.有参有返",[19,5988,5990],{"className":296,"code":5989,"language":298,"meta":24,"style":24},"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",[26,5991,5992,6007,6011,6024,6030,6034,6043,6047,6059,6073,6088],{"__ignoreMap":24},[29,5993,5994,5996,5999,6001,6003,6005],{"class":31,"line":32},[29,5995,313],{"class":305},[29,5997,5998],{"class":35}," test04",[29,6000,310],{"class":309},[29,6002,313],{"class":305},[29,6004,1574],{"class":5391},[29,6006,316],{"class":309},[29,6008,6009],{"class":31,"line":43},[29,6010,1722],{"class":309},[29,6012,6013,6015,6017,6020,6022],{"class":31,"line":51},[29,6014,1727],{"class":309},[29,6016,1351],{"class":305},[29,6018,6019],{"class":103},"\"hello\"",[29,6021,1351],{"class":305},[29,6023,1373],{"class":309},[29,6025,6026,6028],{"class":31,"line":59},[29,6027,4265],{"class":305},[29,6029,1608],{"class":309},[29,6031,6032],{"class":31,"line":67},[29,6033,1741],{"class":309},[29,6035,6036,6038,6041],{"class":31,"line":75},[29,6037,313],{"class":305},[29,6039,6040],{"class":35}," mian",[29,6042,2151],{"class":309},[29,6044,6045],{"class":31,"line":83},[29,6046,1722],{"class":309},[29,6048,6049,6051,6053,6055,6057],{"class":31,"line":158},[29,6050,2160],{"class":305},[29,6052,3008],{"class":309},[29,6054,355],{"class":305},[29,6056,525],{"class":39},[29,6058,1468],{"class":309},[29,6060,6061,6063,6065,6067,6070],{"class":31,"line":166},[29,6062,2160],{"class":305},[29,6064,3024],{"class":309},[29,6066,355],{"class":305},[29,6068,6069],{"class":35},"test04",[29,6071,6072],{"class":309},"(b);\n",[29,6074,6075,6077,6079,6081,6083,6085],{"class":31,"line":1505},[29,6076,1727],{"class":309},[29,6078,1351],{"class":305},[29,6080,596],{"class":309},[29,6082,1351],{"class":305},[29,6084,1416],{"class":309},[29,6086,6087],{"class":367}," \u002F\u002F1\n",[29,6089,6090],{"class":31,"line":1788},[29,6091,1741],{"class":309},[14,6093,6095],{"id":6094},"_25函数的声明","2.5函数的声明",[171,6097,6098],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[171,6100,6101,6102],{},"函数的",[457,6103,6104],{},"声明可以多次，但是函数的定义只能有一次",[19,6106,6108],{"className":296,"code":6107,"language":298,"meta":24,"style":24},"\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",[26,6109,6110,6115,6120,6145,6154,6158,6170,6182,6198,6202,6222,6226,6245],{"__ignoreMap":24},[29,6111,6112],{"class":31,"line":32},[29,6113,6114],{"class":367},"\u002F\u002F函数声明\n",[29,6116,6117],{"class":31,"line":43},[29,6118,6119],{"class":367},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[29,6121,6122,6124,6127,6129,6131,6133,6135,6137,6139,6142],{"class":31,"line":51},[29,6123,313],{"class":305},[29,6125,6126],{"class":35}," max",[29,6128,310],{"class":309},[29,6130,313],{"class":305},[29,6132,1574],{"class":5391},[29,6134,686],{"class":309},[29,6136,313],{"class":305},[29,6138,3008],{"class":5391},[29,6140,6141],{"class":309},");",[29,6143,6144],{"class":367},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[29,6146,6147,6149,6151],{"class":31,"line":59},[29,6148,313],{"class":305},[29,6150,2148],{"class":35},[29,6152,6153],{"class":309},"() \n",[29,6155,6156],{"class":31,"line":67},[29,6157,1722],{"class":309},[29,6159,6160,6162,6164,6166,6168],{"class":31,"line":75},[29,6161,2160],{"class":305},[29,6163,1574],{"class":309},[29,6165,355],{"class":305},[29,6167,754],{"class":39},[29,6169,1468],{"class":309},[29,6171,6172,6174,6176,6178,6180],{"class":31,"line":83},[29,6173,2160],{"class":305},[29,6175,3008],{"class":309},[29,6177,355],{"class":305},[29,6179,1008],{"class":39},[29,6181,1468],{"class":309},[29,6183,6184,6186,6188,6191,6194,6196],{"class":31,"line":158},[29,6185,1727],{"class":309},[29,6187,1351],{"class":305},[29,6189,6190],{"class":35},"max",[29,6192,6193],{"class":309},"(a,b)",[29,6195,1351],{"class":305},[29,6197,1373],{"class":309},[29,6199,6200],{"class":31,"line":166},[29,6201,1741],{"class":309},[29,6203,6204,6206,6208,6210,6212,6214,6216,6218,6220],{"class":31,"line":1505},[29,6205,313],{"class":305},[29,6207,6126],{"class":35},[29,6209,310],{"class":309},[29,6211,313],{"class":305},[29,6213,1574],{"class":5391},[29,6215,686],{"class":309},[29,6217,313],{"class":305},[29,6219,3008],{"class":5391},[29,6221,316],{"class":309},[29,6223,6224],{"class":31,"line":1788},[29,6225,1722],{"class":309},[29,6227,6228,6230,6232,6234,6236,6238,6240,6242],{"class":31,"line":1793},[29,6229,4265],{"class":305},[29,6231,1574],{"class":309},[29,6233,1268],{"class":305},[29,6235,571],{"class":309},[29,6237,1294],{"class":305},[29,6239,546],{"class":309},[29,6241,1167],{"class":305},[29,6243,6244],{"class":309},"b;\n",[29,6246,6247],{"class":31,"line":1799},[29,6248,1741],{"class":309},[14,6250,6252],{"id":6251},"_26函数的分文件编写","2.6函数的分文件编写",[171,6254,6255],{},"4个步骤：",[175,6257,6258,6261,6264,6267],{},[178,6259,6260],{},"1.创建后缀名为.h的头文件",[178,6262,6263],{},"2.创建后缀名为.cpp的源文件",[178,6265,6266],{},"3.在头文件中写函数的定义",[178,6268,6269],{},"4.在源文件中写函数的定义\n示例：",[171,6271,6272],{},"头文件：swap.h",[19,6274,6276],{"className":296,"code":6275,"language":298,"meta":24,"style":24},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[26,6277,6278,6284,6294,6298],{"__ignoreMap":24},[29,6279,6280,6282],{"class":31,"line":32},[29,6281,2125],{"class":305},[29,6283,2128],{"class":103},[29,6285,6286,6288,6290,6292],{"class":31,"line":43},[29,6287,2133],{"class":305},[29,6289,2136],{"class":305},[29,6291,2139],{"class":35},[29,6293,1468],{"class":309},[29,6295,6296],{"class":31,"line":51},[29,6297,6114],{"class":367},[29,6299,6300,6302,6304,6306,6308,6310,6312,6314,6316],{"class":31,"line":59},[29,6301,5539],{"class":305},[29,6303,5542],{"class":35},[29,6305,310],{"class":309},[29,6307,313],{"class":305},[29,6309,1574],{"class":5391},[29,6311,686],{"class":309},[29,6313,313],{"class":305},[29,6315,3008],{"class":5391},[29,6317,2894],{"class":309},[171,6319,6320],{},"源文件：swap.cpp",[19,6322,6324],{"className":296,"code":6323,"language":298,"meta":24,"style":24},"#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",[26,6325,6326,6333,6338,6358,6362,6373,6382,6391,6408,6425],{"__ignoreMap":24},[29,6327,6328,6330],{"class":31,"line":32},[29,6329,2125],{"class":305},[29,6331,6332],{"class":103}," \"swap.h\"\n",[29,6334,6335],{"class":31,"line":43},[29,6336,6337],{"class":367},"\u002F\u002F函数的定义\n",[29,6339,6340,6342,6344,6346,6348,6350,6352,6354,6356],{"class":31,"line":51},[29,6341,5539],{"class":305},[29,6343,5542],{"class":35},[29,6345,310],{"class":309},[29,6347,313],{"class":305},[29,6349,1574],{"class":5391},[29,6351,686],{"class":309},[29,6353,313],{"class":305},[29,6355,3008],{"class":5391},[29,6357,316],{"class":309},[29,6359,6360],{"class":31,"line":59},[29,6361,1722],{"class":309},[29,6363,6364,6366,6368,6370],{"class":31,"line":67},[29,6365,2160],{"class":305},[29,6367,4430],{"class":309},[29,6369,355],{"class":305},[29,6371,6372],{"class":309},"a;\n",[29,6374,6375,6378,6380],{"class":31,"line":75},[29,6376,6377],{"class":309},"    a",[29,6379,355],{"class":305},[29,6381,6244],{"class":309},[29,6383,6384,6387,6389],{"class":31,"line":83},[29,6385,6386],{"class":309},"    b",[29,6388,355],{"class":305},[29,6390,4455],{"class":309},[29,6392,6393,6395,6397,6400,6402,6404,6406],{"class":31,"line":158},[29,6394,1727],{"class":309},[29,6396,1351],{"class":305},[29,6398,6399],{"class":103},"\"a=\"",[29,6401,1351],{"class":305},[29,6403,546],{"class":309},[29,6405,1351],{"class":305},[29,6407,1373],{"class":309},[29,6409,6410,6412,6414,6417,6419,6421,6423],{"class":31,"line":166},[29,6411,1727],{"class":309},[29,6413,1351],{"class":305},[29,6415,6416],{"class":103},"\"b=\"",[29,6418,1351],{"class":305},[29,6420,571],{"class":309},[29,6422,1351],{"class":305},[29,6424,1373],{"class":309},[29,6426,6427],{"class":31,"line":1505},[29,6428,1741],{"class":309},[223,6430,6431],{},"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":24,"searchDepth":43,"depth":43,"links":6433},[6434,6435,6436,6437,6438,6439],{"id":5347,"depth":43,"text":5348},{"id":5436,"depth":43,"text":5437},{"id":5519,"depth":43,"text":5520},{"id":5745,"depth":43,"text":5746},{"id":6094,"depth":43,"text":6095},{"id":6251,"depth":43,"text":6252},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5339,"description":24},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6446,"title":6447,"body":6448,"description":6455,"extension":231,"meta":7860,"navigation":233,"path":7861,"seo":7862,"stem":7863,"__hash__":7864},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6449,"toc":7850},[6450,6453,6456,6460,6622,6626,6629,6632,6635,6638,6778,6782,6785,6788,6791,6856,6860,6865,6932,6935,6939,6942,6953,6958,6978,6981,6986,7005,7008,7012,7031,7034,7038,7273,7277,7280,7283,7286,7448,7451,7455,7458,7464,7847],[10,6451,6447],{"id":6452},"_3指针",[171,6454,6455],{},"通过指针保存一个地址，指针就是个地址",[14,6457,6459],{"id":6458},"_31定义指针","3.1定义指针",[19,6461,6463],{"className":296,"code":6462,"language":298,"meta":24,"style":24},"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",[26,6464,6465,6473,6477,6482,6494,6499,6507,6517,6535,6555,6559,6564,6569,6574,6588,6604,6618],{"__ignoreMap":24},[29,6466,6467,6469,6471],{"class":31,"line":32},[29,6468,313],{"class":305},[29,6470,2148],{"class":35},[29,6472,2151],{"class":309},[29,6474,6475],{"class":31,"line":43},[29,6476,1722],{"class":309},[29,6478,6479],{"class":31,"line":51},[29,6480,6481],{"class":367},"    \u002F\u002F1.定义指针\n",[29,6483,6484,6486,6488,6490,6492],{"class":31,"line":59},[29,6485,2160],{"class":305},[29,6487,1574],{"class":309},[29,6489,355],{"class":305},[29,6491,754],{"class":39},[29,6493,1468],{"class":309},[29,6495,6496],{"class":31,"line":67},[29,6497,6498],{"class":367},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[29,6500,6501,6504],{"class":31,"line":75},[29,6502,6503],{"class":305},"    int*",[29,6505,6506],{"class":309},"p;\n",[29,6508,6509,6512,6515],{"class":31,"line":83},[29,6510,6511],{"class":309},"    p",[29,6513,6514],{"class":305},"=&",[29,6516,6372],{"class":309},[29,6518,6519,6521,6523,6526,6529,6531,6533],{"class":31,"line":158},[29,6520,1727],{"class":309},[29,6522,1351],{"class":305},[29,6524,6525],{"class":103},"\"a的地址为：\"",[29,6527,6528],{"class":305},"\u003C\u003C&",[29,6530,546],{"class":309},[29,6532,1351],{"class":305},[29,6534,1373],{"class":309},[29,6536,6537,6539,6541,6544,6546,6548,6550,6552],{"class":31,"line":166},[29,6538,1727],{"class":309},[29,6540,1351],{"class":305},[29,6542,6543],{"class":103},"\"指针p为：\"",[29,6545,1351],{"class":305},[29,6547,171],{"class":309},[29,6549,1351],{"class":305},[29,6551,1416],{"class":309},[29,6553,6554],{"class":367},"\u002F\u002F指针p表示的就是a的地址\n",[29,6556,6557],{"class":31,"line":1505},[29,6558,2575],{"emptyLinePlaceholder":233},[29,6560,6561],{"class":31,"line":1788},[29,6562,6563],{"class":367},"    \u002F\u002F2.使用指针\n",[29,6565,6566],{"class":31,"line":1793},[29,6567,6568],{"class":367},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[29,6570,6571],{"class":31,"line":1799},[29,6572,6573],{"class":367},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[29,6575,6576,6579,6581,6583,6586],{"class":31,"line":1804},[29,6577,6578],{"class":305},"    *",[29,6580,171],{"class":309},[29,6582,355],{"class":305},[29,6584,6585],{"class":39},"1000",[29,6587,1468],{"class":309},[29,6589,6590,6592,6595,6597,6599,6601],{"class":31,"line":1818},[29,6591,1727],{"class":309},[29,6593,6594],{"class":305},"\u003C\u003C*",[29,6596,171],{"class":309},[29,6598,1351],{"class":305},[29,6600,1416],{"class":309},[29,6602,6603],{"class":367},"\u002F\u002F1000\n",[29,6605,6606,6608,6610,6612,6614,6616],{"class":31,"line":1823},[29,6607,1727],{"class":309},[29,6609,1351],{"class":305},[29,6611,546],{"class":309},[29,6613,1351],{"class":305},[29,6615,1416],{"class":309},[29,6617,6603],{"class":367},[29,6619,6620],{"class":31,"line":1829},[29,6621,1741],{"class":309},[14,6623,6625],{"id":6624},"_32指针所占的内存空间","3.2指针所占的内存空间",[171,6627,6628],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[171,6630,6631],{},"在32位操作系统下：占用4个字节空间",[171,6633,6634],{},"在64位操作系统下：占用8个字节空间",[171,6636,6637],{},"上方是不管啥数据类型的",[19,6639,6641],{"className":296,"code":6640,"language":298,"meta":24,"style":24},"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",[26,6642,6643,6651,6655,6660,6672,6677,6682,6687,6700,6722,6748,6774],{"__ignoreMap":24},[29,6644,6645,6647,6649],{"class":31,"line":32},[29,6646,313],{"class":305},[29,6648,2148],{"class":35},[29,6650,2151],{"class":309},[29,6652,6653],{"class":31,"line":43},[29,6654,1722],{"class":309},[29,6656,6657],{"class":31,"line":51},[29,6658,6659],{"class":367},"    \u002F\u002F指针所占内存空间\n",[29,6661,6662,6664,6666,6668,6670],{"class":31,"line":59},[29,6663,2160],{"class":305},[29,6665,1574],{"class":309},[29,6667,355],{"class":305},[29,6669,754],{"class":39},[29,6671,1468],{"class":309},[29,6673,6674],{"class":31,"line":67},[29,6675,6676],{"class":367},"    \u002F\u002Fint *p;\n",[29,6678,6679],{"class":31,"line":75},[29,6680,6681],{"class":367},"    \u002F\u002Fp=&a;\n",[29,6683,6684],{"class":31,"line":83},[29,6685,6686],{"class":367},"    \u002F\u002F上述可以写为以下：\n",[29,6688,6689,6691,6694,6696,6698],{"class":31,"line":158},[29,6690,2160],{"class":305},[29,6692,6693],{"class":305}," *",[29,6695,171],{"class":309},[29,6697,6514],{"class":305},[29,6699,6372],{"class":309},[29,6701,6702,6705,6707,6710,6712,6715,6717,6719],{"class":31,"line":166},[29,6703,6704],{"class":309},"    cout ",[29,6706,1351],{"class":305},[29,6708,6709],{"class":103},"\"sizeof(int *)\"",[29,6711,1548],{"class":305},[29,6713,6714],{"class":309},"(p)",[29,6716,1351],{"class":305},[29,6718,1416],{"class":309},[29,6720,6721],{"class":367},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[29,6723,6724,6726,6728,6730,6732,6734,6736,6738,6740,6742,6745],{"class":31,"line":1505},[29,6725,6704],{"class":309},[29,6727,1351],{"class":305},[29,6729,6709],{"class":103},[29,6731,1548],{"class":305},[29,6733,310],{"class":309},[29,6735,313],{"class":305},[29,6737,6693],{"class":305},[29,6739,737],{"class":309},[29,6741,1351],{"class":305},[29,6743,6744],{"class":309},"endl",[29,6746,6747],{"class":367},"  \u002F\u002F4字节(32位的话)\n",[29,6749,6750,6752,6754,6757,6759,6761,6763,6765,6767,6769,6771],{"class":31,"line":1788},[29,6751,6704],{"class":309},[29,6753,1351],{"class":305},[29,6755,6756],{"class":103},"\"sizeof(char *)\"",[29,6758,1548],{"class":305},[29,6760,310],{"class":309},[29,6762,405],{"class":305},[29,6764,6693],{"class":305},[29,6766,737],{"class":309},[29,6768,1351],{"class":305},[29,6770,1416],{"class":309},[29,6772,6773],{"class":367}," \u002F\u002F4字节(32位的话)\n",[29,6775,6776],{"class":31,"line":1793},[29,6777,1741],{"class":309},[14,6779,6781],{"id":6780},"_33空指针","3.3空指针",[171,6783,6784],{},"空指针：指针变量指向内存中编号为0的空间",[171,6786,6787],{},"用途：初始化指针变量",[171,6789,6790],{},"注意：空指针指向的内存是不可以访问的",[19,6792,6794],{"className":296,"code":6793,"language":298,"meta":24,"style":24},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[26,6795,6796,6804,6808,6813,6827,6832,6847,6852],{"__ignoreMap":24},[29,6797,6798,6800,6802],{"class":31,"line":32},[29,6799,313],{"class":305},[29,6801,2148],{"class":35},[29,6803,2151],{"class":309},[29,6805,6806],{"class":31,"line":43},[29,6807,1722],{"class":309},[29,6809,6810],{"class":31,"line":51},[29,6811,6812],{"class":367},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[29,6814,6815,6817,6819,6821,6823,6825],{"class":31,"line":59},[29,6816,2160],{"class":305},[29,6818,6693],{"class":305},[29,6820,171],{"class":309},[29,6822,355],{"class":305},[29,6824,2567],{"class":39},[29,6826,1468],{"class":309},[29,6828,6829],{"class":31,"line":67},[29,6830,6831],{"class":367},"    \u002F\u002F2.空指针不能进行访问\n",[29,6833,6834,6836,6838,6840,6842,6844],{"class":31,"line":75},[29,6835,6578],{"class":305},[29,6837,171],{"class":309},[29,6839,355],{"class":305},[29,6841,619],{"class":39},[29,6843,364],{"class":309},[29,6845,6846],{"class":367},"\u002F\u002F直接报错，压根不能访问\n",[29,6848,6849],{"class":31,"line":83},[29,6850,6851],{"class":367},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[29,6853,6854],{"class":31,"line":158},[29,6855,1741],{"class":309},[14,6857,6859],{"id":6858},"_34野指针","3.4野指针",[171,6861,6862],{},[457,6863,6864],{},"指针变量指向非法的内存空间",[19,6866,6868],{"className":296,"code":6867,"language":298,"meta":24,"style":24},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[26,6869,6870,6878,6882,6911,6916,6928],{"__ignoreMap":24},[29,6871,6872,6874,6876],{"class":31,"line":32},[29,6873,313],{"class":305},[29,6875,2148],{"class":35},[29,6877,2151],{"class":309},[29,6879,6880],{"class":31,"line":43},[29,6881,1722],{"class":309},[29,6883,6884,6886,6888,6890,6892,6894,6896,6898,6900,6903,6906,6908],{"class":31,"line":51},[29,6885,2160],{"class":305},[29,6887,6693],{"class":305},[29,6889,171],{"class":309},[29,6891,355],{"class":305},[29,6893,310],{"class":309},[29,6895,313],{"class":305},[29,6897,6693],{"class":305},[29,6899,737],{"class":309},[29,6901,6902],{"class":305},"0x",[29,6904,6905],{"class":39},"1100",[29,6907,364],{"class":309},[29,6909,6910],{"class":367}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[29,6912,6913],{"class":31,"line":59},[29,6914,6915],{"class":367},"    \u002F\u002F访问野指针报错\n",[29,6917,6918,6920,6922,6924,6926],{"class":31,"line":67},[29,6919,1727],{"class":309},[29,6921,6594],{"class":305},[29,6923,171],{"class":309},[29,6925,1351],{"class":305},[29,6927,1373],{"class":309},[29,6929,6930],{"class":31,"line":75},[29,6931,1741],{"class":309},[171,6933,6934],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6936,6938],{"id":6937},"_35const修饰指针","3.5const修饰指针",[171,6940,6941],{},"三种情况：",[175,6943,6944,6947,6950],{},[178,6945,6946],{},"const修饰指针 常量指针",[178,6948,6949],{},"const修饰常量 指针常量",[178,6951,6952],{},"const即修饰指针，又修饰常量",[259,6954,6955],{},[178,6956,6957],{},"常量指针",[19,6959,6961],{"className":296,"code":6960,"language":298,"meta":24,"style":24},"const int *p=&a;\n",[26,6962,6963],{"__ignoreMap":24},[29,6964,6965,6968,6970,6972,6974,6976],{"class":31,"line":32},[29,6966,6967],{"class":305},"const",[29,6969,2557],{"class":305},[29,6971,6693],{"class":305},[29,6973,171],{"class":309},[29,6975,6514],{"class":305},[29,6977,6372],{"class":309},[171,6979,6980],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[259,6982,6983],{"start":43},[178,6984,6985],{},"指针常量",[19,6987,6989],{"className":296,"code":6988,"language":298,"meta":24,"style":24},"int *const p=&a;\n",[26,6990,6991],{"__ignoreMap":24},[29,6992,6993,6995,6998,7001,7003],{"class":31,"line":32},[29,6994,313],{"class":305},[29,6996,6997],{"class":305}," *const",[29,6999,7000],{"class":309}," p",[29,7002,6514],{"class":305},[29,7004,6372],{"class":309},[171,7006,7007],{},"指针的指向不可以改，指针指向的值可以改",[259,7009,7010],{"start":51},[178,7011,6952],{},[19,7013,7015],{"className":296,"code":7014,"language":298,"meta":24,"style":24},"const int *const p=&a;\n",[26,7016,7017],{"__ignoreMap":24},[29,7018,7019,7021,7023,7025,7027,7029],{"class":31,"line":32},[29,7020,6967],{"class":305},[29,7022,2557],{"class":305},[29,7024,6997],{"class":305},[29,7026,7000],{"class":309},[29,7028,6514],{"class":305},[29,7030,6372],{"class":309},[171,7032,7033],{},"指针的指向和指针指向的值都不可以改变",[14,7035,7037],{"id":7036},"_36指针和数组","3.6指针和数组",[19,7039,7041],{"className":296,"code":7040,"language":298,"meta":24,"style":24},"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",[26,7042,7043,7051,7055,7060,7114,7135,7151,7167,7178,7195,7200,7214,7240,7244,7256,7265,7269],{"__ignoreMap":24},[29,7044,7045,7047,7049],{"class":31,"line":32},[29,7046,313],{"class":305},[29,7048,2148],{"class":35},[29,7050,2151],{"class":309},[29,7052,7053],{"class":31,"line":43},[29,7054,1722],{"class":309},[29,7056,7057],{"class":31,"line":51},[29,7058,7059],{"class":367},"    \u002F\u002F利用指针访问数组中的元素\n",[29,7061,7062,7064,7066,7068,7070,7072,7074,7076,7078,7080,7082,7084,7086,7088,7090,7092,7094,7096,7098,7100,7102,7104,7106,7108,7110,7112],{"class":31,"line":59},[29,7063,2160],{"class":305},[29,7065,4137],{"class":309},[29,7067,754],{"class":39},[29,7069,1248],{"class":309},[29,7071,355],{"class":305},[29,7073,1204],{"class":309},[29,7075,525],{"class":39},[29,7077,686],{"class":309},[29,7079,386],{"class":39},[29,7081,686],{"class":309},[29,7083,380],{"class":39},[29,7085,686],{"class":309},[29,7087,601],{"class":39},[29,7089,686],{"class":309},[29,7091,627],{"class":39},[29,7093,686],{"class":309},[29,7095,652],{"class":39},[29,7097,686],{"class":309},[29,7099,677],{"class":39},[29,7101,686],{"class":309},[29,7103,703],{"class":39},[29,7105,686],{"class":309},[29,7107,728],{"class":39},[29,7109,686],{"class":309},[29,7111,754],{"class":39},[29,7113,4170],{"class":309},[29,7115,7116,7118,7120,7123,7125,7127,7129,7131,7133],{"class":31,"line":67},[29,7117,1727],{"class":309},[29,7119,1351],{"class":305},[29,7121,7122],{"class":103},"\"数组的第一个元素为：\"",[29,7124,1351],{"class":305},[29,7126,4081],{"class":309},[29,7128,499],{"class":39},[29,7130,1248],{"class":309},[29,7132,1351],{"class":305},[29,7134,1373],{"class":309},[29,7136,7137,7139,7141,7143,7145,7148],{"class":31,"line":75},[29,7138,2160],{"class":305},[29,7140,6693],{"class":305},[29,7142,171],{"class":309},[29,7144,355],{"class":305},[29,7146,7147],{"class":309},"arr;",[29,7149,7150],{"class":367},"\u002F\u002F注意数才要加取地址符号&\n",[29,7152,7153,7155,7157,7159,7161,7163,7165],{"class":31,"line":83},[29,7154,1727],{"class":309},[29,7156,1351],{"class":305},[29,7158,7122],{"class":103},[29,7160,6594],{"class":305},[29,7162,171],{"class":309},[29,7164,1351],{"class":305},[29,7166,1373],{"class":309},[29,7168,7169,7171,7173,7175],{"class":31,"line":158},[29,7170,6511],{"class":309},[29,7172,2467],{"class":305},[29,7174,364],{"class":309},[29,7176,7177],{"class":367}," \u002F\u002F让指针向后偏移4个字节\n",[29,7179,7180,7182,7184,7187,7189,7191,7193],{"class":31,"line":166},[29,7181,1727],{"class":309},[29,7183,1351],{"class":305},[29,7185,7186],{"class":103},"\"数组的第二个元素为：\"",[29,7188,6594],{"class":305},[29,7190,171],{"class":309},[29,7192,1351],{"class":305},[29,7194,1373],{"class":309},[29,7196,7197],{"class":31,"line":1505},[29,7198,7199],{"class":367},"    \u002F\u002F利用指针遍历数组\n",[29,7201,7202,7204,7206,7209,7211],{"class":31,"line":1788},[29,7203,2160],{"class":305},[29,7205,6693],{"class":305},[29,7207,7208],{"class":309},"p2",[29,7210,355],{"class":305},[29,7212,7213],{"class":309},"arr;\n",[29,7215,7216,7218,7220,7222,7224,7226,7228,7230,7232,7234,7236,7238],{"class":31,"line":1793},[29,7217,3376],{"class":305},[29,7219,1834],{"class":309},[29,7221,313],{"class":305},[29,7223,3207],{"class":309},[29,7225,355],{"class":305},[29,7227,499],{"class":39},[29,7229,3214],{"class":309},[29,7231,1218],{"class":305},[29,7233,754],{"class":39},[29,7235,3214],{"class":309},[29,7237,2467],{"class":305},[29,7239,316],{"class":309},[29,7241,7242],{"class":31,"line":1799},[29,7243,2205],{"class":309},[29,7245,7246,7248,7250,7252,7254],{"class":31,"line":1804},[29,7247,3626],{"class":309},[29,7249,6594],{"class":305},[29,7251,7208],{"class":309},[29,7253,1351],{"class":305},[29,7255,1373],{"class":309},[29,7257,7258,7261,7263],{"class":31,"line":1818},[29,7259,7260],{"class":309},"        p2",[29,7262,2467],{"class":305},[29,7264,1468],{"class":309},[29,7266,7267],{"class":31,"line":1823},[29,7268,2362],{"class":309},[29,7270,7271],{"class":31,"line":1829},[29,7272,1741],{"class":309},[14,7274,7276],{"id":7275},"_37指针和函数","3.7指针和函数",[171,7278,7279],{},"利用指针做函数参数，可以修改实参的值",[171,7281,7282],{},"值传递：只改变形参，不改变实参",[171,7284,7285],{},"地址传递：",[19,7287,7289],{"className":296,"code":7288,"language":298,"meta":24,"style":24},"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",[26,7290,7291,7316,7320,7332,7343,7353,7357,7365,7369,7381,7393,7398,7414,7429,7444],{"__ignoreMap":24},[29,7292,7293,7295,7297,7299,7301,7303,7306,7308,7310,7312,7314],{"class":31,"line":32},[29,7294,5539],{"class":305},[29,7296,5542],{"class":35},[29,7298,310],{"class":309},[29,7300,313],{"class":305},[29,7302,6693],{"class":305},[29,7304,7305],{"class":5391},"p1",[29,7307,686],{"class":309},[29,7309,313],{"class":305},[29,7311,6693],{"class":305},[29,7313,7208],{"class":5391},[29,7315,316],{"class":309},[29,7317,7318],{"class":31,"line":43},[29,7319,1722],{"class":309},[29,7321,7322,7324,7326,7329],{"class":31,"line":51},[29,7323,2160],{"class":305},[29,7325,4430],{"class":309},[29,7327,7328],{"class":305},"=*",[29,7330,7331],{"class":309},"p1;\n",[29,7333,7334,7336,7338,7340],{"class":31,"line":59},[29,7335,6578],{"class":305},[29,7337,7305],{"class":309},[29,7339,7328],{"class":305},[29,7341,7342],{"class":309},"p2;\n",[29,7344,7345,7347,7349,7351],{"class":31,"line":67},[29,7346,6578],{"class":305},[29,7348,7208],{"class":309},[29,7350,355],{"class":305},[29,7352,4455],{"class":309},[29,7354,7355],{"class":31,"line":75},[29,7356,1741],{"class":309},[29,7358,7359,7361,7363],{"class":31,"line":83},[29,7360,313],{"class":305},[29,7362,2148],{"class":35},[29,7364,2151],{"class":309},[29,7366,7367],{"class":31,"line":158},[29,7368,1722],{"class":309},[29,7370,7371,7373,7375,7377,7379],{"class":31,"line":166},[29,7372,2160],{"class":305},[29,7374,1574],{"class":309},[29,7376,355],{"class":305},[29,7378,754],{"class":39},[29,7380,1468],{"class":309},[29,7382,7383,7385,7387,7389,7391],{"class":31,"line":1505},[29,7384,2160],{"class":305},[29,7386,3008],{"class":309},[29,7388,355],{"class":305},[29,7390,1008],{"class":39},[29,7392,1468],{"class":309},[29,7394,7395],{"class":31,"line":1788},[29,7396,7397],{"class":367},"    \u002F\u002F地址传递\n",[29,7399,7400,7402,7404,7406,7409,7411],{"class":31,"line":1793},[29,7401,5736],{"class":35},[29,7403,310],{"class":309},[29,7405,661],{"class":305},[29,7407,7408],{"class":309},"a,",[29,7410,661],{"class":305},[29,7412,7413],{"class":309},"b);\n",[29,7415,7416,7418,7420,7422,7424,7426],{"class":31,"line":1799},[29,7417,1727],{"class":309},[29,7419,1351],{"class":305},[29,7421,546],{"class":309},[29,7423,1351],{"class":305},[29,7425,1416],{"class":309},[29,7427,7428],{"class":367},"\u002F\u002F20\n",[29,7430,7431,7433,7435,7437,7439,7441],{"class":31,"line":1804},[29,7432,1727],{"class":309},[29,7434,1351],{"class":305},[29,7436,571],{"class":309},[29,7438,1351],{"class":305},[29,7440,1416],{"class":309},[29,7442,7443],{"class":367},"\u002F\u002F10\n",[29,7445,7446],{"class":31,"line":1818},[29,7447,1741],{"class":309},[171,7449,7450],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7452,7454],{"id":7453},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[171,7456,7457],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[171,7459,7460,7461,7463],{},"例如数组：int arr",[29,7462,754],{},"={4,3,6,9,1,2,10,8,7,5}",[19,7465,7467],{"className":296,"code":7466,"language":298,"meta":24,"style":24},"#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",[26,7468,7469,7475,7485,7509,7513,7544,7548,7582,7586,7604,7608,7619,7634,7649,7653,7657,7661,7665,7669,7677,7681,7686,7740,7752,7764,7769,7777,7781,7786,7811,7815,7830,7839,7843],{"__ignoreMap":24},[29,7470,7471,7473],{"class":31,"line":32},[29,7472,2125],{"class":305},[29,7474,2128],{"class":103},[29,7476,7477,7479,7481,7483],{"class":31,"line":43},[29,7478,2133],{"class":305},[29,7480,2136],{"class":305},[29,7482,2139],{"class":35},[29,7484,1468],{"class":309},[29,7486,7487,7489,7492,7494,7496,7498,7500,7502,7504,7507],{"class":31,"line":51},[29,7488,5539],{"class":305},[29,7490,7491],{"class":35}," bubbleSort",[29,7493,310],{"class":309},[29,7495,313],{"class":305},[29,7497,6693],{"class":305},[29,7499,171],{"class":5391},[29,7501,686],{"class":309},[29,7503,313],{"class":305},[29,7505,7506],{"class":5391}," len",[29,7508,316],{"class":309},[29,7510,7511],{"class":31,"line":59},[29,7512,1722],{"class":309},[29,7514,7515,7517,7519,7521,7523,7525,7527,7529,7531,7534,7536,7538,7540,7542],{"class":31,"line":67},[29,7516,3376],{"class":305},[29,7518,310],{"class":309},[29,7520,313],{"class":305},[29,7522,3207],{"class":309},[29,7524,355],{"class":305},[29,7526,499],{"class":39},[29,7528,3214],{"class":309},[29,7530,1218],{"class":305},[29,7532,7533],{"class":309},"len",[29,7535,840],{"class":305},[29,7537,525],{"class":39},[29,7539,3214],{"class":309},[29,7541,2467],{"class":305},[29,7543,316],{"class":309},[29,7545,7546],{"class":31,"line":75},[29,7547,2205],{"class":309},[29,7549,7550,7552,7554,7556,7558,7560,7562,7564,7566,7568,7570,7572,7574,7576,7578,7580],{"class":31,"line":83},[29,7551,3578],{"class":305},[29,7553,310],{"class":309},[29,7555,313],{"class":305},[29,7557,3585],{"class":309},[29,7559,355],{"class":305},[29,7561,499],{"class":39},[29,7563,3592],{"class":309},[29,7565,1218],{"class":305},[29,7567,7533],{"class":309},[29,7569,840],{"class":305},[29,7571,749],{"class":309},[29,7573,840],{"class":305},[29,7575,525],{"class":39},[29,7577,3592],{"class":309},[29,7579,2467],{"class":305},[29,7581,316],{"class":309},[29,7583,7584],{"class":31,"line":158},[29,7585,2685],{"class":309},[29,7587,7588,7590,7593,7595,7598,7600,7602],{"class":31,"line":166},[29,7589,4817],{"class":305},[29,7591,7592],{"class":309},"(p[j]",[29,7594,1268],{"class":305},[29,7596,7597],{"class":309},"p[j",[29,7599,789],{"class":305},[29,7601,525],{"class":39},[29,7603,4832],{"class":309},[29,7605,7606],{"class":31,"line":1505},[29,7607,4837],{"class":309},[29,7609,7610,7612,7614,7616],{"class":31,"line":1788},[29,7611,4842],{"class":305},[29,7613,4430],{"class":309},[29,7615,355],{"class":305},[29,7617,7618],{"class":309},"p[j];\n",[29,7620,7621,7624,7626,7628,7630,7632],{"class":31,"line":1793},[29,7622,7623],{"class":309},"                p[j]",[29,7625,355],{"class":305},[29,7627,7597],{"class":309},[29,7629,789],{"class":305},[29,7631,525],{"class":39},[29,7633,4865],{"class":309},[29,7635,7636,7639,7641,7643,7645,7647],{"class":31,"line":1799},[29,7637,7638],{"class":309},"                p[j",[29,7640,789],{"class":305},[29,7642,525],{"class":39},[29,7644,1248],{"class":309},[29,7646,355],{"class":305},[29,7648,4455],{"class":309},[29,7650,7651],{"class":31,"line":1804},[29,7652,4885],{"class":309},[29,7654,7655],{"class":31,"line":1818},[29,7656,2704],{"class":309},[29,7658,7659],{"class":31,"line":1823},[29,7660,2362],{"class":309},[29,7662,7663],{"class":31,"line":1829},[29,7664,1741],{"class":309},[29,7666,7667],{"class":31,"line":1850},[29,7668,2575],{"emptyLinePlaceholder":233},[29,7670,7671,7673,7675],{"class":31,"line":1855},[29,7672,313],{"class":305},[29,7674,2148],{"class":35},[29,7676,2151],{"class":309},[29,7678,7679],{"class":31,"line":1869},[29,7680,1722],{"class":309},[29,7682,7683],{"class":31,"line":1874},[29,7684,7685],{"class":367},"    \u002F\u002F 1.创建数组\n",[29,7687,7688,7690,7692,7694,7696,7698,7700,7702,7704,7706,7708,7710,7712,7714,7716,7718,7720,7722,7724,7726,7728,7730,7732,7734,7736,7738],{"class":31,"line":1903},[29,7689,2160],{"class":305},[29,7691,4137],{"class":309},[29,7693,754],{"class":39},[29,7695,1248],{"class":309},[29,7697,355],{"class":305},[29,7699,1204],{"class":309},[29,7701,601],{"class":39},[29,7703,686],{"class":309},[29,7705,380],{"class":39},[29,7707,686],{"class":309},[29,7709,652],{"class":39},[29,7711,686],{"class":309},[29,7713,728],{"class":39},[29,7715,686],{"class":309},[29,7717,525],{"class":39},[29,7719,686],{"class":309},[29,7721,386],{"class":39},[29,7723,686],{"class":309},[29,7725,754],{"class":39},[29,7727,686],{"class":309},[29,7729,703],{"class":39},[29,7731,686],{"class":309},[29,7733,677],{"class":39},[29,7735,686],{"class":309},[29,7737,627],{"class":39},[29,7739,4170],{"class":309},[29,7741,7742,7744,7746,7748,7750],{"class":31,"line":1908},[29,7743,2160],{"class":305},[29,7745,7506],{"class":309},[29,7747,355],{"class":305},[29,7749,754],{"class":39},[29,7751,1468],{"class":309},[29,7753,7754,7756,7758,7760,7762],{"class":31,"line":1925},[29,7755,2160],{"class":305},[29,7757,6693],{"class":305},[29,7759,171],{"class":309},[29,7761,355],{"class":305},[29,7763,7213],{"class":309},[29,7765,7766],{"class":31,"line":1930},[29,7767,7768],{"class":367},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[29,7770,7771,7774],{"class":31,"line":1935},[29,7772,7773],{"class":35},"    bubbleSort",[29,7775,7776],{"class":309},"(p,len);\n",[29,7778,7779],{"class":31,"line":1940},[29,7780,2575],{"emptyLinePlaceholder":233},[29,7782,7783],{"class":31,"line":1954},[29,7784,7785],{"class":367},"    \u002F\u002F 3.打印排序后的数组\n",[29,7787,7788,7790,7792,7794,7796,7798,7800,7802,7804,7807,7809],{"class":31,"line":1959},[29,7789,3376],{"class":305},[29,7791,1834],{"class":309},[29,7793,313],{"class":305},[29,7795,3207],{"class":309},[29,7797,355],{"class":305},[29,7799,499],{"class":39},[29,7801,3389],{"class":309},[29,7803,1218],{"class":305},[29,7805,7806],{"class":309},"len; i",[29,7808,2467],{"class":305},[29,7810,316],{"class":309},[29,7812,7813],{"class":31,"line":2752},[29,7814,2205],{"class":309},[29,7816,7817,7819,7821,7823,7825,7828],{"class":31,"line":2766},[29,7818,3626],{"class":309},[29,7820,6594],{"class":305},[29,7822,171],{"class":309},[29,7824,1351],{"class":305},[29,7826,7827],{"class":103},"\"\"",[29,7829,1468],{"class":309},[29,7831,7832,7835,7837],{"class":31,"line":2774},[29,7833,7834],{"class":309},"        p",[29,7836,2467],{"class":305},[29,7838,1468],{"class":309},[29,7840,7841],{"class":31,"line":2779},[29,7842,2362],{"class":309},[29,7844,7845],{"class":31,"line":2785},[29,7846,1741],{"class":309},[223,7848,7849],{},"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":24,"searchDepth":43,"depth":43,"links":7851},[7852,7853,7854,7855,7856,7857,7858,7859],{"id":6458,"depth":43,"text":6459},{"id":6624,"depth":43,"text":6625},{"id":6780,"depth":43,"text":6781},{"id":6858,"depth":43,"text":6859},{"id":6937,"depth":43,"text":6938},{"id":7036,"depth":43,"text":7037},{"id":7275,"depth":43,"text":7276},{"id":7453,"depth":43,"text":7454},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6447,"description":6455},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7866,"title":7867,"body":7868,"description":7875,"extension":231,"meta":10849,"navigation":233,"path":10850,"seo":10851,"stem":10852,"__hash__":10853},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7869,"toc":10840},[7870,7873,7876,7880,7883,7886,7897,8235,8238,8242,8245,8252,8507,8511,8514,8517,8672,8676,8679,8682,8888,8892,8895,9198,9201,9209,9213,9216,9367,9369,9380,9437,9441,9446,10103,10111,10114,10208,10211,10831,10837],[10,7871,7867],{"id":7872},"_4结构体",[171,7874,7875],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7877,7879],{"id":7878},"_41结构体定义与使用","4.1结构体定义与使用",[171,7881,7882],{},"语法：struct 结构体名 {结构体成员列表}；",[171,7884,7885],{},"通过结构体创建变量的方式：",[175,7887,7888,7891,7894],{},[178,7889,7890],{},"struct 结构体名 变量名",[178,7892,7893],{},"struct 结构体名 变量名={成员1值，成员2值...}",[178,7895,7896],{},"定义结构体时顺便创建变量",[19,7898,7900],{"className":296,"code":7899,"language":298,"meta":24,"style":24},"#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",[26,7901,7902,7908,7918,7925,7930,7938,7942,7947,7951,7956,7961,7966,7973,7978,7985,7989,7996,8000,8004,8008,8012,8016,8020,8026,8030,8036,8044,8052,8056,8061,8066,8077,8082,8094,8105,8116,8121,8145,8150,8156,8183,8188,8194,8206,8218,8230],{"__ignoreMap":24},[29,7903,7904,7906],{"class":31,"line":32},[29,7905,2125],{"class":305},[29,7907,2128],{"class":103},[29,7909,7910,7912,7914,7916],{"class":31,"line":43},[29,7911,2133],{"class":305},[29,7913,2136],{"class":305},[29,7915,2139],{"class":35},[29,7917,1468],{"class":309},[29,7919,7920,7922],{"class":31,"line":51},[29,7921,2125],{"class":305},[29,7923,7924],{"class":103},"\u003Cstring>\n",[29,7926,7927],{"class":31,"line":59},[29,7928,7929],{"class":367},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[29,7931,7932,7935],{"class":31,"line":67},[29,7933,7934],{"class":305},"struct",[29,7936,7937],{"class":35}," Student\n",[29,7939,7940],{"class":31,"line":75},[29,7941,1722],{"class":309},[29,7943,7944],{"class":31,"line":83},[29,7945,7946],{"class":367},"    \u002F\u002F成员列表\n",[29,7948,7949],{"class":31,"line":158},[29,7950,2575],{"emptyLinePlaceholder":233},[29,7952,7953],{"class":31,"line":166},[29,7954,7955],{"class":367},"    \u002F\u002F姓名\n",[29,7957,7958],{"class":31,"line":1505},[29,7959,7960],{"class":309},"    string name;\n",[29,7962,7963],{"class":31,"line":1788},[29,7964,7965],{"class":367},"    \u002F\u002F年龄\n",[29,7967,7968,7970],{"class":31,"line":1793},[29,7969,2160],{"class":305},[29,7971,7972],{"class":309}," age;\n",[29,7974,7975],{"class":31,"line":1799},[29,7976,7977],{"class":367},"    \u002F\u002F分数\n",[29,7979,7980,7982],{"class":31,"line":1804},[29,7981,2160],{"class":305},[29,7983,7984],{"class":309}," score;\n",[29,7986,7987],{"class":31,"line":1818},[29,7988,4170],{"class":309},[29,7990,7991,7993],{"class":31,"line":1823},[29,7992,7934],{"class":305},[29,7994,7995],{"class":35}," School\n",[29,7997,7998],{"class":31,"line":1829},[29,7999,1722],{"class":309},[29,8001,8002],{"class":31,"line":1850},[29,8003,7946],{"class":367},[29,8005,8006],{"class":31,"line":1855},[29,8007,2575],{"emptyLinePlaceholder":233},[29,8009,8010],{"class":31,"line":1869},[29,8011,7955],{"class":367},[29,8013,8014],{"class":31,"line":1874},[29,8015,7960],{"class":309},[29,8017,8018],{"class":31,"line":1903},[29,8019,7965],{"class":367},[29,8021,8022,8024],{"class":31,"line":1908},[29,8023,2160],{"class":305},[29,8025,7972],{"class":309},[29,8027,8028],{"class":31,"line":1925},[29,8029,7977],{"class":367},[29,8031,8032,8034],{"class":31,"line":1930},[29,8033,2160],{"class":305},[29,8035,7984],{"class":309},[29,8037,8038,8041],{"class":31,"line":1935},[29,8039,8040],{"class":309},"} s3;",[29,8042,8043],{"class":367}," \u002F\u002F创建结构体时就创建了变量\n",[29,8045,8046,8048,8050],{"class":31,"line":1940},[29,8047,313],{"class":305},[29,8049,2148],{"class":35},[29,8051,2151],{"class":309},[29,8053,8054],{"class":31,"line":1954},[29,8055,1722],{"class":309},[29,8057,8058],{"class":31,"line":1959},[29,8059,8060],{"class":367},"    \u002F\u002F2.通过学生类型创建具体学生\n",[29,8062,8063],{"class":31,"line":2752},[29,8064,8065],{"class":367},"    \u002F\u002F2.1 struct Student s1;\n",[29,8067,8068,8071,8074],{"class":31,"line":2766},[29,8069,8070],{"class":305},"    struct",[29,8072,8073],{"class":35}," Student",[29,8075,8076],{"class":309}," s1;\n",[29,8078,8079],{"class":31,"line":2774},[29,8080,8081],{"class":367},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[29,8083,8084,8087,8089,8092],{"class":31,"line":2779},[29,8085,8086],{"class":309},"    s1.name",[29,8088,355],{"class":305},[29,8090,8091],{"class":103},"\"张三\"",[29,8093,1468],{"class":309},[29,8095,8096,8099,8101,8103],{"class":31,"line":2785},[29,8097,8098],{"class":309},"    s1.age",[29,8100,355],{"class":305},[29,8102,958],{"class":39},[29,8104,1468],{"class":309},[29,8106,8107,8110,8112,8114],{"class":31,"line":2791},[29,8108,8109],{"class":309},"    s1.score",[29,8111,355],{"class":305},[29,8113,562],{"class":39},[29,8115,1468],{"class":309},[29,8117,8118],{"class":31,"line":2796},[29,8119,8120],{"class":367},"    \u002F\u002F输出结果\n",[29,8122,8124,8126,8128,8131,8133,8136,8138,8141,8143],{"class":31,"line":8123},37,[29,8125,1727],{"class":309},[29,8127,1351],{"class":305},[29,8129,8130],{"class":309},"s1.name",[29,8132,1351],{"class":305},[29,8134,8135],{"class":309},"s1.age",[29,8137,1351],{"class":305},[29,8139,8140],{"class":309},"s1.score",[29,8142,1351],{"class":305},[29,8144,1373],{"class":309},[29,8146,8148],{"class":31,"line":8147},38,[29,8149,2575],{"emptyLinePlaceholder":233},[29,8151,8153],{"class":31,"line":8152},39,[29,8154,8155],{"class":367},"    \u002F\u002F2.2 struct Student s2={...}\n",[29,8157,8159,8161,8163,8166,8168,8170,8173,8175,8177,8179,8181],{"class":31,"line":8158},40,[29,8160,8070],{"class":305},[29,8162,8073],{"class":35},[29,8164,8165],{"class":309}," s2",[29,8167,355],{"class":305},[29,8169,1204],{"class":309},[29,8171,8172],{"class":103},"\"王五\"",[29,8174,686],{"class":309},[29,8176,958],{"class":39},[29,8178,686],{"class":309},[29,8180,562],{"class":39},[29,8182,4170],{"class":309},[29,8184,8186],{"class":31,"line":8185},41,[29,8187,2575],{"emptyLinePlaceholder":233},[29,8189,8191],{"class":31,"line":8190},42,[29,8192,8193],{"class":367},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[29,8195,8197,8200,8202,8204],{"class":31,"line":8196},43,[29,8198,8199],{"class":309},"    s3.name",[29,8201,355],{"class":305},[29,8203,3853],{"class":103},[29,8205,1468],{"class":309},[29,8207,8209,8212,8214,8216],{"class":31,"line":8208},44,[29,8210,8211],{"class":309},"    s3.age",[29,8213,355],{"class":305},[29,8215,958],{"class":39},[29,8217,1468],{"class":309},[29,8219,8221,8224,8226,8228],{"class":31,"line":8220},45,[29,8222,8223],{"class":309},"    s3.score",[29,8225,355],{"class":305},[29,8227,1008],{"class":39},[29,8229,1468],{"class":309},[29,8231,8233],{"class":31,"line":8232},46,[29,8234,1741],{"class":309},[171,8236,8237],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8239,8241],{"id":8240},"_42结构体数组","4.2结构体数组",[171,8243,8244],{},"将自定义的结构体放入到数组中方便维护",[171,8246,8247,8248,8251],{},"语法：struct 结构体名 数组名",[29,8249,8250],{},"元素个数","={ {}，{},...{} };",[19,8253,8255],{"className":296,"code":8254,"language":298,"meta":24,"style":24},"#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",[26,8256,8257,8263,8273,8279,8284,8290,8294,8298,8304,8310,8314,8318,8326,8330,8335,8350,8354,8370,8386,8390,8395,8411,8426,8441,8446,8472,8476,8499,8503],{"__ignoreMap":24},[29,8258,8259,8261],{"class":31,"line":32},[29,8260,2125],{"class":305},[29,8262,2128],{"class":103},[29,8264,8265,8267,8269,8271],{"class":31,"line":43},[29,8266,2133],{"class":305},[29,8268,2136],{"class":305},[29,8270,2139],{"class":35},[29,8272,1468],{"class":309},[29,8274,8275,8277],{"class":31,"line":51},[29,8276,2125],{"class":305},[29,8278,7924],{"class":103},[29,8280,8281],{"class":31,"line":59},[29,8282,8283],{"class":367},"\u002F\u002F1.定义结构体\n",[29,8285,8286,8288],{"class":31,"line":67},[29,8287,7934],{"class":305},[29,8289,7937],{"class":35},[29,8291,8292],{"class":31,"line":75},[29,8293,1722],{"class":309},[29,8295,8296],{"class":31,"line":83},[29,8297,7960],{"class":309},[29,8299,8300,8302],{"class":31,"line":158},[29,8301,2160],{"class":305},[29,8303,7972],{"class":309},[29,8305,8306,8308],{"class":31,"line":166},[29,8307,2160],{"class":305},[29,8309,7984],{"class":309},[29,8311,8312],{"class":31,"line":1505},[29,8313,2575],{"emptyLinePlaceholder":233},[29,8315,8316],{"class":31,"line":1788},[29,8317,4170],{"class":309},[29,8319,8320,8322,8324],{"class":31,"line":1793},[29,8321,313],{"class":305},[29,8323,2148],{"class":35},[29,8325,2151],{"class":309},[29,8327,8328],{"class":31,"line":1799},[29,8329,1722],{"class":309},[29,8331,8332],{"class":31,"line":1804},[29,8333,8334],{"class":367},"    \u002F\u002F2.创建结构体数组\n",[29,8336,8337,8339,8341,8344,8346,8348],{"class":31,"line":1818},[29,8338,8070],{"class":305},[29,8340,8073],{"class":35},[29,8342,8343],{"class":309}," stuArray[",[29,8345,386],{"class":39},[29,8347,1248],{"class":309},[29,8349,5083],{"class":305},[29,8351,8352],{"class":31,"line":1823},[29,8353,2205],{"class":309},[29,8355,8356,8358,8360,8362,8364,8366,8368],{"class":31,"line":1829},[29,8357,5092],{"class":309},[29,8359,8091],{"class":103},[29,8361,686],{"class":309},[29,8363,958],{"class":39},[29,8365,686],{"class":309},[29,8367,619],{"class":39},[29,8369,5105],{"class":309},[29,8371,8372,8374,8376,8378,8380,8382,8384],{"class":31,"line":1850},[29,8373,5092],{"class":309},[29,8375,3853],{"class":103},[29,8377,686],{"class":309},[29,8379,883],{"class":39},[29,8381,686],{"class":309},[29,8383,883],{"class":39},[29,8385,1741],{"class":309},[29,8387,8388],{"class":31,"line":1855},[29,8389,2362],{"class":309},[29,8391,8392],{"class":31,"line":1869},[29,8393,8394],{"class":367},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[29,8396,8397,8400,8402,8405,8407,8409],{"class":31,"line":1874},[29,8398,8399],{"class":309},"    stuArray[",[29,8401,525],{"class":39},[29,8403,8404],{"class":309},"].name",[29,8406,355],{"class":305},[29,8408,3876],{"class":103},[29,8410,1468],{"class":309},[29,8412,8413,8415,8417,8420,8422,8424],{"class":31,"line":1903},[29,8414,8399],{"class":309},[29,8416,525],{"class":39},[29,8418,8419],{"class":309},"].age",[29,8421,355],{"class":305},[29,8423,386],{"class":39},[29,8425,1468],{"class":309},[29,8427,8428,8430,8432,8435,8437,8439],{"class":31,"line":1908},[29,8429,8399],{"class":309},[29,8431,525],{"class":39},[29,8433,8434],{"class":309},"].score",[29,8436,355],{"class":305},[29,8438,386],{"class":39},[29,8440,1468],{"class":309},[29,8442,8443],{"class":31,"line":1925},[29,8444,8445],{"class":367},"    \u002F\u002F4.遍历结构体数组\n",[29,8447,8448,8450,8452,8454,8456,8458,8460,8462,8464,8466,8468,8470],{"class":31,"line":1930},[29,8449,3376],{"class":305},[29,8451,1834],{"class":309},[29,8453,313],{"class":305},[29,8455,3207],{"class":309},[29,8457,355],{"class":305},[29,8459,499],{"class":39},[29,8461,3214],{"class":309},[29,8463,1218],{"class":305},[29,8465,386],{"class":39},[29,8467,3214],{"class":309},[29,8469,2467],{"class":305},[29,8471,316],{"class":309},[29,8473,8474],{"class":31,"line":1935},[29,8475,2205],{"class":309},[29,8477,8478,8480,8482,8485,8487,8490,8492,8495,8497],{"class":31,"line":1940},[29,8479,3626],{"class":309},[29,8481,1351],{"class":305},[29,8483,8484],{"class":309},"stuArray[i].name",[29,8486,1351],{"class":305},[29,8488,8489],{"class":309},"stuArray[i].age",[29,8491,1351],{"class":305},[29,8493,8494],{"class":309},"stuArray[i].score",[29,8496,1351],{"class":305},[29,8498,1373],{"class":309},[29,8500,8501],{"class":31,"line":1954},[29,8502,2362],{"class":309},[29,8504,8505],{"class":31,"line":1959},[29,8506,1741],{"class":309},[14,8508,8510],{"id":8509},"_43结构体指针","4.3结构体指针",[171,8512,8513],{},"作用：通过指针访问结构体中的成员",[171,8515,8516],{},"利用操作符->可以通过结构体指针访问结构体属性",[19,8518,8520],{"className":296,"code":8519,"language":298,"meta":24,"style":24},"#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",[26,8521,8522,8528,8538,8544,8548,8554,8558,8562,8568,8574,8578,8586,8590,8595,8620,8625,8640,8645,8668],{"__ignoreMap":24},[29,8523,8524,8526],{"class":31,"line":32},[29,8525,2125],{"class":305},[29,8527,2128],{"class":103},[29,8529,8530,8532,8534,8536],{"class":31,"line":43},[29,8531,2133],{"class":305},[29,8533,2136],{"class":305},[29,8535,2139],{"class":35},[29,8537,1468],{"class":309},[29,8539,8540,8542],{"class":31,"line":51},[29,8541,2125],{"class":305},[29,8543,7924],{"class":103},[29,8545,8546],{"class":31,"line":59},[29,8547,8283],{"class":367},[29,8549,8550,8552],{"class":31,"line":67},[29,8551,7934],{"class":305},[29,8553,7937],{"class":35},[29,8555,8556],{"class":31,"line":75},[29,8557,1722],{"class":309},[29,8559,8560],{"class":31,"line":83},[29,8561,7960],{"class":309},[29,8563,8564,8566],{"class":31,"line":158},[29,8565,2160],{"class":305},[29,8567,7972],{"class":309},[29,8569,8570,8572],{"class":31,"line":166},[29,8571,2160],{"class":305},[29,8573,7984],{"class":309},[29,8575,8576],{"class":31,"line":1505},[29,8577,4170],{"class":309},[29,8579,8580,8582,8584],{"class":31,"line":1788},[29,8581,313],{"class":305},[29,8583,2148],{"class":35},[29,8585,2151],{"class":309},[29,8587,8588],{"class":31,"line":1793},[29,8589,1722],{"class":309},[29,8591,8592],{"class":31,"line":1799},[29,8593,8594],{"class":367},"    \u002F\u002F创建学生结构体变量\n",[29,8596,8597,8599,8601,8604,8606,8608,8610,8612,8614,8616,8618],{"class":31,"line":1804},[29,8598,8070],{"class":305},[29,8600,8073],{"class":35},[29,8602,8603],{"class":309}," s",[29,8605,355],{"class":305},[29,8607,1204],{"class":309},[29,8609,8091],{"class":103},[29,8611,686],{"class":309},[29,8613,958],{"class":39},[29,8615,686],{"class":309},[29,8617,1898],{"class":39},[29,8619,4170],{"class":309},[29,8621,8622],{"class":31,"line":1818},[29,8623,8624],{"class":367},"    \u002F\u002F通过指针指向结构体变量\n",[29,8626,8627,8629,8631,8633,8635,8637],{"class":31,"line":1823},[29,8628,8070],{"class":305},[29,8630,8073],{"class":35},[29,8632,6693],{"class":305},[29,8634,171],{"class":309},[29,8636,6514],{"class":305},[29,8638,8639],{"class":309},"s\n",[29,8641,8642],{"class":31,"line":1829},[29,8643,8644],{"class":367},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[29,8646,8647,8649,8651,8654,8656,8659,8661,8664,8666],{"class":31,"line":1850},[29,8648,1727],{"class":309},[29,8650,1351],{"class":305},[29,8652,8653],{"class":309},"p->name",[29,8655,1351],{"class":305},[29,8657,8658],{"class":309},"p->age",[29,8660,1351],{"class":305},[29,8662,8663],{"class":309},"p->score",[29,8665,1351],{"class":305},[29,8667,1373],{"class":309},[29,8669,8670],{"class":31,"line":1855},[29,8671,1741],{"class":309},[14,8673,8675],{"id":8674},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[171,8677,8678],{},"作用：结构体中的成员可以是另一个结构体",[171,8680,8681],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[19,8683,8685],{"className":296,"code":8684,"language":298,"meta":24,"style":24},"#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",[26,8686,8687,8693,8703,8709,8714,8722,8726,8730,8736,8742,8746,8751,8758,8762,8769,8773,8779,8784,8788,8796,8800,8805,8810,8815,8826,8838,8849,8862,8873,8884],{"__ignoreMap":24},[29,8688,8689,8691],{"class":31,"line":32},[29,8690,2125],{"class":305},[29,8692,2128],{"class":103},[29,8694,8695,8697,8699,8701],{"class":31,"line":43},[29,8696,2133],{"class":305},[29,8698,2136],{"class":305},[29,8700,2139],{"class":35},[29,8702,1468],{"class":309},[29,8704,8705,8707],{"class":31,"line":51},[29,8706,2125],{"class":305},[29,8708,7924],{"class":103},[29,8710,8711],{"class":31,"line":59},[29,8712,8713],{"class":367},"\u002F\u002F定义学生结构体\n",[29,8715,8716,8718,8720],{"class":31,"line":67},[29,8717,7934],{"class":305},[29,8719,8073],{"class":35},[29,8721,2849],{"class":309},[29,8723,8724],{"class":31,"line":75},[29,8725,1722],{"class":309},[29,8727,8728],{"class":31,"line":83},[29,8729,7960],{"class":309},[29,8731,8732,8734],{"class":31,"line":158},[29,8733,2160],{"class":305},[29,8735,7972],{"class":309},[29,8737,8738,8740],{"class":31,"line":166},[29,8739,2160],{"class":305},[29,8741,7984],{"class":309},[29,8743,8744],{"class":31,"line":1505},[29,8745,1741],{"class":309},[29,8747,8748],{"class":31,"line":1788},[29,8749,8750],{"class":367},"\u002F\u002F定义老师结构体\n",[29,8752,8753,8755],{"class":31,"line":1793},[29,8754,7934],{"class":305},[29,8756,8757],{"class":35}," Teacher\n",[29,8759,8760],{"class":31,"line":1799},[29,8761,1722],{"class":309},[29,8763,8764,8766],{"class":31,"line":1804},[29,8765,2160],{"class":305},[29,8767,8768],{"class":309}," id;\n",[29,8770,8771],{"class":31,"line":1818},[29,8772,7960],{"class":309},[29,8774,8775,8777],{"class":31,"line":1823},[29,8776,2160],{"class":305},[29,8778,7972],{"class":309},[29,8780,8781],{"class":31,"line":1829},[29,8782,8783],{"class":309},"    Student stu;\n",[29,8785,8786],{"class":31,"line":1850},[29,8787,1741],{"class":309},[29,8789,8790,8792,8794],{"class":31,"line":1855},[29,8791,313],{"class":305},[29,8793,2148],{"class":35},[29,8795,6153],{"class":309},[29,8797,8798],{"class":31,"line":1869},[29,8799,1722],{"class":309},[29,8801,8802],{"class":31,"line":1874},[29,8803,8804],{"class":367},"    \u002F\u002F结构体嵌套结构体\n",[29,8806,8807],{"class":31,"line":1903},[29,8808,8809],{"class":367},"    \u002F\u002F创建老师\n",[29,8811,8812],{"class":31,"line":1908},[29,8813,8814],{"class":309},"    Teacher t;\n",[29,8816,8817,8820,8822,8824],{"class":31,"line":1925},[29,8818,8819],{"class":309},"    t.id",[29,8821,355],{"class":305},[29,8823,619],{"class":39},[29,8825,1468],{"class":309},[29,8827,8828,8831,8833,8836],{"class":31,"line":1930},[29,8829,8830],{"class":309},"    t.name",[29,8832,355],{"class":305},[29,8834,8835],{"class":103},"\"老王\"",[29,8837,1468],{"class":309},[29,8839,8840,8843,8845,8847],{"class":31,"line":1935},[29,8841,8842],{"class":309},"    t.age",[29,8844,355],{"class":305},[29,8846,958],{"class":39},[29,8848,1468],{"class":309},[29,8850,8851,8854,8856,8859],{"class":31,"line":1940},[29,8852,8853],{"class":309},"    t.stu.name",[29,8855,355],{"class":305},[29,8857,8858],{"class":103},"\"小王\"",[29,8860,8861],{"class":309},"；\n",[29,8863,8864,8867,8869,8871],{"class":31,"line":1954},[29,8865,8866],{"class":309},"    t.stu.age",[29,8868,355],{"class":305},[29,8870,1008],{"class":39},[29,8872,1468],{"class":309},[29,8874,8875,8878,8880,8882],{"class":31,"line":1959},[29,8876,8877],{"class":309},"    t.stu.score",[29,8879,355],{"class":305},[29,8881,652],{"class":39},[29,8883,1468],{"class":309},[29,8885,8886],{"class":31,"line":2752},[29,8887,1741],{"class":309},[14,8889,8891],{"id":8890},"_45结构体做函数参数","4.5结构体做函数参数",[171,8893,8894],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[19,8896,8898],{"className":296,"code":8897,"language":298,"meta":24,"style":24},"#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",[26,8899,8900,8906,8916,8922,8928,8932,8936,8942,8948,8952,8957,8962,8979,8983,9016,9020,9025,9044,9048,9079,9083,9091,9095,9104,9116,9128,9140,9153,9161,9174,9186,9194],{"__ignoreMap":24},[29,8901,8902,8904],{"class":31,"line":32},[29,8903,2125],{"class":305},[29,8905,2128],{"class":103},[29,8907,8908,8910,8912,8914],{"class":31,"line":43},[29,8909,2133],{"class":305},[29,8911,2136],{"class":305},[29,8913,2139],{"class":35},[29,8915,1468],{"class":309},[29,8917,8918,8920],{"class":31,"line":51},[29,8919,2125],{"class":305},[29,8921,7924],{"class":103},[29,8923,8924,8926],{"class":31,"line":59},[29,8925,7934],{"class":305},[29,8927,7937],{"class":35},[29,8929,8930],{"class":31,"line":67},[29,8931,1722],{"class":309},[29,8933,8934],{"class":31,"line":75},[29,8935,7960],{"class":309},[29,8937,8938,8940],{"class":31,"line":83},[29,8939,2160],{"class":305},[29,8941,7972],{"class":309},[29,8943,8944,8946],{"class":31,"line":158},[29,8945,2160],{"class":305},[29,8947,7984],{"class":309},[29,8949,8950],{"class":31,"line":166},[29,8951,4170],{"class":309},[29,8953,8954],{"class":31,"line":1505},[29,8955,8956],{"class":367},"\u002F\u002F打印学生信息的函数\n",[29,8958,8959],{"class":31,"line":1788},[29,8960,8961],{"class":367},"\u002F\u002F值传递\n",[29,8963,8964,8966,8969,8971,8973,8975,8977],{"class":31,"line":1793},[29,8965,5539],{"class":305},[29,8967,8968],{"class":35}," printStudent1",[29,8970,310],{"class":309},[29,8972,7934],{"class":305},[29,8974,8073],{"class":35},[29,8976,8603],{"class":5391},[29,8978,316],{"class":309},[29,8980,8981],{"class":31,"line":1799},[29,8982,1722],{"class":309},[29,8984,8985,8987,8989,8992,8994,8997,8999,9002,9004,9006,9008,9011,9013],{"class":31,"line":1804},[29,8986,6704],{"class":309},[29,8988,1351],{"class":305},[29,8990,8991],{"class":309}," s.name ",[29,8993,1351],{"class":305},[29,8995,8996],{"class":103}," \" \"",[29,8998,1620],{"class":305},[29,9000,9001],{"class":309}," s.age ",[29,9003,1351],{"class":305},[29,9005,8996],{"class":103},[29,9007,1620],{"class":305},[29,9009,9010],{"class":309}," s.score ",[29,9012,1351],{"class":305},[29,9014,9015],{"class":309}," endl;\n",[29,9017,9018],{"class":31,"line":1818},[29,9019,1741],{"class":309},[29,9021,9022],{"class":31,"line":1823},[29,9023,9024],{"class":367},"\u002F\u002F地址传递\n",[29,9026,9027,9029,9032,9034,9036,9038,9040,9042],{"class":31,"line":1829},[29,9028,5539],{"class":305},[29,9030,9031],{"class":35}," printStudent2",[29,9033,310],{"class":309},[29,9035,7934],{"class":305},[29,9037,8073],{"class":35},[29,9039,6693],{"class":305},[29,9041,1003],{"class":5391},[29,9043,316],{"class":309},[29,9045,9046],{"class":31,"line":1850},[29,9047,1722],{"class":309},[29,9049,9050,9052,9054,9057,9059,9061,9063,9066,9068,9070,9072,9075,9077],{"class":31,"line":1855},[29,9051,6704],{"class":309},[29,9053,1351],{"class":305},[29,9055,9056],{"class":309}," s->name ",[29,9058,1351],{"class":305},[29,9060,8996],{"class":103},[29,9062,1620],{"class":305},[29,9064,9065],{"class":309}," s->age ",[29,9067,1351],{"class":305},[29,9069,8996],{"class":103},[29,9071,1620],{"class":305},[29,9073,9074],{"class":309}," s->score ",[29,9076,1351],{"class":305},[29,9078,9015],{"class":309},[29,9080,9081],{"class":31,"line":1869},[29,9082,1741],{"class":309},[29,9084,9085,9087,9089],{"class":31,"line":1874},[29,9086,313],{"class":305},[29,9088,2148],{"class":35},[29,9090,2151],{"class":309},[29,9092,9093],{"class":31,"line":1903},[29,9094,1722],{"class":309},[29,9096,9097,9099,9101],{"class":31,"line":1908},[29,9098,8070],{"class":305},[29,9100,8073],{"class":35},[29,9102,9103],{"class":309}," s;\n",[29,9105,9106,9109,9111,9114],{"class":31,"line":1925},[29,9107,9108],{"class":309},"    s.name ",[29,9110,355],{"class":305},[29,9112,9113],{"class":103}," \"张三\"",[29,9115,1468],{"class":309},[29,9117,9118,9121,9123,9126],{"class":31,"line":1930},[29,9119,9120],{"class":309},"    s.age ",[29,9122,355],{"class":305},[29,9124,9125],{"class":39}," 20",[29,9127,1468],{"class":309},[29,9129,9130,9133,9135,9138],{"class":31,"line":1935},[29,9131,9132],{"class":309},"    s.score ",[29,9134,355],{"class":305},[29,9136,9137],{"class":39}," 85",[29,9139,1468],{"class":309},[29,9141,9142,9144,9146,9149,9151],{"class":31,"line":1940},[29,9143,1727],{"class":309},[29,9145,1351],{"class":305},[29,9147,9148],{"class":103},"\"值传递:\"",[29,9150,1351],{"class":305},[29,9152,1373],{"class":309},[29,9154,9155,9158],{"class":31,"line":1954},[29,9156,9157],{"class":35},"    printStudent1",[29,9159,9160],{"class":309},"(s);\n",[29,9162,9163,9165,9167,9170,9172],{"class":31,"line":1959},[29,9164,1727],{"class":309},[29,9166,1351],{"class":305},[29,9168,9169],{"class":103},"\"地址传递:\"",[29,9171,1351],{"class":305},[29,9173,1373],{"class":309},[29,9175,9176,9179,9181,9183],{"class":31,"line":2752},[29,9177,9178],{"class":35},"    printStudent2",[29,9180,310],{"class":309},[29,9182,661],{"class":305},[29,9184,9185],{"class":309},"s); \n",[29,9187,9188,9190,9192],{"class":31,"line":2766},[29,9189,4265],{"class":305},[29,9191,4268],{"class":39},[29,9193,1468],{"class":309},[29,9195,9196],{"class":31,"line":2774},[29,9197,1741],{"class":309},[171,9199,9200],{},"注意：",[175,9202,9203,9206],{},[178,9204,9205],{},"1.先定义结构体，不要在函数中写结构体的定义",[178,9207,9208],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9210,9212],{"id":9211},"_46结构体中const使用场景","4.6结构体中const使用场景",[171,9214,9215],{},"用const防止误操作",[19,9217,9219],{"className":296,"code":9218,"language":298,"meta":24,"style":24},"#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",[26,9220,9221,9227,9237,9243,9248,9252,9256,9262,9268,9272,9288,9292,9315,9319,9327,9331,9352,9359,9363],{"__ignoreMap":24},[29,9222,9223,9225],{"class":31,"line":32},[29,9224,2125],{"class":305},[29,9226,2128],{"class":103},[29,9228,9229,9231,9233,9235],{"class":31,"line":43},[29,9230,2133],{"class":305},[29,9232,2136],{"class":305},[29,9234,2139],{"class":35},[29,9236,1468],{"class":309},[29,9238,9239,9241],{"class":31,"line":51},[29,9240,2125],{"class":305},[29,9242,7924],{"class":103},[29,9244,9245],{"class":31,"line":59},[29,9246,9247],{"class":309},"sctuct Student\n",[29,9249,9250],{"class":31,"line":67},[29,9251,1722],{"class":309},[29,9253,9254],{"class":31,"line":75},[29,9255,7960],{"class":309},[29,9257,9258,9260],{"class":31,"line":83},[29,9259,2160],{"class":305},[29,9261,7972],{"class":309},[29,9263,9264,9266],{"class":31,"line":158},[29,9265,2160],{"class":305},[29,9267,7984],{"class":309},[29,9269,9270],{"class":31,"line":166},[29,9271,4170],{"class":309},[29,9273,9274,9276,9279,9281,9284,9286],{"class":31,"line":1505},[29,9275,5539],{"class":305},[29,9277,9278],{"class":35}," printStudents",[29,9280,310],{"class":309},[29,9282,9283],{"class":35},"student",[29,9285,8603],{"class":5391},[29,9287,316],{"class":309},[29,9289,9290],{"class":31,"line":1788},[29,9291,1722],{"class":309},[29,9293,9294,9296,9298,9301,9303,9306,9308,9311,9313],{"class":31,"line":1793},[29,9295,1727],{"class":309},[29,9297,1351],{"class":305},[29,9299,9300],{"class":309},"s.name",[29,9302,1351],{"class":305},[29,9304,9305],{"class":309},"s.age",[29,9307,1351],{"class":305},[29,9309,9310],{"class":309},"s.score",[29,9312,1351],{"class":305},[29,9314,1373],{"class":309},[29,9316,9317],{"class":31,"line":1799},[29,9318,1741],{"class":309},[29,9320,9321,9323,9325],{"class":31,"line":1804},[29,9322,313],{"class":305},[29,9324,2148],{"class":35},[29,9326,6153],{"class":309},[29,9328,9329],{"class":31,"line":1818},[29,9330,1722],{"class":309},[29,9332,9333,9336,9338,9340,9342,9344,9346,9348,9350],{"class":31,"line":1823},[29,9334,9335],{"class":309},"    Student s",[29,9337,355],{"class":305},[29,9339,1204],{"class":309},[29,9341,8091],{"class":103},[29,9343,686],{"class":309},[29,9345,958],{"class":39},[29,9347,686],{"class":309},[29,9349,958],{"class":39},[29,9351,4170],{"class":309},[29,9353,9354,9357],{"class":31,"line":1829},[29,9355,9356],{"class":35},"    printStudent",[29,9358,9160],{"class":309},[29,9360,9361],{"class":31,"line":1850},[29,9362,2575],{"emptyLinePlaceholder":233},[29,9364,9365],{"class":31,"line":1855},[29,9366,1741],{"class":309},[171,9368,9200],{},[175,9370,9371,9374,9377],{},[178,9372,9373],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[178,9375,9376],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[178,9378,9379],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[19,9381,9383],{"className":296,"code":9382,"language":298,"meta":24,"style":24},"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",[26,9384,9385,9404,9408,9413,9433],{"__ignoreMap":24},[29,9386,9387,9389,9391,9393,9395,9398,9400,9402],{"class":31,"line":32},[29,9388,5539],{"class":305},[29,9390,9278],{"class":35},[29,9392,310],{"class":309},[29,9394,6967],{"class":305},[29,9396,9397],{"class":35}," student",[29,9399,6693],{"class":305},[29,9401,1003],{"class":5391},[29,9403,316],{"class":309},[29,9405,9406],{"class":31,"line":43},[29,9407,1722],{"class":309},[29,9409,9410],{"class":31,"line":51},[29,9411,9412],{"class":367},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[29,9414,9415,9417,9419,9421,9423,9425,9427,9429,9431],{"class":31,"line":59},[29,9416,1727],{"class":309},[29,9418,1351],{"class":305},[29,9420,9300],{"class":309},[29,9422,1351],{"class":305},[29,9424,9305],{"class":309},[29,9426,1351],{"class":305},[29,9428,9310],{"class":309},[29,9430,1351],{"class":305},[29,9432,1373],{"class":309},[29,9434,9435],{"class":31,"line":67},[29,9436,1741],{"class":309},[14,9438,9440],{"id":9439},"_47案例","4.7案例",[259,9442,9443],{},[178,9444,9445],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[19,9447,9449],{"className":296,"code":9448,"language":298,"meta":24,"style":24},"#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",[26,9450,9451,9457,9467,9473,9480,9484,9490,9494,9499,9505,9511,9515,9519,9525,9529,9534,9539,9552,9556,9561,9587,9591,9603,9630,9634,9646,9656,9660,9665,9694,9698,9710,9719,9746,9757,9767,9771,9775,9779,9784,9808,9812,9836,9840,9859,9885,9889,9914,9937,9961,9966,9971,9976,9985,9990,9996,10017,10023,10037,10043,10070,10079,10085,10093,10098],{"__ignoreMap":24},[29,9452,9453,9455],{"class":31,"line":32},[29,9454,2125],{"class":305},[29,9456,2128],{"class":103},[29,9458,9459,9461,9463,9465],{"class":31,"line":43},[29,9460,2133],{"class":305},[29,9462,2136],{"class":305},[29,9464,2139],{"class":35},[29,9466,1468],{"class":309},[29,9468,9469,9471],{"class":31,"line":51},[29,9470,2125],{"class":305},[29,9472,7924],{"class":103},[29,9474,9475,9477],{"class":31,"line":59},[29,9476,2125],{"class":305},[29,9478,9479],{"class":103},"\u003Cctime>\n",[29,9481,9482],{"class":31,"line":67},[29,9483,8713],{"class":367},[29,9485,9486,9488],{"class":31,"line":75},[29,9487,7934],{"class":305},[29,9489,7937],{"class":35},[29,9491,9492],{"class":31,"line":83},[29,9493,1722],{"class":309},[29,9495,9496],{"class":31,"line":158},[29,9497,9498],{"class":309},"    string sName;\n",[29,9500,9501,9503],{"class":31,"line":166},[29,9502,2160],{"class":305},[29,9504,7972],{"class":309},[29,9506,9507,9509],{"class":31,"line":1505},[29,9508,2160],{"class":305},[29,9510,7984],{"class":309},[29,9512,9513],{"class":31,"line":1788},[29,9514,4170],{"class":309},[29,9516,9517],{"class":31,"line":1793},[29,9518,8750],{"class":367},[29,9520,9521,9523],{"class":31,"line":1799},[29,9522,7934],{"class":305},[29,9524,8757],{"class":35},[29,9526,9527],{"class":31,"line":1804},[29,9528,1722],{"class":309},[29,9530,9531],{"class":31,"line":1818},[29,9532,9533],{"class":309},"    string tName;\n",[29,9535,9536],{"class":31,"line":1823},[29,9537,9538],{"class":367},"    \u002F\u002F学生数组\n",[29,9540,9541,9543,9545,9548,9550],{"class":31,"line":1829},[29,9542,8070],{"class":305},[29,9544,8073],{"class":35},[29,9546,9547],{"class":309}," sArray[",[29,9549,627],{"class":39},[29,9551,4865],{"class":309},[29,9553,9554],{"class":31,"line":1850},[29,9555,4170],{"class":309},[29,9557,9558],{"class":31,"line":1855},[29,9559,9560],{"class":367},"\u002F\u002F给老师和学生赋值的函数\n",[29,9562,9563,9565,9568,9570,9572,9575,9578,9581,9583,9585],{"class":31,"line":1869},[29,9564,5539],{"class":305},[29,9566,9567],{"class":35}," allocateSpace",[29,9569,310],{"class":309},[29,9571,7934],{"class":305},[29,9573,9574],{"class":35}," Teacher",[29,9576,9577],{"class":5391}," tArray",[29,9579,9580],{"class":309},"[],",[29,9582,313],{"class":305},[29,9584,7506],{"class":5391},[29,9586,316],{"class":309},[29,9588,9589],{"class":31,"line":1874},[29,9590,1722],{"class":309},[29,9592,9593,9596,9598,9601],{"class":31,"line":1903},[29,9594,9595],{"class":309},"    string nameSeed",[29,9597,355],{"class":305},[29,9599,9600],{"class":103},"\"ABCDE\"",[29,9602,1468],{"class":309},[29,9604,9605,9607,9609,9611,9614,9616,9618,9621,9623,9626,9628],{"class":31,"line":1908},[29,9606,3376],{"class":305},[29,9608,1834],{"class":309},[29,9610,313],{"class":305},[29,9612,9613],{"class":309}," i ",[29,9615,355],{"class":305},[29,9617,4268],{"class":39},[29,9619,9620],{"class":309},"; i ",[29,9622,1218],{"class":305},[29,9624,9625],{"class":309}," len; i",[29,9627,2467],{"class":305},[29,9629,316],{"class":309},[29,9631,9632],{"class":31,"line":1925},[29,9633,2205],{"class":309},[29,9635,9636,9639,9641,9644],{"class":31,"line":1930},[29,9637,9638],{"class":309},"        tArray[i].tName ",[29,9640,355],{"class":305},[29,9642,9643],{"class":103}," \"Teacher_\"",[29,9645,1468],{"class":309},[29,9647,9648,9650,9653],{"class":31,"line":1935},[29,9649,9638],{"class":309},[29,9651,9652],{"class":305},"+=",[29,9654,9655],{"class":309},"nameSeed[i];\n",[29,9657,9658],{"class":31,"line":1940},[29,9659,2575],{"emptyLinePlaceholder":233},[29,9661,9662],{"class":31,"line":1954},[29,9663,9664],{"class":367},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[29,9666,9667,9669,9671,9673,9676,9678,9680,9683,9685,9687,9690,9692],{"class":31,"line":1959},[29,9668,3578],{"class":305},[29,9670,1834],{"class":309},[29,9672,313],{"class":305},[29,9674,9675],{"class":309}," j ",[29,9677,355],{"class":305},[29,9679,4268],{"class":39},[29,9681,9682],{"class":309},"; j ",[29,9684,1218],{"class":305},[29,9686,2323],{"class":39},[29,9688,9689],{"class":309},"; j",[29,9691,2467],{"class":305},[29,9693,316],{"class":309},[29,9695,9696],{"class":31,"line":2752},[29,9697,2685],{"class":309},[29,9699,9700,9703,9705,9708],{"class":31,"line":2766},[29,9701,9702],{"class":309},"            tArray[i].sArray[j].sName ",[29,9704,355],{"class":305},[29,9706,9707],{"class":103}," \"Student_\"",[29,9709,1468],{"class":309},[29,9711,9712,9714,9716],{"class":31,"line":2774},[29,9713,9702],{"class":309},[29,9715,9652],{"class":305},[29,9717,9718],{"class":309}," nameSeed[j];\n",[29,9720,9721,9724,9727,9729,9731,9733,9735,9737,9739,9741,9743],{"class":31,"line":2779},[29,9722,9723],{"class":305},"            int",[29,9725,9726],{"class":309}," random",[29,9728,355],{"class":305},[29,9730,2599],{"class":35},[29,9732,2602],{"class":309},[29,9734,636],{"class":305},[29,9736,1215],{"class":39},[29,9738,789],{"class":305},[29,9740,709],{"class":39},[29,9742,364],{"class":309},[29,9744,9745],{"class":367},"\u002F\u002F40~99\n",[29,9747,9748,9751,9753,9755],{"class":31,"line":2785},[29,9749,9750],{"class":309},"            tArray[i].sArray[j].age ",[29,9752,355],{"class":305},[29,9754,9125],{"class":39},[29,9756,1468],{"class":309},[29,9758,9759,9762,9764],{"class":31,"line":2791},[29,9760,9761],{"class":309},"            tArray[i].sArray[j].score ",[29,9763,355],{"class":305},[29,9765,9766],{"class":309}," random;\n",[29,9768,9769],{"class":31,"line":2796},[29,9770,2704],{"class":309},[29,9772,9773],{"class":31,"line":8123},[29,9774,2362],{"class":309},[29,9776,9777],{"class":31,"line":8147},[29,9778,1741],{"class":309},[29,9780,9781],{"class":31,"line":8152},[29,9782,9783],{"class":367},"\u002F\u002F打印所有信息的函数\n",[29,9785,9786,9788,9791,9793,9795,9797,9799,9802,9804,9806],{"class":31,"line":8158},[29,9787,5539],{"class":305},[29,9789,9790],{"class":35}," printInfo",[29,9792,310],{"class":309},[29,9794,7934],{"class":305},[29,9796,9574],{"class":35},[29,9798,9577],{"class":5391},[29,9800,9801],{"class":309},"[], ",[29,9803,313],{"class":305},[29,9805,7506],{"class":5391},[29,9807,316],{"class":309},[29,9809,9810],{"class":31,"line":8185},[29,9811,1722],{"class":309},[29,9813,9814,9816,9818,9820,9822,9824,9826,9828,9830,9832,9834],{"class":31,"line":8190},[29,9815,3376],{"class":305},[29,9817,1834],{"class":309},[29,9819,313],{"class":305},[29,9821,9613],{"class":309},[29,9823,355],{"class":305},[29,9825,4268],{"class":39},[29,9827,9620],{"class":309},[29,9829,1218],{"class":305},[29,9831,9625],{"class":309},[29,9833,2467],{"class":305},[29,9835,316],{"class":309},[29,9837,9838],{"class":31,"line":8196},[29,9839,2205],{"class":309},[29,9841,9842,9845,9847,9850,9852,9855,9857],{"class":31,"line":8208},[29,9843,9844],{"class":309},"        cout ",[29,9846,1351],{"class":305},[29,9848,9849],{"class":103}," \"Teacher: \"",[29,9851,1620],{"class":305},[29,9853,9854],{"class":309}," tArray[i].tName ",[29,9856,1351],{"class":305},[29,9858,9015],{"class":309},[29,9860,9861,9863,9865,9867,9869,9871,9873,9875,9877,9879,9881,9883],{"class":31,"line":8220},[29,9862,3578],{"class":305},[29,9864,1834],{"class":309},[29,9866,313],{"class":305},[29,9868,9675],{"class":309},[29,9870,355],{"class":305},[29,9872,4268],{"class":39},[29,9874,9682],{"class":309},[29,9876,1218],{"class":305},[29,9878,2323],{"class":39},[29,9880,9689],{"class":309},[29,9882,2467],{"class":305},[29,9884,316],{"class":309},[29,9886,9887],{"class":31,"line":8232},[29,9888,2685],{"class":309},[29,9890,9892,9895,9897,9900,9902,9905,9907,9910,9912],{"class":31,"line":9891},47,[29,9893,9894],{"class":309},"            cout ",[29,9896,1351],{"class":305},[29,9898,9899],{"class":103}," \"",[29,9901,1408],{"class":39},[29,9903,9904],{"class":103},"Student: \"",[29,9906,1620],{"class":305},[29,9908,9909],{"class":309}," tArray[i].sArray[j].sName",[29,9911,1351],{"class":305},[29,9913,1373],{"class":309},[29,9915,9917,9919,9921,9923,9925,9928,9930,9933,9935],{"class":31,"line":9916},48,[29,9918,9894],{"class":309},[29,9920,1351],{"class":305},[29,9922,9899],{"class":103},[29,9924,1408],{"class":39},[29,9926,9927],{"class":103},"Age: \"",[29,9929,1620],{"class":305},[29,9931,9932],{"class":309}," tArray[i].sArray[j].age ",[29,9934,1351],{"class":305},[29,9936,9015],{"class":309},[29,9938,9940,9942,9944,9946,9948,9951,9953,9956,9958],{"class":31,"line":9939},49,[29,9941,9894],{"class":309},[29,9943,1351],{"class":305},[29,9945,9899],{"class":103},[29,9947,1408],{"class":39},[29,9949,9950],{"class":103},"Score: \"",[29,9952,1620],{"class":305},[29,9954,9955],{"class":309}," tArray[i].sArray[j].score ",[29,9957,1351],{"class":305},[29,9959,9960],{"class":309}," endl;   \n",[29,9962,9964],{"class":31,"line":9963},50,[29,9965,2704],{"class":309},[29,9967,9969],{"class":31,"line":9968},51,[29,9970,2362],{"class":309},[29,9972,9974],{"class":31,"line":9973},52,[29,9975,1741],{"class":309},[29,9977,9979,9981,9983],{"class":31,"line":9978},53,[29,9980,313],{"class":305},[29,9982,2148],{"class":35},[29,9984,2151],{"class":309},[29,9986,9988],{"class":31,"line":9987},54,[29,9989,1722],{"class":309},[29,9991,9993],{"class":31,"line":9992},55,[29,9994,9995],{"class":367},"    \u002F\u002F随机数种子\n",[29,9997,9999,10001,10003,10005,10007,10009,10011,10013,10015],{"class":31,"line":9998},56,[29,10000,2548],{"class":35},[29,10002,2551],{"class":309},[29,10004,2554],{"class":305},[29,10006,2557],{"class":305},[29,10008,737],{"class":309},[29,10010,2562],{"class":35},[29,10012,310],{"class":309},[29,10014,2567],{"class":39},[29,10016,2570],{"class":309},[29,10018,10020],{"class":31,"line":10019},57,[29,10021,10022],{"class":367},"    \u002F\u002F1.创建3名老师的数组\n",[29,10024,10026,10028,10030,10033,10035],{"class":31,"line":10025},58,[29,10027,8070],{"class":305},[29,10029,9574],{"class":35},[29,10031,10032],{"class":309}," tArray[",[29,10034,380],{"class":39},[29,10036,4865],{"class":309},[29,10038,10040],{"class":31,"line":10039},59,[29,10041,10042],{"class":367},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[29,10044,10046,10048,10051,10053,10056,10059,10061,10063,10066,10068],{"class":31,"line":10045},60,[29,10047,2160],{"class":305},[29,10049,10050],{"class":309}," len ",[29,10052,355],{"class":305},[29,10054,10055],{"class":305}," sizeof",[29,10057,10058],{"class":309},"(tArray) ",[29,10060,892],{"class":305},[29,10062,10055],{"class":305},[29,10064,10065],{"class":309},"(tArray[",[29,10067,499],{"class":39},[29,10069,4031],{"class":309},[29,10071,10073,10076],{"class":31,"line":10072},61,[29,10074,10075],{"class":35},"    allocateSpace",[29,10077,10078],{"class":309},"(tArray, len);\n",[29,10080,10082],{"class":31,"line":10081},62,[29,10083,10084],{"class":367},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[29,10086,10088,10091],{"class":31,"line":10087},63,[29,10089,10090],{"class":35},"    printInfo",[29,10092,10078],{"class":309},[29,10094,10096],{"class":31,"line":10095},64,[29,10097,2575],{"emptyLinePlaceholder":233},[29,10099,10101],{"class":31,"line":10100},65,[29,10102,1741],{"class":309},[259,10104,10105],{"start":43},[178,10106,10107,10110],{},[457,10108,10109],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[171,10112,10113],{},"五名英雄信息如下：",[19,10115,10119],{"className":10116,"code":10117,"language":10118,"meta":24,"style":24},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[26,10120,10121,10139,10156,10173,10190],{"__ignoreMap":24},[29,10122,10123,10125,10128,10130,10132,10134,10137],{"class":31,"line":32},[29,10124,5092],{"class":309},[29,10126,10127],{"class":103},"\"刘备\"",[29,10129,686],{"class":309},[29,10131,1083],{"class":39},[29,10133,686],{"class":309},[29,10135,10136],{"class":103},"\"男\"",[29,10138,5105],{"class":309},[29,10140,10141,10143,10146,10148,10150,10152,10154],{"class":31,"line":43},[29,10142,5092],{"class":309},[29,10144,10145],{"class":103},"\"关羽\"",[29,10147,686],{"class":309},[29,10149,1058],{"class":39},[29,10151,686],{"class":309},[29,10153,10136],{"class":103},[29,10155,5105],{"class":309},[29,10157,10158,10160,10163,10165,10167,10169,10171],{"class":31,"line":51},[29,10159,5092],{"class":309},[29,10161,10162],{"class":103},"\"张飞\"",[29,10164,686],{"class":309},[29,10166,1008],{"class":39},[29,10168,686],{"class":309},[29,10170,10136],{"class":103},[29,10172,5105],{"class":309},[29,10174,10175,10177,10180,10182,10184,10186,10188],{"class":31,"line":59},[29,10176,5092],{"class":309},[29,10178,10179],{"class":103},"\"赵云\"",[29,10181,686],{"class":309},[29,10183,1033],{"class":39},[29,10185,686],{"class":309},[29,10187,10136],{"class":103},[29,10189,5105],{"class":309},[29,10191,10192,10194,10197,10199,10201,10203,10206],{"class":31,"line":67},[29,10193,5092],{"class":309},[29,10195,10196],{"class":103},"\"貂蝉\"",[29,10198,686],{"class":309},[29,10200,983],{"class":39},[29,10202,686],{"class":309},[29,10204,10205],{"class":103},"\"女\"",[29,10207,5105],{"class":309},[171,10209,10210],{},"代码：",[19,10212,10214],{"className":296,"code":10213,"language":298,"meta":24,"style":24},"#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",[26,10215,10216,10222,10232,10238,10245,10249,10253,10259,10264,10268,10273,10296,10300,10325,10329,10362,10367,10396,10401,10416,10442,10462,10467,10472,10476,10480,10485,10507,10511,10535,10539,10601,10605,10609,10617,10621,10626,10637,10641,10657,10673,10689,10705,10721,10725,10745,10767,10772,10785,10792,10797,10803,10808,10821,10827],{"__ignoreMap":24},[29,10217,10218,10220],{"class":31,"line":32},[29,10219,2125],{"class":305},[29,10221,2128],{"class":103},[29,10223,10224,10226,10228,10230],{"class":31,"line":43},[29,10225,2133],{"class":305},[29,10227,2136],{"class":305},[29,10229,2139],{"class":35},[29,10231,1468],{"class":309},[29,10233,10234,10236],{"class":31,"line":51},[29,10235,2125],{"class":305},[29,10237,7924],{"class":103},[29,10239,10240,10242],{"class":31,"line":59},[29,10241,7934],{"class":305},[29,10243,10244],{"class":35}," Sanguo\n",[29,10246,10247],{"class":31,"line":67},[29,10248,1722],{"class":309},[29,10250,10251],{"class":31,"line":75},[29,10252,7960],{"class":309},[29,10254,10255,10257],{"class":31,"line":83},[29,10256,2160],{"class":305},[29,10258,7972],{"class":309},[29,10260,10261],{"class":31,"line":158},[29,10262,10263],{"class":309},"    string gender;\n",[29,10265,10266],{"class":31,"line":166},[29,10267,4170],{"class":309},[29,10269,10270],{"class":31,"line":1505},[29,10271,10272],{"class":367},"\u002F\u002F定义排序函数\n",[29,10274,10275,10277,10279,10281,10284,10286,10288,10290,10292,10294],{"class":31,"line":1788},[29,10276,5539],{"class":305},[29,10278,7491],{"class":35},[29,10280,310],{"class":309},[29,10282,10283],{"class":35},"Sanguo",[29,10285,6693],{"class":305},[29,10287,1003],{"class":5391},[29,10289,686],{"class":309},[29,10291,313],{"class":305},[29,10293,7506],{"class":5391},[29,10295,316],{"class":309},[29,10297,10298],{"class":31,"line":1793},[29,10299,1722],{"class":309},[29,10301,10302,10304,10306,10308,10310,10312,10314,10316,10318,10321,10323],{"class":31,"line":1799},[29,10303,3376],{"class":305},[29,10305,310],{"class":309},[29,10307,313],{"class":305},[29,10309,3207],{"class":309},[29,10311,355],{"class":305},[29,10313,499],{"class":39},[29,10315,3214],{"class":309},[29,10317,1218],{"class":305},[29,10319,10320],{"class":309},"len;i",[29,10322,2467],{"class":305},[29,10324,316],{"class":309},[29,10326,10327],{"class":31,"line":1804},[29,10328,2205],{"class":309},[29,10330,10331,10334,10336,10338,10340,10342,10344,10346,10348,10350,10352,10354,10356,10358,10360],{"class":31,"line":1818},[29,10332,10333],{"class":305},"     for",[29,10335,1834],{"class":309},[29,10337,313],{"class":305},[29,10339,3585],{"class":309},[29,10341,355],{"class":305},[29,10343,499],{"class":39},[29,10345,3592],{"class":309},[29,10347,1218],{"class":305},[29,10349,7533],{"class":309},[29,10351,840],{"class":305},[29,10353,525],{"class":39},[29,10355,840],{"class":305},[29,10357,3725],{"class":309},[29,10359,2467],{"class":305},[29,10361,316],{"class":309},[29,10363,10364],{"class":31,"line":1823},[29,10365,10366],{"class":309},"     {\n",[29,10368,10369,10372,10375,10377,10380,10382,10385,10387,10389,10391,10393],{"class":31,"line":1829},[29,10370,10371],{"class":305},"         if",[29,10373,10374],{"class":309}," ((s",[29,10376,789],{"class":305},[29,10378,10379],{"class":309},"j)->age ",[29,10381,1268],{"class":305},[29,10383,10384],{"class":309}," (s",[29,10386,789],{"class":305},[29,10388,775],{"class":309},[29,10390,789],{"class":305},[29,10392,525],{"class":39},[29,10394,10395],{"class":309},")->age)\n",[29,10397,10398],{"class":31,"line":1850},[29,10399,10400],{"class":309},"         {\n",[29,10402,10403,10406,10408,10411,10413],{"class":31,"line":1855},[29,10404,10405],{"class":309},"             Sanguo temp",[29,10407,7328],{"class":305},[29,10409,10410],{"class":309},"(s",[29,10412,789],{"class":305},[29,10414,10415],{"class":309},"j);\n",[29,10417,10418,10421,10423,10425,10428,10430,10432,10434,10436,10438,10440],{"class":31,"line":1869},[29,10419,10420],{"class":305},"             *",[29,10422,10410],{"class":309},[29,10424,789],{"class":305},[29,10426,10427],{"class":309},"j)",[29,10429,7328],{"class":305},[29,10431,10410],{"class":309},[29,10433,789],{"class":305},[29,10435,775],{"class":309},[29,10437,789],{"class":305},[29,10439,525],{"class":39},[29,10441,2894],{"class":309},[29,10443,10444,10446,10448,10450,10452,10454,10456,10458,10460],{"class":31,"line":1874},[29,10445,10420],{"class":305},[29,10447,10410],{"class":309},[29,10449,789],{"class":305},[29,10451,775],{"class":309},[29,10453,789],{"class":305},[29,10455,525],{"class":39},[29,10457,737],{"class":309},[29,10459,355],{"class":305},[29,10461,4455],{"class":309},[29,10463,10464],{"class":31,"line":1903},[29,10465,10466],{"class":309},"         }\n",[29,10468,10469],{"class":31,"line":1908},[29,10470,10471],{"class":309},"     }\n",[29,10473,10474],{"class":31,"line":1925},[29,10475,2362],{"class":309},[29,10477,10478],{"class":31,"line":1930},[29,10479,1741],{"class":309},[29,10481,10482],{"class":31,"line":1935},[29,10483,10484],{"class":367},"\u002F\u002F定义打印函数\n",[29,10486,10487,10489,10491,10493,10495,10497,10499,10501,10503,10505],{"class":31,"line":1940},[29,10488,5539],{"class":305},[29,10490,9790],{"class":35},[29,10492,310],{"class":309},[29,10494,10283],{"class":35},[29,10496,6693],{"class":305},[29,10498,1003],{"class":5391},[29,10500,686],{"class":309},[29,10502,313],{"class":305},[29,10504,7506],{"class":5391},[29,10506,316],{"class":309},[29,10508,10509],{"class":31,"line":1954},[29,10510,1722],{"class":309},[29,10512,10513,10515,10517,10519,10521,10523,10525,10527,10529,10531,10533],{"class":31,"line":1959},[29,10514,3376],{"class":305},[29,10516,1834],{"class":309},[29,10518,313],{"class":305},[29,10520,3207],{"class":309},[29,10522,355],{"class":305},[29,10524,499],{"class":39},[29,10526,3214],{"class":309},[29,10528,1218],{"class":305},[29,10530,10320],{"class":309},[29,10532,2467],{"class":305},[29,10534,316],{"class":309},[29,10536,10537],{"class":31,"line":2752},[29,10538,2205],{"class":309},[29,10540,10541,10543,10545,10547,10549,10552,10554,10556,10558,10561,10563,10565,10567,10570,10572,10574,10576,10579,10581,10583,10585,10588,10590,10592,10594,10597,10599],{"class":31,"line":2766},[29,10542,3626],{"class":309},[29,10544,1351],{"class":305},[29,10546,559],{"class":103},[29,10548,1408],{"class":39},[29,10550,10551],{"class":103},"姓名：\"",[29,10553,1351],{"class":305},[29,10555,10410],{"class":309},[29,10557,789],{"class":305},[29,10559,10560],{"class":309},"i)->name",[29,10562,1351],{"class":305},[29,10564,559],{"class":103},[29,10566,1408],{"class":39},[29,10568,10569],{"class":103},"年龄：\"",[29,10571,1351],{"class":305},[29,10573,10410],{"class":309},[29,10575,789],{"class":305},[29,10577,10578],{"class":309},"i)->age",[29,10580,1351],{"class":305},[29,10582,559],{"class":103},[29,10584,1408],{"class":39},[29,10586,10587],{"class":103},"性别：\"",[29,10589,1351],{"class":305},[29,10591,10410],{"class":309},[29,10593,789],{"class":305},[29,10595,10596],{"class":309},"i)->gender",[29,10598,1351],{"class":305},[29,10600,1373],{"class":309},[29,10602,10603],{"class":31,"line":2774},[29,10604,2362],{"class":309},[29,10606,10607],{"class":31,"line":2779},[29,10608,1741],{"class":309},[29,10610,10611,10613,10615],{"class":31,"line":2785},[29,10612,313],{"class":305},[29,10614,2148],{"class":35},[29,10616,2151],{"class":309},[29,10618,10619],{"class":31,"line":2791},[29,10620,1722],{"class":309},[29,10622,10623],{"class":31,"line":2796},[29,10624,10625],{"class":367},"    \u002F\u002F定义结构体变量\n",[29,10627,10628,10631,10633,10635],{"class":31,"line":8123},[29,10629,10630],{"class":309},"    Sanguo s1[",[29,10632,627],{"class":39},[29,10634,1248],{"class":309},[29,10636,5083],{"class":305},[29,10638,10639],{"class":31,"line":8147},[29,10640,2205],{"class":309},[29,10642,10643,10645,10647,10649,10651,10653,10655],{"class":31,"line":8152},[29,10644,5092],{"class":309},[29,10646,10127],{"class":103},[29,10648,686],{"class":309},[29,10650,1083],{"class":39},[29,10652,686],{"class":309},[29,10654,10136],{"class":103},[29,10656,5105],{"class":309},[29,10658,10659,10661,10663,10665,10667,10669,10671],{"class":31,"line":8158},[29,10660,5092],{"class":309},[29,10662,10145],{"class":103},[29,10664,686],{"class":309},[29,10666,1058],{"class":39},[29,10668,686],{"class":309},[29,10670,10136],{"class":103},[29,10672,5105],{"class":309},[29,10674,10675,10677,10679,10681,10683,10685,10687],{"class":31,"line":8185},[29,10676,5092],{"class":309},[29,10678,10162],{"class":103},[29,10680,686],{"class":309},[29,10682,1008],{"class":39},[29,10684,686],{"class":309},[29,10686,10136],{"class":103},[29,10688,5105],{"class":309},[29,10690,10691,10693,10695,10697,10699,10701,10703],{"class":31,"line":8190},[29,10692,5092],{"class":309},[29,10694,10179],{"class":103},[29,10696,686],{"class":309},[29,10698,1033],{"class":39},[29,10700,686],{"class":309},[29,10702,10136],{"class":103},[29,10704,5105],{"class":309},[29,10706,10707,10709,10711,10713,10715,10717,10719],{"class":31,"line":8196},[29,10708,5092],{"class":309},[29,10710,10196],{"class":103},[29,10712,686],{"class":309},[29,10714,983],{"class":39},[29,10716,686],{"class":309},[29,10718,10205],{"class":103},[29,10720,5105],{"class":309},[29,10722,10723],{"class":31,"line":8208},[29,10724,5126],{"class":309},[29,10726,10727,10729,10731,10733,10736,10738,10741,10743],{"class":31,"line":8220},[29,10728,2160],{"class":305},[29,10730,7506],{"class":309},[29,10732,4378],{"class":305},[29,10734,10735],{"class":309},"(s1)",[29,10737,4384],{"class":305},[29,10739,10740],{"class":309},"(s1[",[29,10742,499],{"class":39},[29,10744,4031],{"class":309},[29,10746,10747,10750,10752,10755,10757,10760,10763,10765],{"class":31,"line":8232},[29,10748,10749],{"class":309},"    Sanguo ",[29,10751,763],{"class":305},[29,10753,10754],{"class":309},"s ",[29,10756,355],{"class":305},[29,10758,10759],{"class":305}," &",[29,10761,10762],{"class":309},"s1[",[29,10764,499],{"class":39},[29,10766,4865],{"class":309},[29,10768,10769],{"class":31,"line":9891},[29,10770,10771],{"class":367},"    \u002F\u002F排序前：\n",[29,10773,10774,10776,10778,10781,10783],{"class":31,"line":9916},[29,10775,6704],{"class":309},[29,10777,1351],{"class":305},[29,10779,10780],{"class":103}," \"排序前：\"",[29,10782,1620],{"class":305},[29,10784,9015],{"class":309},[29,10786,10787,10789],{"class":31,"line":9939},[29,10788,10090],{"class":35},[29,10790,10791],{"class":309},"(s,len);\n",[29,10793,10794],{"class":31,"line":9963},[29,10795,10796],{"class":367},"    \u002F\u002F调用排序函数\n",[29,10798,10799,10801],{"class":31,"line":9968},[29,10800,7773],{"class":35},[29,10802,10791],{"class":309},[29,10804,10805],{"class":31,"line":9973},[29,10806,10807],{"class":367},"    \u002F\u002F排序后\n",[29,10809,10810,10812,10814,10817,10819],{"class":31,"line":9978},[29,10811,6704],{"class":309},[29,10813,1351],{"class":305},[29,10815,10816],{"class":103}," \"排序后：\"",[29,10818,1620],{"class":305},[29,10820,9015],{"class":309},[29,10822,10823,10825],{"class":31,"line":9987},[29,10824,10090],{"class":35},[29,10826,10791],{"class":309},[29,10828,10829],{"class":31,"line":9992},[29,10830,1741],{"class":309},[171,10832,10833,10834,10836],{},"注意：使用指针时直接用传首地址**&s",[29,10835,499],{},"**",[223,10838,10839],{},"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":24,"searchDepth":43,"depth":43,"links":10841},[10842,10843,10844,10845,10846,10847,10848],{"id":7878,"depth":43,"text":7879},{"id":8240,"depth":43,"text":8241},{"id":8509,"depth":43,"text":8510},{"id":8674,"depth":43,"text":8675},{"id":8890,"depth":43,"text":8891},{"id":9211,"depth":43,"text":9212},{"id":9439,"depth":43,"text":9440},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7867,"description":7875},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10855,"title":10856,"body":10857,"description":24,"extension":231,"meta":12200,"navigation":233,"path":12201,"seo":12202,"stem":12203,"__hash__":12204},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10858,"toc":12194},[10859,10862,10866,10872,10886,10891,10894,10898,10905,10911,10914,10921,10927,10932,10935,10938,10941,11505,11508,11522,11526,11531,11547,11687,11690,11696,11699,11704,11712,11820,11823,11828,11831,11836,11839,11845,11848,12191],[10,10860,10856],{"id":10861},"_5程序内存模型",[14,10863,10865],{"id":10864},"_51内存分区模型","5.1内存分区模型",[171,10867,10868,10869],{},"C++程序在执行时，将内存大方向划分为",[457,10870,10871],{},"4个区域",[175,10873,10874,10877,10880,10883],{},[178,10875,10876],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[178,10878,10879],{},"全局区：存放全局变量和静态变量以及常量",[178,10881,10882],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[178,10884,10885],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[171,10887,10888],{},[457,10889,10890],{},"内存四区意义：",[171,10892,10893],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[275,10895,10897],{"id":10896},"_511程序运行前","5.1.1程序运行前",[171,10899,10900,10901,10904],{},"​\t在程序编译后，生成了exe可执行程序，",[457,10902,10903],{},"未执行该程序前","分为两个区域",[171,10906,10907,10908],{},"​\t",[457,10909,10910],{},"代码区：",[171,10912,10913],{},"​\t\t存放 CPU 执行的机器指令",[171,10915,10916,10917,10920],{},"​\t\t代码区是",[457,10918,10919],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[171,10922,10916,10923,10926],{},[457,10924,10925],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[171,10928,10907,10929],{},[457,10930,10931],{},"全局区：",[171,10933,10934],{},"​\t\t全局变量和静态变量存放在此.",[171,10936,10937],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[171,10939,10940],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[19,10942,10944],{"className":296,"code":10943,"language":298,"meta":24,"style":24},"\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",[26,10945,10946,10951,10964,10977,10981,10986,11001,11016,11020,11029,11033,11038,11051,11064,11068,11073,11099,11125,11129,11156,11182,11186,11191,11207,11222,11226,11252,11278,11282,11307,11332,11336,11362,11388,11392,11408,11423,11449,11475,11479,11489,11493,11501],{"__ignoreMap":24},[29,10947,10948],{"class":31,"line":32},[29,10949,10950],{"class":367},"\u002F\u002F全局变量\n",[29,10952,10953,10955,10958,10960,10962],{"class":31,"line":43},[29,10954,313],{"class":305},[29,10956,10957],{"class":309}," g_a ",[29,10959,355],{"class":305},[29,10961,2213],{"class":39},[29,10963,1468],{"class":309},[29,10965,10966,10968,10971,10973,10975],{"class":31,"line":51},[29,10967,313],{"class":305},[29,10969,10970],{"class":309}," g_b ",[29,10972,355],{"class":305},[29,10974,2213],{"class":39},[29,10976,1468],{"class":309},[29,10978,10979],{"class":31,"line":59},[29,10980,2575],{"emptyLinePlaceholder":233},[29,10982,10983],{"class":31,"line":67},[29,10984,10985],{"class":367},"\u002F\u002F全局常量\n",[29,10987,10988,10990,10992,10995,10997,10999],{"class":31,"line":75},[29,10989,6967],{"class":305},[29,10991,2557],{"class":305},[29,10993,10994],{"class":309}," c_g_a ",[29,10996,355],{"class":305},[29,10998,2213],{"class":39},[29,11000,1468],{"class":309},[29,11002,11003,11005,11007,11010,11012,11014],{"class":31,"line":83},[29,11004,6967],{"class":305},[29,11006,2557],{"class":305},[29,11008,11009],{"class":309}," c_g_b ",[29,11011,355],{"class":305},[29,11013,2213],{"class":39},[29,11015,1468],{"class":309},[29,11017,11018],{"class":31,"line":158},[29,11019,2575],{"emptyLinePlaceholder":233},[29,11021,11022,11024,11026],{"class":31,"line":166},[29,11023,313],{"class":305},[29,11025,2148],{"class":35},[29,11027,11028],{"class":309},"() {\n",[29,11030,11031],{"class":31,"line":1505},[29,11032,2575],{"emptyLinePlaceholder":233},[29,11034,11035],{"class":31,"line":1788},[29,11036,11037],{"class":367},"    \u002F\u002F局部变量\n",[29,11039,11040,11042,11045,11047,11049],{"class":31,"line":1793},[29,11041,2160],{"class":305},[29,11043,11044],{"class":309}," a ",[29,11046,355],{"class":305},[29,11048,2213],{"class":39},[29,11050,1468],{"class":309},[29,11052,11053,11055,11058,11060,11062],{"class":31,"line":1799},[29,11054,2160],{"class":305},[29,11056,11057],{"class":309}," b ",[29,11059,355],{"class":305},[29,11061,2213],{"class":39},[29,11063,1468],{"class":309},[29,11065,11066],{"class":31,"line":1804},[29,11067,2575],{"emptyLinePlaceholder":233},[29,11069,11070],{"class":31,"line":1818},[29,11071,11072],{"class":367},"    \u002F\u002F打印地址\n",[29,11074,11075,11077,11079,11082,11084,11086,11088,11090,11092,11095,11097],{"class":31,"line":1823},[29,11076,6704],{"class":309},[29,11078,1351],{"class":305},[29,11080,11081],{"class":103}," \"局部变量a地址为： \"",[29,11083,1620],{"class":305},[29,11085,1834],{"class":309},[29,11087,313],{"class":305},[29,11089,737],{"class":309},[29,11091,661],{"class":305},[29,11093,11094],{"class":309},"a ",[29,11096,1351],{"class":305},[29,11098,9015],{"class":309},[29,11100,11101,11103,11105,11108,11110,11112,11114,11116,11118,11121,11123],{"class":31,"line":1829},[29,11102,6704],{"class":309},[29,11104,1351],{"class":305},[29,11106,11107],{"class":103}," \"局部变量b地址为： \"",[29,11109,1620],{"class":305},[29,11111,1834],{"class":309},[29,11113,313],{"class":305},[29,11115,737],{"class":309},[29,11117,661],{"class":305},[29,11119,11120],{"class":309},"b ",[29,11122,1351],{"class":305},[29,11124,9015],{"class":309},[29,11126,11127],{"class":31,"line":1850},[29,11128,2575],{"emptyLinePlaceholder":233},[29,11130,11131,11133,11135,11138,11140,11143,11145,11147,11149,11152,11154],{"class":31,"line":1855},[29,11132,6704],{"class":309},[29,11134,1351],{"class":305},[29,11136,11137],{"class":103}," \"全局变量g_a地址为： \"",[29,11139,1620],{"class":305},[29,11141,11142],{"class":309},"  (",[29,11144,313],{"class":305},[29,11146,737],{"class":309},[29,11148,661],{"class":305},[29,11150,11151],{"class":309},"g_a ",[29,11153,1351],{"class":305},[29,11155,9015],{"class":309},[29,11157,11158,11160,11162,11165,11167,11169,11171,11173,11175,11178,11180],{"class":31,"line":1869},[29,11159,6704],{"class":309},[29,11161,1351],{"class":305},[29,11163,11164],{"class":103}," \"全局变量g_b地址为： \"",[29,11166,1620],{"class":305},[29,11168,11142],{"class":309},[29,11170,313],{"class":305},[29,11172,737],{"class":309},[29,11174,661],{"class":305},[29,11176,11177],{"class":309},"g_b ",[29,11179,1351],{"class":305},[29,11181,9015],{"class":309},[29,11183,11184],{"class":31,"line":1874},[29,11185,2575],{"emptyLinePlaceholder":233},[29,11187,11188],{"class":31,"line":1903},[29,11189,11190],{"class":367},"    \u002F\u002F静态变量\n",[29,11192,11193,11196,11198,11201,11203,11205],{"class":31,"line":1908},[29,11194,11195],{"class":305},"    static",[29,11197,2557],{"class":305},[29,11199,11200],{"class":309}," s_a ",[29,11202,355],{"class":305},[29,11204,2213],{"class":39},[29,11206,1468],{"class":309},[29,11208,11209,11211,11213,11216,11218,11220],{"class":31,"line":1925},[29,11210,11195],{"class":305},[29,11212,2557],{"class":305},[29,11214,11215],{"class":309}," s_b ",[29,11217,355],{"class":305},[29,11219,2213],{"class":39},[29,11221,1468],{"class":309},[29,11223,11224],{"class":31,"line":1930},[29,11225,2575],{"emptyLinePlaceholder":233},[29,11227,11228,11230,11232,11235,11237,11239,11241,11243,11245,11248,11250],{"class":31,"line":1935},[29,11229,6704],{"class":309},[29,11231,1351],{"class":305},[29,11233,11234],{"class":103}," \"静态变量s_a地址为： \"",[29,11236,1620],{"class":305},[29,11238,1834],{"class":309},[29,11240,313],{"class":305},[29,11242,737],{"class":309},[29,11244,661],{"class":305},[29,11246,11247],{"class":309},"s_a ",[29,11249,1351],{"class":305},[29,11251,9015],{"class":309},[29,11253,11254,11256,11258,11261,11263,11265,11267,11269,11271,11274,11276],{"class":31,"line":1940},[29,11255,6704],{"class":309},[29,11257,1351],{"class":305},[29,11259,11260],{"class":103}," \"静态变量s_b地址为： \"",[29,11262,1620],{"class":305},[29,11264,1834],{"class":309},[29,11266,313],{"class":305},[29,11268,737],{"class":309},[29,11270,661],{"class":305},[29,11272,11273],{"class":309},"s_b ",[29,11275,1351],{"class":305},[29,11277,9015],{"class":309},[29,11279,11280],{"class":31,"line":1954},[29,11281,2575],{"emptyLinePlaceholder":233},[29,11283,11284,11286,11288,11291,11293,11295,11297,11299,11301,11303,11305],{"class":31,"line":1959},[29,11285,6704],{"class":309},[29,11287,1351],{"class":305},[29,11289,11290],{"class":103}," \"字符串常量地址为： \"",[29,11292,1620],{"class":305},[29,11294,1834],{"class":309},[29,11296,313],{"class":305},[29,11298,737],{"class":309},[29,11300,661],{"class":305},[29,11302,1368],{"class":103},[29,11304,1620],{"class":305},[29,11306,9015],{"class":309},[29,11308,11309,11311,11313,11315,11317,11319,11321,11323,11325,11328,11330],{"class":31,"line":2752},[29,11310,6704],{"class":309},[29,11312,1351],{"class":305},[29,11314,11290],{"class":103},[29,11316,1620],{"class":305},[29,11318,1834],{"class":309},[29,11320,313],{"class":305},[29,11322,737],{"class":309},[29,11324,661],{"class":305},[29,11326,11327],{"class":103},"\"hello world1\"",[29,11329,1620],{"class":305},[29,11331,9015],{"class":309},[29,11333,11334],{"class":31,"line":2766},[29,11335,2575],{"emptyLinePlaceholder":233},[29,11337,11338,11340,11342,11345,11347,11349,11351,11353,11355,11358,11360],{"class":31,"line":2774},[29,11339,6704],{"class":309},[29,11341,1351],{"class":305},[29,11343,11344],{"class":103}," \"全局常量c_g_a地址为： \"",[29,11346,1620],{"class":305},[29,11348,1834],{"class":309},[29,11350,313],{"class":305},[29,11352,737],{"class":309},[29,11354,661],{"class":305},[29,11356,11357],{"class":309},"c_g_a ",[29,11359,1351],{"class":305},[29,11361,9015],{"class":309},[29,11363,11364,11366,11368,11371,11373,11375,11377,11379,11381,11384,11386],{"class":31,"line":2779},[29,11365,6704],{"class":309},[29,11367,1351],{"class":305},[29,11369,11370],{"class":103}," \"全局常量c_g_b地址为： \"",[29,11372,1620],{"class":305},[29,11374,1834],{"class":309},[29,11376,313],{"class":305},[29,11378,737],{"class":309},[29,11380,661],{"class":305},[29,11382,11383],{"class":309},"c_g_b ",[29,11385,1351],{"class":305},[29,11387,9015],{"class":309},[29,11389,11390],{"class":31,"line":2785},[29,11391,2575],{"emptyLinePlaceholder":233},[29,11393,11394,11397,11399,11402,11404,11406],{"class":31,"line":2791},[29,11395,11396],{"class":305},"    const",[29,11398,2557],{"class":305},[29,11400,11401],{"class":309}," c_l_a ",[29,11403,355],{"class":305},[29,11405,2213],{"class":39},[29,11407,1468],{"class":309},[29,11409,11410,11412,11414,11417,11419,11421],{"class":31,"line":2796},[29,11411,11396],{"class":305},[29,11413,2557],{"class":305},[29,11415,11416],{"class":309}," c_l_b ",[29,11418,355],{"class":305},[29,11420,2213],{"class":39},[29,11422,1468],{"class":309},[29,11424,11425,11427,11429,11432,11434,11436,11438,11440,11442,11445,11447],{"class":31,"line":8123},[29,11426,6704],{"class":309},[29,11428,1351],{"class":305},[29,11430,11431],{"class":103}," \"局部常量c_l_a地址为： \"",[29,11433,1620],{"class":305},[29,11435,1834],{"class":309},[29,11437,313],{"class":305},[29,11439,737],{"class":309},[29,11441,661],{"class":305},[29,11443,11444],{"class":309},"c_l_a ",[29,11446,1351],{"class":305},[29,11448,9015],{"class":309},[29,11450,11451,11453,11455,11458,11460,11462,11464,11466,11468,11471,11473],{"class":31,"line":8147},[29,11452,6704],{"class":309},[29,11454,1351],{"class":305},[29,11456,11457],{"class":103}," \"局部常量c_l_b地址为： \"",[29,11459,1620],{"class":305},[29,11461,1834],{"class":309},[29,11463,313],{"class":305},[29,11465,737],{"class":309},[29,11467,661],{"class":305},[29,11469,11470],{"class":309},"c_l_b ",[29,11472,1351],{"class":305},[29,11474,9015],{"class":309},[29,11476,11477],{"class":31,"line":8152},[29,11478,2575],{"emptyLinePlaceholder":233},[29,11480,11481,11483,11485,11487],{"class":31,"line":8158},[29,11482,2478],{"class":35},[29,11484,310],{"class":309},[29,11486,2483],{"class":103},[29,11488,2894],{"class":309},[29,11490,11491],{"class":31,"line":8185},[29,11492,2575],{"emptyLinePlaceholder":233},[29,11494,11495,11497,11499],{"class":31,"line":8190},[29,11496,4265],{"class":305},[29,11498,4268],{"class":39},[29,11500,1468],{"class":309},[29,11502,11503],{"class":31,"line":8196},[29,11504,1741],{"class":309},[171,11506,11507],{},"总结：",[175,11509,11510,11513,11516,11519],{},[178,11511,11512],{},"c++中程序运行前分为全局区和代码区",[178,11514,11515],{},"代码区特点是共享和只读",[178,11517,11518],{},"全局区中存放全局变量、静态变量、常量",[178,11520,11521],{},"常量区中存放const修饰的全局常量和字符串常量",[275,11523,11525],{"id":11524},"_512程序运行后","5.1.2程序运行后",[259,11527,11528],{},[178,11529,11530],{},"栈区：",[175,11532,11533,11540],{},[178,11534,11535,11536,11539],{},"由编译器自动分配释放, 存放",[457,11537,11538],{},"函数的参数值,局部变量","等",[178,11541,11542,11543,11546],{},"注意事项：",[457,11544,11545],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[19,11548,11550],{"className":296,"code":11549,"language":298,"meta":24,"style":24},"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",[26,11551,11552,11563,11567,11582,11594,11598,11602,11610,11615,11630,11648,11665,11675,11683],{"__ignoreMap":24},[29,11553,11554,11556,11558,11561],{"class":31,"line":32},[29,11555,313],{"class":305},[29,11557,6693],{"class":305},[29,11559,11560],{"class":35}," func",[29,11562,2151],{"class":309},[29,11564,11565],{"class":31,"line":43},[29,11566,1722],{"class":309},[29,11568,11569,11571,11573,11575,11577,11579],{"class":31,"line":51},[29,11570,2160],{"class":305},[29,11572,11044],{"class":309},[29,11574,355],{"class":305},[29,11576,2213],{"class":39},[29,11578,364],{"class":309},[29,11580,11581],{"class":367}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[29,11583,11584,11586,11588,11591],{"class":31,"line":59},[29,11585,4265],{"class":305},[29,11587,10759],{"class":305},[29,11589,11590],{"class":309},"a;",[29,11592,11593],{"class":367}," \u002F\u002F放回局部变量的地址\n",[29,11595,11596],{"class":31,"line":67},[29,11597,1741],{"class":309},[29,11599,11600],{"class":31,"line":75},[29,11601,2575],{"emptyLinePlaceholder":233},[29,11603,11604,11606,11608],{"class":31,"line":83},[29,11605,313],{"class":305},[29,11607,2148],{"class":35},[29,11609,11028],{"class":309},[29,11611,11612],{"class":31,"line":158},[29,11613,11614],{"class":367},"    \u002F\u002F接受func的返回值\n",[29,11616,11617,11619,11621,11624,11626,11628],{"class":31,"line":166},[29,11618,2160],{"class":305},[29,11620,6693],{"class":305},[29,11622,11623],{"class":309},"p ",[29,11625,355],{"class":305},[29,11627,11560],{"class":35},[29,11629,5811],{"class":309},[29,11631,11632,11634,11636,11638,11640,11642,11645],{"class":31,"line":1505},[29,11633,6704],{"class":309},[29,11635,1351],{"class":305},[29,11637,6693],{"class":305},[29,11639,11623],{"class":309},[29,11641,1351],{"class":305},[29,11643,11644],{"class":309}," endl;",[29,11646,11647],{"class":367}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[29,11649,11650,11652,11654,11656,11658,11660,11662],{"class":31,"line":1788},[29,11651,6704],{"class":309},[29,11653,1351],{"class":305},[29,11655,6693],{"class":305},[29,11657,11623],{"class":309},[29,11659,1351],{"class":305},[29,11661,11644],{"class":309},[29,11663,11664],{"class":367}," \u002F\u002F第二次这个数据不再保留\n",[29,11666,11667,11669,11671,11673],{"class":31,"line":1793},[29,11668,2478],{"class":35},[29,11670,310],{"class":309},[29,11672,2483],{"class":103},[29,11674,2894],{"class":309},[29,11676,11677,11679,11681],{"class":31,"line":1799},[29,11678,4265],{"class":305},[29,11680,4268],{"class":39},[29,11682,1468],{"class":309},[29,11684,11685],{"class":31,"line":1804},[29,11686,1741],{"class":309},[171,11688,11689],{},"输出结果：",[171,11691,11692],{},[1638,11693],{"alt":11694,"src":11695},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[171,11697,11698],{},"总结：不要返回局部变量的地址",[259,11700,11701],{"start":43},[178,11702,11703],{},"堆区",[175,11705,11706,11709],{},[178,11707,11708],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[178,11710,11711],{},"在c++中主要利用new在堆区开辟内存",[19,11713,11715],{"className":296,"code":11714,"language":298,"meta":24,"style":24},"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",[26,11716,11717,11732,11736,11741,11762,11769,11773,11781,11785,11790,11804,11816],{"__ignoreMap":24},[29,11718,11719,11721,11724,11727,11729],{"class":31,"line":32},[29,11720,313],{"class":305},[29,11722,11723],{"class":305},"  *",[29,11725,11726],{"class":35},"func",[29,11728,2602],{"class":309},[29,11730,11731],{"class":367},"  \u002F\u002F函数返回指针\n",[29,11733,11734],{"class":31,"line":43},[29,11735,1722],{"class":309},[29,11737,11738],{"class":31,"line":51},[29,11739,11740],{"class":367},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[29,11742,11743,11745,11747,11749,11751,11754,11756,11758,11760],{"class":31,"line":59},[29,11744,4322],{"class":305},[29,11746,6693],{"class":305},[29,11748,171],{"class":309},[29,11750,355],{"class":305},[29,11752,11753],{"class":305}," new",[29,11755,2557],{"class":305},[29,11757,310],{"class":309},[29,11759,754],{"class":39},[29,11761,2894],{"class":309},[29,11763,11764,11766],{"class":31,"line":67},[29,11765,4556],{"class":305},[29,11767,11768],{"class":309}," p;\n",[29,11770,11771],{"class":31,"line":75},[29,11772,1741],{"class":309},[29,11774,11775,11777,11779],{"class":31,"line":83},[29,11776,313],{"class":305},[29,11778,2148],{"class":35},[29,11780,2151],{"class":309},[29,11782,11783],{"class":31,"line":158},[29,11784,1722],{"class":309},[29,11786,11787],{"class":31,"line":166},[29,11788,11789],{"class":367},"    \u002F\u002F在堆区开辟数据\n",[29,11791,11792,11794,11796,11798,11800,11802],{"class":31,"line":1505},[29,11793,2160],{"class":305},[29,11795,6693],{"class":305},[29,11797,171],{"class":309},[29,11799,355],{"class":305},[29,11801,11726],{"class":35},[29,11803,5811],{"class":309},[29,11805,11806,11808,11810,11812,11814],{"class":31,"line":1788},[29,11807,1727],{"class":309},[29,11809,6594],{"class":305},[29,11811,171],{"class":309},[29,11813,1351],{"class":305},[29,11815,1373],{"class":309},[29,11817,11818],{"class":31,"line":1793},[29,11819,1741],{"class":309},[171,11821,11822],{},"图片展示：",[171,11824,11825],{},[1638,11826],{"alt":11694,"src":11827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[171,11829,11830],{},"堆区内存由程序员管生死！！！",[259,11832,11833],{"start":51},[178,11834,11835],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[171,11837,11838],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[171,11840,11841,11842],{},"​语法：",[26,11843,11844],{}," new 数据类型",[171,11846,11847],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[19,11849,11851],{"className":296,"code":11850,"language":298,"meta":24,"style":24},"\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",[26,11852,11853,11858,11868,11872,11877,11882,11904,11908,11916,11920,11934,11946,11958,11970,11975,11980,11991,11995,12000,12008,12012,12017,12039,12065,12069,12087,12091,12117,12121,12133,12137,12142,12147,12155,12159,12163,12171,12175,12181,12187],{"__ignoreMap":24},[29,11854,11855],{"class":31,"line":32},[29,11856,11857],{"class":367},"\u002F\u002F1.new的基本语法\n",[29,11859,11860,11862,11864,11866],{"class":31,"line":43},[29,11861,313],{"class":305},[29,11863,6693],{"class":305},[29,11865,11726],{"class":35},[29,11867,2151],{"class":309},[29,11869,11870],{"class":31,"line":51},[29,11871,1722],{"class":309},[29,11873,11874],{"class":31,"line":59},[29,11875,11876],{"class":367},"    \u002F\u002F在堆区创建整型数据\n",[29,11878,11879],{"class":31,"line":67},[29,11880,11881],{"class":367},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[29,11883,11884,11886,11888,11890,11893,11895,11897,11899,11901],{"class":31,"line":75},[29,11885,2160],{"class":305},[29,11887,6693],{"class":305},[29,11889,171],{"class":309},[29,11891,11892],{"class":305},"=new",[29,11894,2557],{"class":305},[29,11896,310],{"class":309},[29,11898,754],{"class":39},[29,11900,6141],{"class":309},[29,11902,11903],{"class":367},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[29,11905,11906],{"class":31,"line":83},[29,11907,1741],{"class":309},[29,11909,11910,11912,11914],{"class":31,"line":158},[29,11911,5539],{"class":305},[29,11913,5763],{"class":35},[29,11915,2151],{"class":309},[29,11917,11918],{"class":31,"line":166},[29,11919,1722],{"class":309},[29,11921,11922,11924,11926,11928,11930,11932],{"class":31,"line":1505},[29,11923,2160],{"class":305},[29,11925,6693],{"class":305},[29,11927,171],{"class":309},[29,11929,355],{"class":305},[29,11931,11726],{"class":35},[29,11933,5811],{"class":309},[29,11935,11936,11938,11940,11942,11944],{"class":31,"line":1788},[29,11937,1727],{"class":309},[29,11939,6594],{"class":305},[29,11941,171],{"class":309},[29,11943,1351],{"class":305},[29,11945,1373],{"class":309},[29,11947,11948,11950,11952,11954,11956],{"class":31,"line":1793},[29,11949,1727],{"class":309},[29,11951,6594],{"class":305},[29,11953,171],{"class":309},[29,11955,1351],{"class":305},[29,11957,1373],{"class":309},[29,11959,11960,11962,11964,11966,11968],{"class":31,"line":1799},[29,11961,1727],{"class":309},[29,11963,6594],{"class":305},[29,11965,171],{"class":309},[29,11967,1351],{"class":305},[29,11969,1373],{"class":309},[29,11971,11972],{"class":31,"line":1804},[29,11973,11974],{"class":367},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[29,11976,11977],{"class":31,"line":1818},[29,11978,11979],{"class":367},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[29,11981,11982,11985,11988],{"class":31,"line":1823},[29,11983,11984],{"class":305},"    delete",[29,11986,11987],{"class":309}," p;",[29,11989,11990],{"class":367},"\u002F\u002F删除这块地址\n",[29,11992,11993],{"class":31,"line":1829},[29,11994,1741],{"class":309},[29,11996,11997],{"class":31,"line":1850},[29,11998,11999],{"class":367},"\u002F\u002F2.在堆区利用new开辟数组\n",[29,12001,12002,12004,12006],{"class":31,"line":1855},[29,12003,5539],{"class":305},[29,12005,5832],{"class":35},[29,12007,2151],{"class":309},[29,12009,12010],{"class":31,"line":1869},[29,12011,1722],{"class":309},[29,12013,12014],{"class":31,"line":1874},[29,12015,12016],{"class":367},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[29,12018,12019,12021,12023,12025,12027,12029,12031,12033,12036],{"class":31,"line":1903},[29,12020,2160],{"class":305},[29,12022,6693],{"class":305},[29,12024,4055],{"class":309},[29,12026,11892],{"class":305},[29,12028,2557],{"class":305},[29,12030,1198],{"class":309},[29,12032,754],{"class":39},[29,12034,12035],{"class":309},"];",[29,12037,12038],{"class":367},"\u002F\u002F10代表数组有10个元素\n",[29,12040,12041,12043,12045,12047,12049,12051,12053,12055,12057,12059,12061,12063],{"class":31,"line":1908},[29,12042,3376],{"class":305},[29,12044,1834],{"class":309},[29,12046,313],{"class":305},[29,12048,3207],{"class":309},[29,12050,355],{"class":305},[29,12052,499],{"class":39},[29,12054,3214],{"class":309},[29,12056,1218],{"class":305},[29,12058,754],{"class":39},[29,12060,3214],{"class":309},[29,12062,2467],{"class":305},[29,12064,316],{"class":309},[29,12066,12067],{"class":31,"line":1925},[29,12068,2205],{"class":309},[29,12070,12071,12074,12076,12078,12080,12082,12084],{"class":31,"line":1930},[29,12072,12073],{"class":309},"        arr[i]",[29,12075,355],{"class":305},[29,12077,749],{"class":309},[29,12079,789],{"class":305},[29,12081,619],{"class":39},[29,12083,364],{"class":309},[29,12085,12086],{"class":367},"\u002F\u002F给10个元素赋值100～109\n",[29,12088,12089],{"class":31,"line":1935},[29,12090,2362],{"class":309},[29,12092,12093,12095,12097,12099,12101,12103,12105,12107,12109,12111,12113,12115],{"class":31,"line":1940},[29,12094,3376],{"class":305},[29,12096,1834],{"class":309},[29,12098,313],{"class":305},[29,12100,3207],{"class":309},[29,12102,355],{"class":305},[29,12104,499],{"class":39},[29,12106,3214],{"class":309},[29,12108,1218],{"class":305},[29,12110,754],{"class":39},[29,12112,3214],{"class":309},[29,12114,2467],{"class":305},[29,12116,316],{"class":309},[29,12118,12119],{"class":31,"line":1954},[29,12120,2205],{"class":309},[29,12122,12123,12125,12127,12129,12131],{"class":31,"line":1959},[29,12124,3626],{"class":309},[29,12126,1351],{"class":305},[29,12128,4529],{"class":309},[29,12130,1351],{"class":305},[29,12132,1373],{"class":309},[29,12134,12135],{"class":31,"line":2752},[29,12136,2362],{"class":309},[29,12138,12139],{"class":31,"line":2766},[29,12140,12141],{"class":367},"    \u002F\u002F释放堆区数组\n",[29,12143,12144],{"class":31,"line":2774},[29,12145,12146],{"class":367},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[29,12148,12149,12152],{"class":31,"line":2779},[29,12150,12151],{"class":305},"    delete[]",[29,12153,12154],{"class":309}," arr;\n",[29,12156,12157],{"class":31,"line":2785},[29,12158,1741],{"class":309},[29,12160,12161],{"class":31,"line":2791},[29,12162,2575],{"emptyLinePlaceholder":233},[29,12164,12165,12167,12169],{"class":31,"line":2796},[29,12166,313],{"class":305},[29,12168,2148],{"class":35},[29,12170,2151],{"class":309},[29,12172,12173],{"class":31,"line":8123},[29,12174,1722],{"class":309},[29,12176,12177,12179],{"class":31,"line":8147},[29,12178,5808],{"class":35},[29,12180,5811],{"class":309},[29,12182,12183,12185],{"class":31,"line":8152},[29,12184,5877],{"class":35},[29,12186,5811],{"class":309},[29,12188,12189],{"class":31,"line":8158},[29,12190,1741],{"class":309},[223,12192,12193],{},"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":24,"searchDepth":43,"depth":43,"links":12195},[12196],{"id":10864,"depth":43,"text":10865,"children":12197},[12198,12199],{"id":10896,"depth":51,"text":10897},{"id":11524,"depth":51,"text":11525},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10856,"description":24},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12206,"title":12207,"body":12208,"description":24,"extension":231,"meta":13689,"navigation":233,"path":13690,"seo":13691,"stem":13692,"__hash__":13693},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12209,"toc":13681},[12210,12213,12217,12220,12223,12392,12396,12401,12418,12423,12575,12579,12582,12585,12979,12983,12986,12991,12994,13306,13310,13316,13476,13478,13486,13490,13493,13500,13678],[10,12211,12207],{"id":12212},"_6引用",[14,12214,12216],{"id":12215},"_61引用基本用法","6.1引用基本用法",[171,12218,12219],{},"引用的本质：给变量起别名",[171,12221,12222],{},"语法：数据类型 &别名=原名",[19,12224,12226],{"className":296,"code":12225,"language":298,"meta":24,"style":24},"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",[26,12227,12228,12236,12240,12252,12264,12268,12287,12306,12310,12321,12325,12344,12362,12366,12376,12380,12388],{"__ignoreMap":24},[29,12229,12230,12232,12234],{"class":31,"line":32},[29,12231,313],{"class":305},[29,12233,2148],{"class":35},[29,12235,11028],{"class":309},[29,12237,12238],{"class":31,"line":43},[29,12239,2575],{"emptyLinePlaceholder":233},[29,12241,12242,12244,12246,12248,12250],{"class":31,"line":51},[29,12243,2160],{"class":305},[29,12245,11044],{"class":309},[29,12247,355],{"class":305},[29,12249,2213],{"class":39},[29,12251,1468],{"class":309},[29,12253,12254,12256,12258,12260,12262],{"class":31,"line":59},[29,12255,2160],{"class":305},[29,12257,10759],{"class":305},[29,12259,11120],{"class":309},[29,12261,355],{"class":305},[29,12263,1608],{"class":309},[29,12265,12266],{"class":31,"line":67},[29,12267,2575],{"emptyLinePlaceholder":233},[29,12269,12270,12272,12274,12277,12279,12281,12283,12285],{"class":31,"line":75},[29,12271,6704],{"class":309},[29,12273,1351],{"class":305},[29,12275,12276],{"class":103}," \"a = \"",[29,12278,1620],{"class":305},[29,12280,11044],{"class":309},[29,12282,1351],{"class":305},[29,12284,11644],{"class":309},[29,12286,7443],{"class":367},[29,12288,12289,12291,12293,12296,12298,12300,12302,12304],{"class":31,"line":83},[29,12290,6704],{"class":309},[29,12292,1351],{"class":305},[29,12294,12295],{"class":103}," \"b = \"",[29,12297,1620],{"class":305},[29,12299,11057],{"class":309},[29,12301,1351],{"class":305},[29,12303,11644],{"class":309},[29,12305,7443],{"class":367},[29,12307,12308],{"class":31,"line":158},[29,12309,2575],{"emptyLinePlaceholder":233},[29,12311,12312,12315,12317,12319],{"class":31,"line":166},[29,12313,12314],{"class":309},"    b ",[29,12316,355],{"class":305},[29,12318,5929],{"class":39},[29,12320,1468],{"class":309},[29,12322,12323],{"class":31,"line":1505},[29,12324,2575],{"emptyLinePlaceholder":233},[29,12326,12327,12329,12331,12333,12335,12337,12339,12341],{"class":31,"line":1788},[29,12328,6704],{"class":309},[29,12330,1351],{"class":305},[29,12332,12276],{"class":103},[29,12334,1620],{"class":305},[29,12336,11044],{"class":309},[29,12338,1351],{"class":305},[29,12340,11644],{"class":309},[29,12342,12343],{"class":367},"\u002F\u002F100\n",[29,12345,12346,12348,12350,12352,12354,12356,12358,12360],{"class":31,"line":1793},[29,12347,6704],{"class":309},[29,12349,1351],{"class":305},[29,12351,12295],{"class":103},[29,12353,1620],{"class":305},[29,12355,11057],{"class":309},[29,12357,1351],{"class":305},[29,12359,11644],{"class":309},[29,12361,12343],{"class":367},[29,12363,12364],{"class":31,"line":1799},[29,12365,2575],{"emptyLinePlaceholder":233},[29,12367,12368,12370,12372,12374],{"class":31,"line":1804},[29,12369,2478],{"class":35},[29,12371,310],{"class":309},[29,12373,2483],{"class":103},[29,12375,2894],{"class":309},[29,12377,12378],{"class":31,"line":1818},[29,12379,2575],{"emptyLinePlaceholder":233},[29,12381,12382,12384,12386],{"class":31,"line":1823},[29,12383,4265],{"class":305},[29,12385,4268],{"class":39},[29,12387,1468],{"class":309},[29,12389,12390],{"class":31,"line":1829},[29,12391,1741],{"class":309},[14,12393,12395],{"id":12394},"_62引用的注意事项","6.2引用的注意事项",[259,12397,12398],{},[178,12399,12400],{},"引用必须要初始化",[19,12402,12404],{"className":296,"code":12403,"language":298,"meta":24,"style":24},"int &b;\u002F\u002F非常错误！\n",[26,12405,12406],{"__ignoreMap":24},[29,12407,12408,12410,12412,12415],{"class":31,"line":32},[29,12409,313],{"class":305},[29,12411,10759],{"class":305},[29,12413,12414],{"class":309},"b;",[29,12416,12417],{"class":367},"\u002F\u002F非常错误！\n",[259,12419,12420],{"start":43},[178,12421,12422],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[19,12424,12426],{"className":296,"code":12425,"language":298,"meta":24,"style":24},"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",[26,12427,12428,12436,12448,12460,12468,12484,12497,12515,12533,12553,12563,12571],{"__ignoreMap":24},[29,12429,12430,12432,12434],{"class":31,"line":32},[29,12431,313],{"class":305},[29,12433,2148],{"class":35},[29,12435,11028],{"class":309},[29,12437,12438,12440,12442,12444,12446],{"class":31,"line":43},[29,12439,2160],{"class":305},[29,12441,11044],{"class":309},[29,12443,355],{"class":305},[29,12445,2213],{"class":39},[29,12447,1468],{"class":309},[29,12449,12450,12452,12454,12456,12458],{"class":31,"line":51},[29,12451,2160],{"class":305},[29,12453,11057],{"class":309},[29,12455,355],{"class":305},[29,12457,9125],{"class":39},[29,12459,1468],{"class":309},[29,12461,12462,12465],{"class":31,"line":59},[29,12463,12464],{"class":367},"    \u002F\u002Fint &c;",[29,12466,12467],{"class":367}," \u002F\u002F错误，引用必须初始化\n",[29,12469,12470,12472,12474,12476,12478,12481],{"class":31,"line":67},[29,12471,2160],{"class":305},[29,12473,10759],{"class":305},[29,12475,3121],{"class":309},[29,12477,355],{"class":305},[29,12479,12480],{"class":309}," a;",[29,12482,12483],{"class":367}," \u002F\u002F一旦初始化后，就不可以更改\n",[29,12485,12486,12489,12491,12494],{"class":31,"line":75},[29,12487,12488],{"class":309},"    c ",[29,12490,355],{"class":305},[29,12492,12493],{"class":309}," b;",[29,12495,12496],{"class":367}," \u002F\u002F这是赋值操作，不是更改引用\n",[29,12498,12499,12501,12503,12505,12507,12509,12511,12513],{"class":31,"line":83},[29,12500,6704],{"class":309},[29,12502,1351],{"class":305},[29,12504,12276],{"class":103},[29,12506,1620],{"class":305},[29,12508,11044],{"class":309},[29,12510,1351],{"class":305},[29,12512,11644],{"class":309},[29,12514,7428],{"class":367},[29,12516,12517,12519,12521,12523,12525,12527,12529,12531],{"class":31,"line":158},[29,12518,6704],{"class":309},[29,12520,1351],{"class":305},[29,12522,12295],{"class":103},[29,12524,1620],{"class":305},[29,12526,11057],{"class":309},[29,12528,1351],{"class":305},[29,12530,11644],{"class":309},[29,12532,7428],{"class":367},[29,12534,12535,12537,12539,12542,12544,12547,12549,12551],{"class":31,"line":166},[29,12536,6704],{"class":309},[29,12538,1351],{"class":305},[29,12540,12541],{"class":103}," \"c = \"",[29,12543,1620],{"class":305},[29,12545,12546],{"class":309}," c ",[29,12548,1351],{"class":305},[29,12550,11644],{"class":309},[29,12552,7428],{"class":367},[29,12554,12555,12557,12559,12561],{"class":31,"line":1505},[29,12556,2478],{"class":35},[29,12558,310],{"class":309},[29,12560,2483],{"class":103},[29,12562,2894],{"class":309},[29,12564,12565,12567,12569],{"class":31,"line":1788},[29,12566,4265],{"class":305},[29,12568,4268],{"class":39},[29,12570,1468],{"class":309},[29,12572,12573],{"class":31,"line":1793},[29,12574,1741],{"class":309},[14,12576,12578],{"id":12577},"_63引用做函数参数","6.3引用做函数参数",[171,12580,12581],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[171,12583,12584],{},"优点：可以简化指针修改实参",[19,12586,12588],{"className":296,"code":12587,"language":298,"meta":24,"style":24},"\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",[26,12589,12590,12595,12618,12629,12639,12648,12652,12656,12661,12683,12695,12707,12717,12721,12725,12730,12752,12762,12770,12778,12782,12786,12794,12798,12810,12822,12826,12837,12863,12867,12887,12911,12915,12925,12949,12953,12963,12967,12975],{"__ignoreMap":24},[29,12591,12592],{"class":31,"line":32},[29,12593,12594],{"class":367},"\u002F\u002F1. 值传递\n",[29,12596,12597,12599,12602,12604,12606,12608,12611,12613,12615],{"class":31,"line":43},[29,12598,5539],{"class":305},[29,12600,12601],{"class":35}," mySwap01",[29,12603,310],{"class":309},[29,12605,313],{"class":305},[29,12607,1574],{"class":5391},[29,12609,12610],{"class":309},", ",[29,12612,313],{"class":305},[29,12614,3008],{"class":5391},[29,12616,12617],{"class":309},") {\n",[29,12619,12620,12622,12625,12627],{"class":31,"line":51},[29,12621,2160],{"class":305},[29,12623,12624],{"class":309}," temp ",[29,12626,355],{"class":305},[29,12628,1608],{"class":309},[29,12630,12631,12634,12636],{"class":31,"line":59},[29,12632,12633],{"class":309},"    a ",[29,12635,355],{"class":305},[29,12637,12638],{"class":309}," b;\n",[29,12640,12641,12643,12645],{"class":31,"line":67},[29,12642,12314],{"class":309},[29,12644,355],{"class":305},[29,12646,12647],{"class":309}," temp;\n",[29,12649,12650],{"class":31,"line":75},[29,12651,1741],{"class":309},[29,12653,12654],{"class":31,"line":83},[29,12655,2575],{"emptyLinePlaceholder":233},[29,12657,12658],{"class":31,"line":158},[29,12659,12660],{"class":367},"\u002F\u002F2. 地址传递\n",[29,12662,12663,12665,12668,12670,12673,12675,12677,12679,12681],{"class":31,"line":166},[29,12664,5539],{"class":305},[29,12666,12667],{"class":35}," mySwap02",[29,12669,310],{"class":309},[29,12671,12672],{"class":305},"int*",[29,12674,1574],{"class":5391},[29,12676,12610],{"class":309},[29,12678,12672],{"class":305},[29,12680,3008],{"class":5391},[29,12682,12617],{"class":309},[29,12684,12685,12687,12689,12691,12693],{"class":31,"line":1505},[29,12686,2160],{"class":305},[29,12688,12624],{"class":309},[29,12690,355],{"class":305},[29,12692,6693],{"class":305},[29,12694,6372],{"class":309},[29,12696,12697,12699,12701,12703,12705],{"class":31,"line":1788},[29,12698,6578],{"class":305},[29,12700,11094],{"class":309},[29,12702,355],{"class":305},[29,12704,6693],{"class":305},[29,12706,6244],{"class":309},[29,12708,12709,12711,12713,12715],{"class":31,"line":1793},[29,12710,6578],{"class":305},[29,12712,11120],{"class":309},[29,12714,355],{"class":305},[29,12716,12647],{"class":309},[29,12718,12719],{"class":31,"line":1799},[29,12720,1741],{"class":309},[29,12722,12723],{"class":31,"line":1804},[29,12724,2575],{"emptyLinePlaceholder":233},[29,12726,12727],{"class":31,"line":1818},[29,12728,12729],{"class":367},"\u002F\u002F3. 引用传递\n",[29,12731,12732,12734,12737,12739,12742,12744,12746,12748,12750],{"class":31,"line":1823},[29,12733,5539],{"class":305},[29,12735,12736],{"class":35}," mySwap03",[29,12738,310],{"class":309},[29,12740,12741],{"class":305},"int&",[29,12743,1574],{"class":5391},[29,12745,12610],{"class":309},[29,12747,12741],{"class":305},[29,12749,3008],{"class":5391},[29,12751,12617],{"class":309},[29,12753,12754,12756,12758,12760],{"class":31,"line":1829},[29,12755,2160],{"class":305},[29,12757,12624],{"class":309},[29,12759,355],{"class":305},[29,12761,1608],{"class":309},[29,12763,12764,12766,12768],{"class":31,"line":1850},[29,12765,12633],{"class":309},[29,12767,355],{"class":305},[29,12769,12638],{"class":309},[29,12771,12772,12774,12776],{"class":31,"line":1855},[29,12773,12314],{"class":309},[29,12775,355],{"class":305},[29,12777,12647],{"class":309},[29,12779,12780],{"class":31,"line":1869},[29,12781,1741],{"class":309},[29,12783,12784],{"class":31,"line":1874},[29,12785,2575],{"emptyLinePlaceholder":233},[29,12787,12788,12790,12792],{"class":31,"line":1903},[29,12789,313],{"class":305},[29,12791,2148],{"class":35},[29,12793,11028],{"class":309},[29,12795,12796],{"class":31,"line":1908},[29,12797,2575],{"emptyLinePlaceholder":233},[29,12799,12800,12802,12804,12806,12808],{"class":31,"line":1925},[29,12801,2160],{"class":305},[29,12803,11044],{"class":309},[29,12805,355],{"class":305},[29,12807,2213],{"class":39},[29,12809,1468],{"class":309},[29,12811,12812,12814,12816,12818,12820],{"class":31,"line":1930},[29,12813,2160],{"class":305},[29,12815,11057],{"class":309},[29,12817,355],{"class":305},[29,12819,9125],{"class":39},[29,12821,1468],{"class":309},[29,12823,12824],{"class":31,"line":1935},[29,12825,2575],{"emptyLinePlaceholder":233},[29,12827,12828,12831,12834],{"class":31,"line":1940},[29,12829,12830],{"class":35},"    mySwap01",[29,12832,12833],{"class":309},"(a, b);",[29,12835,12836],{"class":367},"\u002F\u002F值传递，形参不会修饰实参\n",[29,12838,12839,12841,12843,12846,12848,12850,12852,12855,12857,12859,12861],{"class":31,"line":1954},[29,12840,6704],{"class":309},[29,12842,1351],{"class":305},[29,12844,12845],{"class":103}," \"a:\"",[29,12847,1620],{"class":305},[29,12849,11044],{"class":309},[29,12851,1351],{"class":305},[29,12853,12854],{"class":103}," \" b:\"",[29,12856,1620],{"class":305},[29,12858,11057],{"class":309},[29,12860,1351],{"class":305},[29,12862,9015],{"class":309},[29,12864,12865],{"class":31,"line":1959},[29,12866,2575],{"emptyLinePlaceholder":233},[29,12868,12869,12872,12874,12876,12879,12881,12884],{"class":31,"line":2752},[29,12870,12871],{"class":35},"    mySwap02",[29,12873,310],{"class":309},[29,12875,661],{"class":305},[29,12877,12878],{"class":309},"a, ",[29,12880,661],{"class":305},[29,12882,12883],{"class":309},"b);",[29,12885,12886],{"class":367},"\u002F\u002F地址传递，形参会修饰实参\n",[29,12888,12889,12891,12893,12895,12897,12899,12901,12903,12905,12907,12909],{"class":31,"line":2766},[29,12890,6704],{"class":309},[29,12892,1351],{"class":305},[29,12894,12845],{"class":103},[29,12896,1620],{"class":305},[29,12898,11044],{"class":309},[29,12900,1351],{"class":305},[29,12902,12854],{"class":103},[29,12904,1620],{"class":305},[29,12906,11057],{"class":309},[29,12908,1351],{"class":305},[29,12910,9015],{"class":309},[29,12912,12913],{"class":31,"line":2774},[29,12914,2575],{"emptyLinePlaceholder":233},[29,12916,12917,12920,12922],{"class":31,"line":2779},[29,12918,12919],{"class":35},"    mySwap03",[29,12921,12833],{"class":309},[29,12923,12924],{"class":367},"\u002F\u002F引用传递，形参会修饰实参\n",[29,12926,12927,12929,12931,12933,12935,12937,12939,12941,12943,12945,12947],{"class":31,"line":2785},[29,12928,6704],{"class":309},[29,12930,1351],{"class":305},[29,12932,12845],{"class":103},[29,12934,1620],{"class":305},[29,12936,11044],{"class":309},[29,12938,1351],{"class":305},[29,12940,12854],{"class":103},[29,12942,1620],{"class":305},[29,12944,11057],{"class":309},[29,12946,1351],{"class":305},[29,12948,9015],{"class":309},[29,12950,12951],{"class":31,"line":2791},[29,12952,2575],{"emptyLinePlaceholder":233},[29,12954,12955,12957,12959,12961],{"class":31,"line":2796},[29,12956,2478],{"class":35},[29,12958,310],{"class":309},[29,12960,2483],{"class":103},[29,12962,2894],{"class":309},[29,12964,12965],{"class":31,"line":8123},[29,12966,2575],{"emptyLinePlaceholder":233},[29,12968,12969,12971,12973],{"class":31,"line":8147},[29,12970,4265],{"class":305},[29,12972,4268],{"class":39},[29,12974,1468],{"class":309},[29,12976,12977],{"class":31,"line":8152},[29,12978,1741],{"class":309},[14,12980,12982],{"id":12981},"_64引用做函数的返回值","6.4引用做函数的返回值",[171,12984,12985],{},"作用：引用是可以作为函数的返回值存在的",[171,12987,9200,12988],{},[457,12989,12990],{},"不要返回局部变量引用",[171,12992,12993],{},"用法：函数调用作为左值",[19,12995,12997],{"className":10116,"code":12996,"language":10118,"meta":24,"style":24},"\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",[26,12998,12999,13004,13012,13027,13033,13037,13041,13046,13054,13071,13077,13081,13085,13093,13097,13102,13116,13136,13155,13159,13164,13177,13197,13215,13219,13235,13239,13258,13276,13280,13290,13294,13302],{"__ignoreMap":24},[29,13000,13001],{"class":31,"line":32},[29,13002,13003],{"class":367},"\u002F\u002F返回局部变量引用\n",[29,13005,13006,13008,13010],{"class":31,"line":43},[29,13007,12741],{"class":305},[29,13009,5763],{"class":35},[29,13011,11028],{"class":309},[29,13013,13014,13016,13018,13020,13022,13024],{"class":31,"line":51},[29,13015,2160],{"class":305},[29,13017,11044],{"class":309},[29,13019,355],{"class":305},[29,13021,2213],{"class":39},[29,13023,364],{"class":309},[29,13025,13026],{"class":367}," \u002F\u002F局部变量\n",[29,13028,13029,13031],{"class":31,"line":59},[29,13030,4265],{"class":305},[29,13032,1608],{"class":309},[29,13034,13035],{"class":31,"line":67},[29,13036,1741],{"class":309},[29,13038,13039],{"class":31,"line":75},[29,13040,2575],{"emptyLinePlaceholder":233},[29,13042,13043],{"class":31,"line":83},[29,13044,13045],{"class":367},"\u002F\u002F返回静态变量引用\n",[29,13047,13048,13050,13052],{"class":31,"line":158},[29,13049,12741],{"class":305},[29,13051,5832],{"class":35},[29,13053,11028],{"class":309},[29,13055,13056,13058,13060,13062,13064,13066,13068],{"class":31,"line":166},[29,13057,11195],{"class":305},[29,13059,2557],{"class":305},[29,13061,11044],{"class":309},[29,13063,355],{"class":305},[29,13065,9125],{"class":39},[29,13067,364],{"class":309},[29,13069,13070],{"class":367},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[29,13072,13073,13075],{"class":31,"line":1505},[29,13074,4265],{"class":305},[29,13076,1608],{"class":309},[29,13078,13079],{"class":31,"line":1788},[29,13080,1741],{"class":309},[29,13082,13083],{"class":31,"line":1793},[29,13084,2575],{"emptyLinePlaceholder":233},[29,13086,13087,13089,13091],{"class":31,"line":1799},[29,13088,313],{"class":305},[29,13090,2148],{"class":35},[29,13092,11028],{"class":309},[29,13094,13095],{"class":31,"line":1804},[29,13096,2575],{"emptyLinePlaceholder":233},[29,13098,13099],{"class":31,"line":1818},[29,13100,13101],{"class":367},"    \u002F\u002F不能返回局部变量的引用\n",[29,13103,13104,13107,13110,13112,13114],{"class":31,"line":1823},[29,13105,13106],{"class":305},"    int&",[29,13108,13109],{"class":309}," ref ",[29,13111,355],{"class":305},[29,13113,5763],{"class":35},[29,13115,5811],{"class":309},[29,13117,13118,13120,13122,13125,13127,13129,13131,13133],{"class":31,"line":1829},[29,13119,6704],{"class":309},[29,13121,1351],{"class":305},[29,13123,13124],{"class":103}," \"ref = \"",[29,13126,1620],{"class":305},[29,13128,13109],{"class":309},[29,13130,1351],{"class":305},[29,13132,11644],{"class":309},[29,13134,13135],{"class":367},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[29,13137,13138,13140,13142,13144,13146,13148,13150,13152],{"class":31,"line":1850},[29,13139,6704],{"class":309},[29,13141,1351],{"class":305},[29,13143,13124],{"class":103},[29,13145,1620],{"class":305},[29,13147,13109],{"class":309},[29,13149,1351],{"class":305},[29,13151,11644],{"class":309},[29,13153,13154],{"class":367},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[29,13156,13157],{"class":31,"line":1855},[29,13158,2575],{"emptyLinePlaceholder":233},[29,13160,13161],{"class":31,"line":1869},[29,13162,13163],{"class":367},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[29,13165,13166,13168,13171,13173,13175],{"class":31,"line":1874},[29,13167,13106],{"class":305},[29,13169,13170],{"class":309}," ref2 ",[29,13172,355],{"class":305},[29,13174,5832],{"class":35},[29,13176,5811],{"class":309},[29,13178,13179,13181,13183,13186,13188,13190,13192,13194],{"class":31,"line":1903},[29,13180,6704],{"class":309},[29,13182,1351],{"class":305},[29,13184,13185],{"class":103}," \"ref2 = \"",[29,13187,1620],{"class":305},[29,13189,13170],{"class":309},[29,13191,1351],{"class":305},[29,13193,11644],{"class":309},[29,13195,13196],{"class":367}," \u002F\u002F20\n",[29,13198,13199,13201,13203,13205,13207,13209,13211,13213],{"class":31,"line":1908},[29,13200,6704],{"class":309},[29,13202,1351],{"class":305},[29,13204,13185],{"class":103},[29,13206,1620],{"class":305},[29,13208,13170],{"class":309},[29,13210,1351],{"class":305},[29,13212,11644],{"class":309},[29,13214,13196],{"class":367},[29,13216,13217],{"class":31,"line":1925},[29,13218,2575],{"emptyLinePlaceholder":233},[29,13220,13221,13223,13226,13228,13230,13232],{"class":31,"line":1930},[29,13222,5877],{"class":35},[29,13224,13225],{"class":309},"() ",[29,13227,355],{"class":305},[29,13229,3174],{"class":39},[29,13231,364],{"class":309},[29,13233,13234],{"class":367},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[29,13236,13237],{"class":31,"line":1935},[29,13238,2575],{"emptyLinePlaceholder":233},[29,13240,13241,13243,13245,13247,13249,13251,13253,13255],{"class":31,"line":1940},[29,13242,6704],{"class":309},[29,13244,1351],{"class":305},[29,13246,13185],{"class":103},[29,13248,1620],{"class":305},[29,13250,13170],{"class":309},[29,13252,1351],{"class":305},[29,13254,11644],{"class":309},[29,13256,13257],{"class":367}," \u002F\u002F1000\n",[29,13259,13260,13262,13264,13266,13268,13270,13272,13274],{"class":31,"line":1954},[29,13261,6704],{"class":309},[29,13263,1351],{"class":305},[29,13265,13185],{"class":103},[29,13267,1620],{"class":305},[29,13269,13170],{"class":309},[29,13271,1351],{"class":305},[29,13273,11644],{"class":309},[29,13275,13257],{"class":367},[29,13277,13278],{"class":31,"line":1959},[29,13279,2575],{"emptyLinePlaceholder":233},[29,13281,13282,13284,13286,13288],{"class":31,"line":2752},[29,13283,2478],{"class":35},[29,13285,310],{"class":309},[29,13287,2483],{"class":103},[29,13289,2894],{"class":309},[29,13291,13292],{"class":31,"line":2766},[29,13293,2575],{"emptyLinePlaceholder":233},[29,13295,13296,13298,13300],{"class":31,"line":2774},[29,13297,4265],{"class":305},[29,13299,4268],{"class":39},[29,13301,1468],{"class":309},[29,13303,13304],{"class":31,"line":2779},[29,13305,1741],{"class":309},[14,13307,13309],{"id":13308},"_65引用的本质","6.5引用的本质",[171,13311,13312,13313],{},"本质：",[457,13314,13315],{},"引用的本质在c++内部实现是一个指针常量.",[19,13317,13319],{"className":296,"code":13318,"language":298,"meta":24,"style":24},"\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",[26,13320,13321,13326,13342,13356,13360,13369,13381,13386,13391,13402,13415,13419,13435,13452,13456,13464,13472],{"__ignoreMap":24},[29,13322,13323],{"class":31,"line":32},[29,13324,13325],{"class":367},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[29,13327,13328,13330,13332,13334,13336,13339],{"class":31,"line":43},[29,13329,5539],{"class":305},[29,13331,11560],{"class":35},[29,13333,310],{"class":309},[29,13335,12741],{"class":305},[29,13337,13338],{"class":5391}," ref",[29,13340,13341],{"class":309},"){\n",[29,13343,13344,13347,13349,13351,13353],{"class":31,"line":51},[29,13345,13346],{"class":309},"    ref ",[29,13348,355],{"class":305},[29,13350,5929],{"class":39},[29,13352,364],{"class":309},[29,13354,13355],{"class":367}," \u002F\u002F ref是引用，转换为*ref = 100\n",[29,13357,13358],{"class":31,"line":59},[29,13359,1741],{"class":309},[29,13361,13362,13364,13366],{"class":31,"line":67},[29,13363,313],{"class":305},[29,13365,2148],{"class":35},[29,13367,13368],{"class":309},"(){\n",[29,13370,13371,13373,13375,13377,13379],{"class":31,"line":75},[29,13372,2160],{"class":305},[29,13374,11044],{"class":309},[29,13376,355],{"class":305},[29,13378,2213],{"class":39},[29,13380,1468],{"class":309},[29,13382,13383],{"class":31,"line":83},[29,13384,13385],{"class":309},"    \n",[29,13387,13388],{"class":31,"line":158},[29,13389,13390],{"class":367},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[29,13392,13393,13395,13397,13399],{"class":31,"line":166},[29,13394,13106],{"class":305},[29,13396,13109],{"class":309},[29,13398,355],{"class":305},[29,13400,13401],{"class":309}," a; \n",[29,13403,13404,13406,13408,13410,13412],{"class":31,"line":1505},[29,13405,13346],{"class":309},[29,13407,355],{"class":305},[29,13409,9125],{"class":39},[29,13411,364],{"class":309},[29,13413,13414],{"class":367}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[29,13416,13417],{"class":31,"line":1788},[29,13418,13385],{"class":309},[29,13420,13421,13423,13425,13427,13429,13431,13433],{"class":31,"line":1793},[29,13422,6704],{"class":309},[29,13424,1351],{"class":305},[29,13426,12845],{"class":103},[29,13428,1620],{"class":305},[29,13430,11044],{"class":309},[29,13432,1351],{"class":305},[29,13434,9015],{"class":309},[29,13436,13437,13439,13441,13444,13446,13448,13450],{"class":31,"line":1799},[29,13438,6704],{"class":309},[29,13440,1351],{"class":305},[29,13442,13443],{"class":103}," \"ref:\"",[29,13445,1620],{"class":305},[29,13447,13109],{"class":309},[29,13449,1351],{"class":305},[29,13451,9015],{"class":309},[29,13453,13454],{"class":31,"line":1804},[29,13455,13385],{"class":309},[29,13457,13458,13461],{"class":31,"line":1818},[29,13459,13460],{"class":35},"    func",[29,13462,13463],{"class":309},"(a);\n",[29,13465,13466,13468,13470],{"class":31,"line":1823},[29,13467,4265],{"class":305},[29,13469,4268],{"class":39},[29,13471,1468],{"class":309},[29,13473,13474],{"class":31,"line":1829},[29,13475,1741],{"class":309},[171,13477,11507],{},[259,13479,13480,13483],{},[178,13481,13482],{},"引用的本质，就是一个指针常量",[178,13484,13485],{},"引用一旦初始化，就不可以发生改变",[14,13487,13489],{"id":13488},"_66常量引用","6.6常量引用",[171,13491,13492],{},"作用：常量引用主要用来修饰形参",[171,13494,13495,13496,13499],{},"在函数形参列表中，可以加",[457,13497,13498],{},"const修饰形参","，防止形参改变实参",[19,13501,13503],{"className":296,"code":13502,"language":298,"meta":24,"style":24},"\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",[26,13504,13505,13510,13515,13534,13539,13552,13556,13560,13568,13572,13577,13582,13596,13600,13608,13620,13624,13629,13641,13648,13652,13662,13666,13674],{"__ignoreMap":24},[29,13506,13507],{"class":31,"line":32},[29,13508,13509],{"class":367},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[29,13511,13512],{"class":31,"line":43},[29,13513,13514],{"class":367},"\u002F\u002F加上const就不能修改实参的\n",[29,13516,13517,13519,13522,13524,13526,13529,13532],{"class":31,"line":51},[29,13518,5539],{"class":305},[29,13520,13521],{"class":35}," showValue",[29,13523,310],{"class":309},[29,13525,6967],{"class":305},[29,13527,13528],{"class":305}," int&",[29,13530,13531],{"class":5391}," v",[29,13533,12617],{"class":309},[29,13535,13536],{"class":31,"line":59},[29,13537,13538],{"class":367},"    \u002F\u002Fv += 100;\n",[29,13540,13541,13543,13545,13548,13550],{"class":31,"line":67},[29,13542,6704],{"class":309},[29,13544,1351],{"class":305},[29,13546,13547],{"class":309}," v ",[29,13549,1351],{"class":305},[29,13551,9015],{"class":309},[29,13553,13554],{"class":31,"line":75},[29,13555,1741],{"class":309},[29,13557,13558],{"class":31,"line":83},[29,13559,2575],{"emptyLinePlaceholder":233},[29,13561,13562,13564,13566],{"class":31,"line":158},[29,13563,313],{"class":305},[29,13565,2148],{"class":35},[29,13567,11028],{"class":309},[29,13569,13570],{"class":31,"line":166},[29,13571,2575],{"emptyLinePlaceholder":233},[29,13573,13574],{"class":31,"line":1505},[29,13575,13576],{"class":367},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[29,13578,13579],{"class":31,"line":1788},[29,13580,13581],{"class":367},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[29,13583,13584,13586,13588,13590,13592,13594],{"class":31,"line":1793},[29,13585,11396],{"class":305},[29,13587,13528],{"class":305},[29,13589,13109],{"class":309},[29,13591,355],{"class":305},[29,13593,2213],{"class":39},[29,13595,1468],{"class":309},[29,13597,13598],{"class":31,"line":1799},[29,13599,2575],{"emptyLinePlaceholder":233},[29,13601,13602,13605],{"class":31,"line":1804},[29,13603,13604],{"class":367},"    \u002F\u002Fref = 100;",[29,13606,13607],{"class":367},"  \u002F\u002F加入const后不可以修改变量\n",[29,13609,13610,13612,13614,13616,13618],{"class":31,"line":1818},[29,13611,6704],{"class":309},[29,13613,1351],{"class":305},[29,13615,13109],{"class":309},[29,13617,1351],{"class":305},[29,13619,9015],{"class":309},[29,13621,13622],{"class":31,"line":1823},[29,13623,2575],{"emptyLinePlaceholder":233},[29,13625,13626],{"class":31,"line":1829},[29,13627,13628],{"class":367},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[29,13630,13631,13633,13635,13637,13639],{"class":31,"line":1850},[29,13632,2160],{"class":305},[29,13634,11044],{"class":309},[29,13636,355],{"class":305},[29,13638,2213],{"class":39},[29,13640,1468],{"class":309},[29,13642,13643,13646],{"class":31,"line":1855},[29,13644,13645],{"class":35},"    showValue",[29,13647,13463],{"class":309},[29,13649,13650],{"class":31,"line":1869},[29,13651,2575],{"emptyLinePlaceholder":233},[29,13653,13654,13656,13658,13660],{"class":31,"line":1874},[29,13655,2478],{"class":35},[29,13657,310],{"class":309},[29,13659,2483],{"class":103},[29,13661,2894],{"class":309},[29,13663,13664],{"class":31,"line":1903},[29,13665,2575],{"emptyLinePlaceholder":233},[29,13667,13668,13670,13672],{"class":31,"line":1908},[29,13669,4265],{"class":305},[29,13671,4268],{"class":39},[29,13673,1468],{"class":309},[29,13675,13676],{"class":31,"line":1925},[29,13677,1741],{"class":309},[223,13679,13680],{},"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":24,"searchDepth":43,"depth":43,"links":13682},[13683,13684,13685,13686,13687,13688],{"id":12215,"depth":43,"text":12216},{"id":12394,"depth":43,"text":12395},{"id":12577,"depth":43,"text":12578},{"id":12981,"depth":43,"text":12982},{"id":13308,"depth":43,"text":13309},{"id":13488,"depth":43,"text":13489},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12207,"description":24},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13695,"title":13696,"body":13697,"description":24,"extension":231,"meta":14778,"navigation":233,"path":14779,"seo":14780,"stem":14781,"__hash__":14782},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13698,"toc":14770},[13699,13702,13706,13709,13714,13946,13948,13959,13963,13966,13974,14078,14081,14085,14088,14092,14095,14100,14122,14128,14455,14458,14462,14470,14767],[10,13700,13696],{"id":13701},"_7函数高级部分",[14,13703,13705],{"id":13704},"_71函数默认参数","7.1函数默认参数",[171,13707,13708],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[171,13710,5356,13711],{},[26,13712,13713],{}," 返回值类型  函数名 （参数= 默认值）{}",[19,13715,13717],{"className":296,"code":13716,"language":298,"meta":24,"style":24},"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",[26,13718,13719,13754,13769,13773,13777,13782,13787,13816,13836,13846,13850,13854,13862,13866,13894,13916,13920,13930,13934,13942],{"__ignoreMap":24},[29,13720,13721,13723,13725,13727,13729,13731,13733,13735,13737,13740,13742,13744,13746,13748,13750,13752],{"class":31,"line":32},[29,13722,313],{"class":305},[29,13724,11560],{"class":35},[29,13726,310],{"class":309},[29,13728,313],{"class":305},[29,13730,1574],{"class":5391},[29,13732,12610],{"class":309},[29,13734,313],{"class":305},[29,13736,3008],{"class":5391},[29,13738,13739],{"class":305}," =",[29,13741,2213],{"class":39},[29,13743,12610],{"class":309},[29,13745,313],{"class":305},[29,13747,3024],{"class":5391},[29,13749,13739],{"class":305},[29,13751,2213],{"class":39},[29,13753,12617],{"class":309},[29,13755,13756,13758,13760,13762,13764,13766],{"class":31,"line":43},[29,13757,4265],{"class":305},[29,13759,11044],{"class":309},[29,13761,789],{"class":305},[29,13763,11057],{"class":309},[29,13765,789],{"class":305},[29,13767,13768],{"class":309}," c;\n",[29,13770,13771],{"class":31,"line":51},[29,13772,1741],{"class":309},[29,13774,13775],{"class":31,"line":59},[29,13776,2575],{"emptyLinePlaceholder":233},[29,13778,13779],{"class":31,"line":67},[29,13780,13781],{"class":367},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[29,13783,13784],{"class":31,"line":75},[29,13785,13786],{"class":367},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[29,13788,13789,13791,13794,13796,13798,13800,13802,13804,13806,13808,13810,13812,13814],{"class":31,"line":83},[29,13790,313],{"class":305},[29,13792,13793],{"class":35}," func2",[29,13795,310],{"class":309},[29,13797,313],{"class":305},[29,13799,1574],{"class":5391},[29,13801,13739],{"class":305},[29,13803,2213],{"class":39},[29,13805,12610],{"class":309},[29,13807,313],{"class":305},[29,13809,3008],{"class":5391},[29,13811,13739],{"class":305},[29,13813,2213],{"class":39},[29,13815,2894],{"class":309},[29,13817,13818,13820,13822,13824,13826,13828,13830,13832,13834],{"class":31,"line":158},[29,13819,313],{"class":305},[29,13821,13793],{"class":35},[29,13823,310],{"class":309},[29,13825,313],{"class":305},[29,13827,1574],{"class":5391},[29,13829,12610],{"class":309},[29,13831,313],{"class":305},[29,13833,3008],{"class":5391},[29,13835,12617],{"class":309},[29,13837,13838,13840,13842,13844],{"class":31,"line":166},[29,13839,4265],{"class":305},[29,13841,11044],{"class":309},[29,13843,789],{"class":305},[29,13845,12638],{"class":309},[29,13847,13848],{"class":31,"line":1505},[29,13849,1741],{"class":309},[29,13851,13852],{"class":31,"line":1788},[29,13853,2575],{"emptyLinePlaceholder":233},[29,13855,13856,13858,13860],{"class":31,"line":1793},[29,13857,313],{"class":305},[29,13859,2148],{"class":35},[29,13861,11028],{"class":309},[29,13863,13864],{"class":31,"line":1799},[29,13865,2575],{"emptyLinePlaceholder":233},[29,13867,13868,13870,13872,13875,13877,13879,13881,13883,13885,13887,13890,13892],{"class":31,"line":1804},[29,13869,6704],{"class":309},[29,13871,1351],{"class":305},[29,13873,13874],{"class":103}," \"ret = \"",[29,13876,1620],{"class":305},[29,13878,11560],{"class":35},[29,13880,310],{"class":309},[29,13882,1008],{"class":39},[29,13884,12610],{"class":309},[29,13886,1008],{"class":39},[29,13888,13889],{"class":309},") ",[29,13891,1351],{"class":305},[29,13893,9015],{"class":309},[29,13895,13896,13898,13900,13902,13904,13906,13908,13910,13912,13914],{"class":31,"line":1818},[29,13897,6704],{"class":309},[29,13899,1351],{"class":305},[29,13901,13874],{"class":103},[29,13903,1620],{"class":305},[29,13905,11560],{"class":35},[29,13907,310],{"class":309},[29,13909,619],{"class":39},[29,13911,13889],{"class":309},[29,13913,1351],{"class":305},[29,13915,9015],{"class":309},[29,13917,13918],{"class":31,"line":1823},[29,13919,2575],{"emptyLinePlaceholder":233},[29,13921,13922,13924,13926,13928],{"class":31,"line":1829},[29,13923,2478],{"class":35},[29,13925,310],{"class":309},[29,13927,2483],{"class":103},[29,13929,2894],{"class":309},[29,13931,13932],{"class":31,"line":1850},[29,13933,2575],{"emptyLinePlaceholder":233},[29,13935,13936,13938,13940],{"class":31,"line":1855},[29,13937,4265],{"class":305},[29,13939,4268],{"class":39},[29,13941,1468],{"class":309},[29,13943,13944],{"class":31,"line":1869},[29,13945,1741],{"class":309},[171,13947,11507],{},[259,13949,13950,13953,13956],{},[178,13951,13952],{},"我传就用我；没传就用你",[178,13954,13955],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[178,13957,13958],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13960,13962],{"id":13961},"_72函数的占位参数","7.2函数的占位参数",[171,13964,13965],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[171,13967,13968,13970,13971],{},[457,13969,5356],{}," ",[26,13972,13973],{},"返回值类型 函数名 (数据类型){}",[19,13975,13977],{"className":296,"code":13976,"language":298,"meta":24,"style":24},"\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",[26,13978,13979,13984,14002,14015,14019,14027,14031,14048,14052,14062,14066,14074],{"__ignoreMap":24},[29,13980,13981],{"class":31,"line":32},[29,13982,13983],{"class":367},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[29,13985,13986,13988,13990,13992,13994,13996,13998,14000],{"class":31,"line":43},[29,13987,5539],{"class":305},[29,13989,11560],{"class":35},[29,13991,310],{"class":309},[29,13993,313],{"class":305},[29,13995,1574],{"class":5391},[29,13997,12610],{"class":309},[29,13999,313],{"class":305},[29,14001,12617],{"class":309},[29,14003,14004,14006,14008,14011,14013],{"class":31,"line":51},[29,14005,6704],{"class":309},[29,14007,1351],{"class":305},[29,14009,14010],{"class":103}," \"this is func\"",[29,14012,1620],{"class":305},[29,14014,9015],{"class":309},[29,14016,14017],{"class":31,"line":59},[29,14018,1741],{"class":309},[29,14020,14021,14023,14025],{"class":31,"line":67},[29,14022,313],{"class":305},[29,14024,2148],{"class":35},[29,14026,11028],{"class":309},[29,14028,14029],{"class":31,"line":75},[29,14030,2575],{"emptyLinePlaceholder":233},[29,14032,14033,14035,14037,14039,14041,14043,14045],{"class":31,"line":83},[29,14034,13460],{"class":35},[29,14036,310],{"class":309},[29,14038,754],{"class":39},[29,14040,686],{"class":309},[29,14042,754],{"class":39},[29,14044,6141],{"class":309},[29,14046,14047],{"class":367}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[29,14049,14050],{"class":31,"line":158},[29,14051,2575],{"emptyLinePlaceholder":233},[29,14053,14054,14056,14058,14060],{"class":31,"line":166},[29,14055,2478],{"class":35},[29,14057,310],{"class":309},[29,14059,2483],{"class":103},[29,14061,2894],{"class":309},[29,14063,14064],{"class":31,"line":1505},[29,14065,2575],{"emptyLinePlaceholder":233},[29,14067,14068,14070,14072],{"class":31,"line":1788},[29,14069,4265],{"class":305},[29,14071,4268],{"class":39},[29,14073,1468],{"class":309},[29,14075,14076],{"class":31,"line":1793},[29,14077,1741],{"class":309},[171,14079,14080],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14082,14084],{"id":14083},"_73函数重载","7.3函数重载",[171,14086,14087],{},"意思是函数名是可以相同的",[275,14089,14091],{"id":14090},"_731基本语法","7.3.1基本语法",[171,14093,14094],{},"作用：函数名可以相同，提高复用性",[171,14096,14097],{},[457,14098,14099],{},"函数重载满足条件：",[175,14101,14102,14105,14108],{},[178,14103,14104],{},"同一个作用域下",[178,14106,14107],{},"函数名称相同",[178,14109,14110,14111,14114,14115,14118,14119],{},"函数参数",[457,14112,14113],{},"类型不同","  或者 ",[457,14116,14117],{},"个数不同"," 或者 ",[457,14120,14121],{},"顺序不同",[171,14123,14124,14127],{},[457,14125,14126],{},"注意:","  函数的返回值不可以作为函数重载的条件",[19,14129,14131],{"className":10116,"code":14130,"language":10118,"meta":24,"style":24},"\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",[26,14132,14133,14138,14146,14150,14163,14167,14181,14185,14198,14202,14217,14221,14234,14238,14259,14263,14276,14280,14300,14304,14317,14321,14325,14330,14335,14340,14345,14350,14354,14358,14366,14370,14376,14386,14396,14410,14425,14429,14439,14443,14451],{"__ignoreMap":24},[29,14134,14135],{"class":31,"line":32},[29,14136,14137],{"class":367},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[29,14139,14140,14142,14144],{"class":31,"line":43},[29,14141,5539],{"class":305},[29,14143,11560],{"class":35},[29,14145,2151],{"class":309},[29,14147,14148],{"class":31,"line":51},[29,14149,1722],{"class":309},[29,14151,14152,14154,14156,14159,14161],{"class":31,"line":59},[29,14153,6704],{"class":309},[29,14155,1351],{"class":305},[29,14157,14158],{"class":103}," \"func 的调用！\"",[29,14160,1620],{"class":305},[29,14162,9015],{"class":309},[29,14164,14165],{"class":31,"line":67},[29,14166,1741],{"class":309},[29,14168,14169,14171,14173,14175,14177,14179],{"class":31,"line":75},[29,14170,5539],{"class":305},[29,14172,11560],{"class":35},[29,14174,310],{"class":309},[29,14176,313],{"class":305},[29,14178,1574],{"class":5391},[29,14180,316],{"class":309},[29,14182,14183],{"class":31,"line":83},[29,14184,1722],{"class":309},[29,14186,14187,14189,14191,14194,14196],{"class":31,"line":158},[29,14188,6704],{"class":309},[29,14190,1351],{"class":305},[29,14192,14193],{"class":103}," \"func (int a) 的调用！\"",[29,14195,1620],{"class":305},[29,14197,9015],{"class":309},[29,14199,14200],{"class":31,"line":166},[29,14201,1741],{"class":309},[29,14203,14204,14206,14208,14210,14213,14215],{"class":31,"line":1505},[29,14205,5539],{"class":305},[29,14207,11560],{"class":35},[29,14209,310],{"class":309},[29,14211,14212],{"class":305},"double",[29,14214,1574],{"class":5391},[29,14216,316],{"class":309},[29,14218,14219],{"class":31,"line":1788},[29,14220,1722],{"class":309},[29,14222,14223,14225,14227,14230,14232],{"class":31,"line":1793},[29,14224,6704],{"class":309},[29,14226,1351],{"class":305},[29,14228,14229],{"class":103}," \"func (double a)的调用！\"",[29,14231,1620],{"class":305},[29,14233,9015],{"class":309},[29,14235,14236],{"class":31,"line":1799},[29,14237,1741],{"class":309},[29,14239,14240,14242,14244,14246,14248,14250,14253,14255,14257],{"class":31,"line":1804},[29,14241,5539],{"class":305},[29,14243,11560],{"class":35},[29,14245,310],{"class":309},[29,14247,313],{"class":305},[29,14249,1574],{"class":5391},[29,14251,14252],{"class":309}," ,",[29,14254,14212],{"class":305},[29,14256,3008],{"class":5391},[29,14258,316],{"class":309},[29,14260,14261],{"class":31,"line":1818},[29,14262,1722],{"class":309},[29,14264,14265,14267,14269,14272,14274],{"class":31,"line":1823},[29,14266,6704],{"class":309},[29,14268,1351],{"class":305},[29,14270,14271],{"class":103}," \"func (int a ,double b) 的调用！\"",[29,14273,1620],{"class":305},[29,14275,9015],{"class":309},[29,14277,14278],{"class":31,"line":1829},[29,14279,1741],{"class":309},[29,14281,14282,14284,14286,14288,14290,14292,14294,14296,14298],{"class":31,"line":1850},[29,14283,5539],{"class":305},[29,14285,11560],{"class":35},[29,14287,310],{"class":309},[29,14289,14212],{"class":305},[29,14291,1574],{"class":5391},[29,14293,14252],{"class":309},[29,14295,313],{"class":305},[29,14297,3008],{"class":5391},[29,14299,316],{"class":309},[29,14301,14302],{"class":31,"line":1855},[29,14303,1722],{"class":309},[29,14305,14306,14308,14310,14313,14315],{"class":31,"line":1869},[29,14307,6704],{"class":309},[29,14309,1351],{"class":305},[29,14311,14312],{"class":103}," \"func (double a ,int b)的调用！\"",[29,14314,1620],{"class":305},[29,14316,9015],{"class":309},[29,14318,14319],{"class":31,"line":1874},[29,14320,1741],{"class":309},[29,14322,14323],{"class":31,"line":1903},[29,14324,2575],{"emptyLinePlaceholder":233},[29,14326,14327],{"class":31,"line":1908},[29,14328,14329],{"class":367},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[29,14331,14332],{"class":31,"line":1925},[29,14333,14334],{"class":367},"\u002F\u002Fint func(double a, int b)\n",[29,14336,14337],{"class":31,"line":1930},[29,14338,14339],{"class":367},"\u002F\u002F{\n",[29,14341,14342],{"class":31,"line":1935},[29,14343,14344],{"class":367},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[29,14346,14347],{"class":31,"line":1940},[29,14348,14349],{"class":367},"\u002F\u002F}\n",[29,14351,14352],{"class":31,"line":1954},[29,14353,2575],{"emptyLinePlaceholder":233},[29,14355,14356],{"class":31,"line":1959},[29,14357,2575],{"emptyLinePlaceholder":233},[29,14359,14360,14362,14364],{"class":31,"line":2752},[29,14361,313],{"class":305},[29,14363,2148],{"class":35},[29,14365,11028],{"class":309},[29,14367,14368],{"class":31,"line":2766},[29,14369,2575],{"emptyLinePlaceholder":233},[29,14371,14372,14374],{"class":31,"line":2774},[29,14373,13460],{"class":35},[29,14375,5811],{"class":309},[29,14377,14378,14380,14382,14384],{"class":31,"line":2779},[29,14379,13460],{"class":35},[29,14381,310],{"class":309},[29,14383,754],{"class":39},[29,14385,2894],{"class":309},[29,14387,14388,14390,14392,14394],{"class":31,"line":2785},[29,14389,13460],{"class":35},[29,14391,310],{"class":309},[29,14393,358],{"class":39},[29,14395,2894],{"class":309},[29,14397,14398,14400,14402,14404,14406,14408],{"class":31,"line":2791},[29,14399,13460],{"class":35},[29,14401,310],{"class":309},[29,14403,754],{"class":39},[29,14405,686],{"class":309},[29,14407,358],{"class":39},[29,14409,2894],{"class":309},[29,14411,14412,14414,14416,14418,14421,14423],{"class":31,"line":2796},[29,14413,13460],{"class":35},[29,14415,310],{"class":309},[29,14417,358],{"class":39},[29,14419,14420],{"class":309}," , ",[29,14422,754],{"class":39},[29,14424,2894],{"class":309},[29,14426,14427],{"class":31,"line":8123},[29,14428,13385],{"class":309},[29,14430,14431,14433,14435,14437],{"class":31,"line":8147},[29,14432,2478],{"class":35},[29,14434,310],{"class":309},[29,14436,2483],{"class":103},[29,14438,2894],{"class":309},[29,14440,14441],{"class":31,"line":8152},[29,14442,2575],{"emptyLinePlaceholder":233},[29,14444,14445,14447,14449],{"class":31,"line":8158},[29,14446,4265],{"class":305},[29,14448,4268],{"class":39},[29,14450,1468],{"class":309},[29,14452,14453],{"class":31,"line":8185},[29,14454,1741],{"class":309},[171,14456,14457],{},"重点：函数返回值不可以作为函数重载条件！",[275,14459,14461],{"id":14460},"_732注意事项","7.3.2注意事项",[175,14463,14464,14467],{},[178,14465,14466],{},"引用作为重载条件!!!",[178,14468,14469],{},"函数重载碰到函数默认参数",[19,14471,14473],{"className":296,"code":14472,"language":298,"meta":24,"style":24},"\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",[26,14474,14475,14480,14485,14489,14505,14509,14522,14526,14530,14548,14552,14565,14569,14573,14577,14582,14586,14610,14614,14627,14631,14635,14649,14653,14666,14670,14674,14682,14686,14698,14708,14721,14725,14729,14737,14741,14751,14755,14763],{"__ignoreMap":24},[29,14476,14477],{"class":31,"line":32},[29,14478,14479],{"class":367},"\u002F\u002F函数重载注意事项\n",[29,14481,14482],{"class":31,"line":43},[29,14483,14484],{"class":367},"\u002F\u002F1、引用作为重载条件\n",[29,14486,14487],{"class":31,"line":51},[29,14488,2575],{"emptyLinePlaceholder":233},[29,14490,14491,14493,14495,14497,14499,14501,14503],{"class":31,"line":59},[29,14492,5539],{"class":305},[29,14494,11560],{"class":35},[29,14496,310],{"class":309},[29,14498,313],{"class":305},[29,14500,10759],{"class":305},[29,14502,546],{"class":5391},[29,14504,316],{"class":309},[29,14506,14507],{"class":31,"line":67},[29,14508,1722],{"class":309},[29,14510,14511,14513,14515,14518,14520],{"class":31,"line":75},[29,14512,6704],{"class":309},[29,14514,1351],{"class":305},[29,14516,14517],{"class":103}," \"func (int &a) 调用 \"",[29,14519,1620],{"class":305},[29,14521,9015],{"class":309},[29,14523,14524],{"class":31,"line":83},[29,14525,1741],{"class":309},[29,14527,14528],{"class":31,"line":158},[29,14529,2575],{"emptyLinePlaceholder":233},[29,14531,14532,14534,14536,14538,14540,14542,14544,14546],{"class":31,"line":166},[29,14533,5539],{"class":305},[29,14535,11560],{"class":35},[29,14537,310],{"class":309},[29,14539,6967],{"class":305},[29,14541,2557],{"class":305},[29,14543,10759],{"class":305},[29,14545,546],{"class":5391},[29,14547,316],{"class":309},[29,14549,14550],{"class":31,"line":1505},[29,14551,1722],{"class":309},[29,14553,14554,14556,14558,14561,14563],{"class":31,"line":1788},[29,14555,6704],{"class":309},[29,14557,1351],{"class":305},[29,14559,14560],{"class":103}," \"func (const int &a) 调用 \"",[29,14562,1620],{"class":305},[29,14564,9015],{"class":309},[29,14566,14567],{"class":31,"line":1793},[29,14568,1741],{"class":309},[29,14570,14571],{"class":31,"line":1799},[29,14572,2575],{"emptyLinePlaceholder":233},[29,14574,14575],{"class":31,"line":1804},[29,14576,2575],{"emptyLinePlaceholder":233},[29,14578,14579],{"class":31,"line":1818},[29,14580,14581],{"class":367},"\u002F\u002F2、函数重载碰到函数默认参数\n",[29,14583,14584],{"class":31,"line":1823},[29,14585,2575],{"emptyLinePlaceholder":233},[29,14587,14588,14590,14592,14594,14596,14598,14600,14602,14604,14606,14608],{"class":31,"line":1829},[29,14589,5539],{"class":305},[29,14591,13793],{"class":35},[29,14593,310],{"class":309},[29,14595,313],{"class":305},[29,14597,1574],{"class":5391},[29,14599,12610],{"class":309},[29,14601,313],{"class":305},[29,14603,3008],{"class":5391},[29,14605,13739],{"class":305},[29,14607,2213],{"class":39},[29,14609,316],{"class":309},[29,14611,14612],{"class":31,"line":1850},[29,14613,1722],{"class":309},[29,14615,14616,14618,14620,14623,14625],{"class":31,"line":1855},[29,14617,6704],{"class":309},[29,14619,1351],{"class":305},[29,14621,14622],{"class":103}," \"func2(int a, int b = 10) 调用\"",[29,14624,1620],{"class":305},[29,14626,9015],{"class":309},[29,14628,14629],{"class":31,"line":1869},[29,14630,1741],{"class":309},[29,14632,14633],{"class":31,"line":1874},[29,14634,2575],{"emptyLinePlaceholder":233},[29,14636,14637,14639,14641,14643,14645,14647],{"class":31,"line":1903},[29,14638,5539],{"class":305},[29,14640,13793],{"class":35},[29,14642,310],{"class":309},[29,14644,313],{"class":305},[29,14646,1574],{"class":5391},[29,14648,316],{"class":309},[29,14650,14651],{"class":31,"line":1908},[29,14652,1722],{"class":309},[29,14654,14655,14657,14659,14662,14664],{"class":31,"line":1925},[29,14656,6704],{"class":309},[29,14658,1351],{"class":305},[29,14660,14661],{"class":103}," \"func2(int a) 调用\"",[29,14663,1620],{"class":305},[29,14665,9015],{"class":309},[29,14667,14668],{"class":31,"line":1930},[29,14669,1741],{"class":309},[29,14671,14672],{"class":31,"line":1935},[29,14673,2575],{"emptyLinePlaceholder":233},[29,14675,14676,14678,14680],{"class":31,"line":1940},[29,14677,313],{"class":305},[29,14679,2148],{"class":35},[29,14681,11028],{"class":309},[29,14683,14684],{"class":31,"line":1954},[29,14685,13385],{"class":309},[29,14687,14688,14690,14692,14694,14696],{"class":31,"line":1959},[29,14689,2160],{"class":305},[29,14691,11044],{"class":309},[29,14693,355],{"class":305},[29,14695,2213],{"class":39},[29,14697,1468],{"class":309},[29,14699,14700,14702,14705],{"class":31,"line":2752},[29,14701,13460],{"class":35},[29,14703,14704],{"class":309},"(a);",[29,14706,14707],{"class":367}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[29,14709,14710,14712,14714,14716,14718],{"class":31,"line":2766},[29,14711,13460],{"class":35},[29,14713,310],{"class":309},[29,14715,754],{"class":39},[29,14717,6141],{"class":309},[29,14719,14720],{"class":367},"\u002F\u002F调用有const   10是个常量\n",[29,14722,14723],{"class":31,"line":2774},[29,14724,2575],{"emptyLinePlaceholder":233},[29,14726,14727],{"class":31,"line":2779},[29,14728,2575],{"emptyLinePlaceholder":233},[29,14730,14731,14734],{"class":31,"line":2785},[29,14732,14733],{"class":367},"    \u002F\u002Ffunc2(10);",[29,14735,14736],{"class":367}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[29,14738,14739],{"class":31,"line":2791},[29,14740,2575],{"emptyLinePlaceholder":233},[29,14742,14743,14745,14747,14749],{"class":31,"line":2796},[29,14744,2478],{"class":35},[29,14746,310],{"class":309},[29,14748,2483],{"class":103},[29,14750,2894],{"class":309},[29,14752,14753],{"class":31,"line":8123},[29,14754,2575],{"emptyLinePlaceholder":233},[29,14756,14757,14759,14761],{"class":31,"line":8147},[29,14758,4265],{"class":305},[29,14760,4268],{"class":39},[29,14762,1468],{"class":309},[29,14764,14765],{"class":31,"line":8152},[29,14766,1741],{"class":309},[223,14768,14769],{},"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":24,"searchDepth":43,"depth":43,"links":14771},[14772,14773,14774],{"id":13704,"depth":43,"text":13705},{"id":13961,"depth":43,"text":13962},{"id":14083,"depth":43,"text":14084,"children":14775},[14776,14777],{"id":14090,"depth":51,"text":14091},{"id":14460,"depth":51,"text":14461},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13696,"description":24},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14784,"title":14785,"body":14786,"description":23540,"extension":231,"meta":23541,"navigation":233,"path":23542,"seo":23543,"stem":23544,"__hash__":23545},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14787,"toc":23521},[14788,14791,14797,14804,14809,14812,14815,14818,14822,14826,14829,14832,14840,14845,14848,14855,14860,15019,15022,15275,15278,15281,15284,15289,15292,15295,15306,15311,15547,15551,15561,15564,15572,15719,15723,15726,15729,15733,16178,16182,16190,16198,17110,17117,17122,17750,17753,17756,17759,17878,17881,17968,17971,18097,18100,18194,18197,18550,18554,18562,18566,18573,18576,18579,18590,18596,18601,18613,18621,18641,18649,18666,18852,18855,18859,18862,18865,18868,18871,18874,18877,18880,19340,19346,19350,19353,19364,19951,19954,20443,20447,20450,20453,20456,20459,20462,20470,20866,20870,20873,20876,21323,21326,21329,21334,21337,21342,21345,21349,21352,21354,21360,21363,21669,21679,21720,21724,21727,21729,21762,21765,22072,22074,22089,22092,22115,22124,22130,22133,22137,22140,22143,22148,22159,22164,22172,22177,22307,22310,22313,22488,22493,22705,22709,22712,22826,22831,23070,23074,23078,23081,23084,23089,23194,23197,23200,23203,23207,23318,23321,23324,23329,23381,23384,23387,23392,23438,23441,23446,23514,23516,23519],[10,14789,14785],{"id":14790},"_8类和对象",[171,14792,14793,14794],{},"C++面向对象的三大特性为",[457,14795,14796],{},"封装、继承、多态",[171,14798,14799,14800,14803],{},"C++认为",[457,14801,14802],{},"万事万物都皆为对象","，对象上有其属性和行为",[171,14805,14806],{},[457,14807,14808],{},"例如：",[171,14810,14811],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[171,14813,14814],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[171,14816,14817],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14819,14821],{"id":14820},"_81封装","8.1封装",[275,14823,14825],{"id":14824},"_811封装的意义","8.1.1封装的意义",[171,14827,14828],{},"封装是C++面向对象三大特性之一",[171,14830,14831],{},"封装的意义：",[175,14833,14834,14837],{},[178,14835,14836],{},"将属性和行为作为一个整体，表现生活中的事物",[178,14838,14839],{},"将属性和行为加以权限控制",[171,14841,14842],{},[457,14843,14844],{},"封装意义一：",[171,14846,14847],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[171,14849,14850,13970,14852],{},[457,14851,5356],{},[26,14853,14854],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[259,14856,14857],{},[178,14858,14859],{},"**示例1：**设计一个圆类，求圆的周长",[19,14861,14863],{"className":296,"code":14862,"language":298,"meta":24,"style":24},"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",[26,14864,14865,14873,14877,14882,14887,14892,14897,14904,14909,14919,14923,14941,14945,14949,14957,14961,14966,14971,14976,14981,14992,15015],{"__ignoreMap":24},[29,14866,14867,14870],{"class":31,"line":32},[29,14868,14869],{"class":305},"class",[29,14871,14872],{"class":35}," Circle\n",[29,14874,14875],{"class":31,"line":43},[29,14876,1722],{"class":309},[29,14878,14879],{"class":31,"line":51},[29,14880,14881],{"class":367},"    \u002F\u002F访问权限\n",[29,14883,14884],{"class":31,"line":59},[29,14885,14886],{"class":367},"    \u002F\u002F公共权限\n",[29,14888,14889],{"class":31,"line":67},[29,14890,14891],{"class":305},"public:\n",[29,14893,14894],{"class":31,"line":75},[29,14895,14896],{"class":367},"    \u002F\u002F属性\n",[29,14898,14899,14901],{"class":31,"line":83},[29,14900,2160],{"class":305},[29,14902,14903],{"class":309}," m_r;\n",[29,14905,14906],{"class":31,"line":158},[29,14907,14908],{"class":367},"    \u002F\u002F行为\n",[29,14910,14911,14914,14917],{"class":31,"line":166},[29,14912,14913],{"class":305},"    double",[29,14915,14916],{"class":35}," calculateZC",[29,14918,2151],{"class":309},[29,14920,14921],{"class":31,"line":1505},[29,14922,2205],{"class":309},[29,14924,14925,14928,14931,14933,14936,14938],{"class":31,"line":1788},[29,14926,14927],{"class":305},"        return",[29,14929,14930],{"class":39}," 2",[29,14932,763],{"class":305},[29,14934,14935],{"class":309},"PI",[29,14937,763],{"class":305},[29,14939,14940],{"class":309},"m_r;\n",[29,14942,14943],{"class":31,"line":1793},[29,14944,2362],{"class":309},[29,14946,14947],{"class":31,"line":1799},[29,14948,4170],{"class":309},[29,14950,14951,14953,14955],{"class":31,"line":1804},[29,14952,313],{"class":305},[29,14954,2148],{"class":35},[29,14956,2151],{"class":309},[29,14958,14959],{"class":31,"line":1818},[29,14960,1722],{"class":309},[29,14962,14963],{"class":31,"line":1823},[29,14964,14965],{"class":367},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[29,14967,14968],{"class":31,"line":1829},[29,14969,14970],{"class":367},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[29,14972,14973],{"class":31,"line":1850},[29,14974,14975],{"class":309},"    Circle c1;\n",[29,14977,14978],{"class":31,"line":1855},[29,14979,14980],{"class":367},"    \u002F\u002F给圆对象 的属性进行赋值\n",[29,14982,14983,14986,14988,14990],{"class":31,"line":1869},[29,14984,14985],{"class":309},"    c1.m_r",[29,14987,355],{"class":305},[29,14989,754],{"class":39},[29,14991,1468],{"class":309},[29,14993,14994,14996,14998,15001,15003,15006,15009,15011,15013],{"class":31,"line":1874},[29,14995,1727],{"class":309},[29,14997,1351],{"class":305},[29,14999,15000],{"class":103},"\"圆的周长\"",[29,15002,1351],{"class":305},[29,15004,15005],{"class":309},"c1.",[29,15007,15008],{"class":35},"calculateZC",[29,15010,2602],{"class":309},[29,15012,1351],{"class":305},[29,15014,1373],{"class":309},[29,15016,15017],{"class":31,"line":1903},[29,15018,1741],{"class":309},[171,15020,15021],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[19,15023,15025],{"className":296,"code":15024,"language":298,"meta":24,"style":24},"#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",[26,15026,15027,15033,15043,15049,15055,15059,15063,15068,15075,15080,15098,15102,15112,15116,15121,15137,15141,15151,15155,15160,15168,15172,15204,15208,15212,15220,15224,15229,15234,15248,15262,15271],{"__ignoreMap":24},[29,15028,15029,15031],{"class":31,"line":32},[29,15030,2125],{"class":305},[29,15032,2128],{"class":103},[29,15034,15035,15037,15039,15041],{"class":31,"line":43},[29,15036,2133],{"class":305},[29,15038,2136],{"class":305},[29,15040,2139],{"class":35},[29,15042,1468],{"class":309},[29,15044,15045,15047],{"class":31,"line":51},[29,15046,2125],{"class":305},[29,15048,7924],{"class":103},[29,15050,15051,15053],{"class":31,"line":59},[29,15052,14869],{"class":305},[29,15054,7937],{"class":35},[29,15056,15057],{"class":31,"line":67},[29,15058,1722],{"class":309},[29,15060,15061],{"class":31,"line":75},[29,15062,14891],{"class":305},[29,15064,15065],{"class":31,"line":83},[29,15066,15067],{"class":309},"    string m_name;\n",[29,15069,15070,15072],{"class":31,"line":158},[29,15071,2160],{"class":305},[29,15073,15074],{"class":309}," m_id;\n",[29,15076,15077],{"class":31,"line":166},[29,15078,15079],{"class":367},"    \u002F\u002F赋值姓名\n",[29,15081,15082,15085,15088,15090,15093,15096],{"class":31,"line":1505},[29,15083,15084],{"class":305},"    void",[29,15086,15087],{"class":35}," setName",[29,15089,310],{"class":309},[29,15091,15092],{"class":35},"string",[29,15094,15095],{"class":5391}," name",[29,15097,316],{"class":309},[29,15099,15100],{"class":31,"line":1788},[29,15101,2205],{"class":309},[29,15103,15104,15107,15109],{"class":31,"line":1793},[29,15105,15106],{"class":309},"        m_name",[29,15108,355],{"class":305},[29,15110,15111],{"class":309},"name;\n",[29,15113,15114],{"class":31,"line":1799},[29,15115,2362],{"class":309},[29,15117,15118],{"class":31,"line":1804},[29,15119,15120],{"class":367},"    \u002F\u002F赋值学号\n",[29,15122,15123,15125,15128,15130,15132,15135],{"class":31,"line":1818},[29,15124,15084],{"class":305},[29,15126,15127],{"class":35}," setId",[29,15129,310],{"class":309},[29,15131,313],{"class":305},[29,15133,15134],{"class":5391}," id",[29,15136,316],{"class":309},[29,15138,15139],{"class":31,"line":1823},[29,15140,2205],{"class":309},[29,15142,15143,15146,15148],{"class":31,"line":1829},[29,15144,15145],{"class":309},"        m_id",[29,15147,355],{"class":305},[29,15149,15150],{"class":309},"id;\n",[29,15152,15153],{"class":31,"line":1850},[29,15154,2362],{"class":309},[29,15156,15157],{"class":31,"line":1855},[29,15158,15159],{"class":367},"    \u002F\u002F打印学生信息\n",[29,15161,15162,15164,15166],{"class":31,"line":1869},[29,15163,15084],{"class":305},[29,15165,9790],{"class":35},[29,15167,2151],{"class":309},[29,15169,15170],{"class":31,"line":1874},[29,15171,2205],{"class":309},[29,15173,15174,15176,15178,15181,15183,15186,15188,15190,15192,15195,15197,15200,15202],{"class":31,"line":1903},[29,15175,3626],{"class":309},[29,15177,1351],{"class":305},[29,15179,15180],{"class":103},"\"姓名：\"",[29,15182,1351],{"class":305},[29,15184,15185],{"class":309},"m_name",[29,15187,1351],{"class":305},[29,15189,4534],{"class":103},[29,15191,1351],{"class":305},[29,15193,15194],{"class":103},"\"学号：\"",[29,15196,1351],{"class":305},[29,15198,15199],{"class":309},"m_id",[29,15201,1351],{"class":305},[29,15203,1373],{"class":309},[29,15205,15206],{"class":31,"line":1908},[29,15207,2362],{"class":309},[29,15209,15210],{"class":31,"line":1925},[29,15211,4170],{"class":309},[29,15213,15214,15216,15218],{"class":31,"line":1930},[29,15215,313],{"class":305},[29,15217,2148],{"class":35},[29,15219,2151],{"class":309},[29,15221,15222],{"class":31,"line":1935},[29,15223,1722],{"class":309},[29,15225,15226],{"class":31,"line":1940},[29,15227,15228],{"class":367},"    \u002F\u002F实例化\n",[29,15230,15231],{"class":31,"line":1954},[29,15232,15233],{"class":309},"    Student s1;\n",[29,15235,15236,15239,15242,15244,15246],{"class":31,"line":1959},[29,15237,15238],{"class":309},"    s1.",[29,15240,15241],{"class":35},"setName",[29,15243,310],{"class":309},[29,15245,8091],{"class":103},[29,15247,2894],{"class":309},[29,15249,15250,15252,15255,15257,15260],{"class":31,"line":2752},[29,15251,15238],{"class":309},[29,15253,15254],{"class":35},"setId",[29,15256,310],{"class":309},[29,15258,15259],{"class":39},"123456",[29,15261,2894],{"class":309},[29,15263,15264,15266,15269],{"class":31,"line":2766},[29,15265,15238],{"class":309},[29,15267,15268],{"class":35},"printInfo",[29,15270,5811],{"class":309},[29,15272,15273],{"class":31,"line":2774},[29,15274,1741],{"class":309},[171,15276,15277],{},"类中的属性和行为统称为成员",[171,15279,15280],{},"属性：成员属性(成员变量)",[171,15282,15283],{},"方法：成员函数(成员方法)",[171,15285,15286],{},[457,15287,15288],{},"封装意义二：",[171,15290,15291],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[171,15293,15294],{},"访问权限有三种：",[259,15296,15297,15300,15303],{},[178,15298,15299],{},"public        公共权限",[178,15301,15302],{},"protected 保护权限",[178,15304,15305],{},"private      私有权限",[171,15307,15308],{},[457,15309,15310],{},"示例：",[19,15312,15314],{"className":10116,"code":15313,"language":10118,"meta":24,"style":24},"\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",[26,15315,15316,15321,15326,15331,15336,15340,15347,15351,15356,15360,15365,15369,15374,15379,15384,15388,15393,15398,15405,15409,15413,15421,15425,15436,15448,15460,15464,15468,15472,15480,15484,15489,15501,15509,15517,15521,15531,15535,15543],{"__ignoreMap":24},[29,15317,15318],{"class":31,"line":32},[29,15319,15320],{"class":367},"\u002F\u002F三种权限\n",[29,15322,15323],{"class":31,"line":43},[29,15324,15325],{"class":367},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[29,15327,15328],{"class":31,"line":51},[29,15329,15330],{"class":367},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[29,15332,15333],{"class":31,"line":59},[29,15334,15335],{"class":367},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[29,15337,15338],{"class":31,"line":67},[29,15339,2575],{"emptyLinePlaceholder":233},[29,15341,15342,15344],{"class":31,"line":75},[29,15343,14869],{"class":305},[29,15345,15346],{"class":35}," Person\n",[29,15348,15349],{"class":31,"line":83},[29,15350,1722],{"class":309},[29,15352,15353],{"class":31,"line":158},[29,15354,15355],{"class":367},"    \u002F\u002F姓名  公共权限\n",[29,15357,15358],{"class":31,"line":166},[29,15359,14891],{"class":305},[29,15361,15362],{"class":31,"line":1505},[29,15363,15364],{"class":309},"    string m_Name;\n",[29,15366,15367],{"class":31,"line":1788},[29,15368,2575],{"emptyLinePlaceholder":233},[29,15370,15371],{"class":31,"line":1793},[29,15372,15373],{"class":367},"    \u002F\u002F汽车  保护权限\n",[29,15375,15376],{"class":31,"line":1799},[29,15377,15378],{"class":305},"protected:\n",[29,15380,15381],{"class":31,"line":1804},[29,15382,15383],{"class":309},"    string m_Car;\n",[29,15385,15386],{"class":31,"line":1818},[29,15387,2575],{"emptyLinePlaceholder":233},[29,15389,15390],{"class":31,"line":1823},[29,15391,15392],{"class":367},"    \u002F\u002F银行卡密码  私有权限\n",[29,15394,15395],{"class":31,"line":1829},[29,15396,15397],{"class":305},"private:\n",[29,15399,15400,15402],{"class":31,"line":1850},[29,15401,2160],{"class":305},[29,15403,15404],{"class":309}," m_Password;\n",[29,15406,15407],{"class":31,"line":1855},[29,15408,2575],{"emptyLinePlaceholder":233},[29,15410,15411],{"class":31,"line":1869},[29,15412,14891],{"class":305},[29,15414,15415,15417,15419],{"class":31,"line":1874},[29,15416,15084],{"class":305},[29,15418,11560],{"class":35},[29,15420,2151],{"class":309},[29,15422,15423],{"class":31,"line":1903},[29,15424,2205],{"class":309},[29,15426,15427,15430,15432,15434],{"class":31,"line":1908},[29,15428,15429],{"class":309},"        m_Name ",[29,15431,355],{"class":305},[29,15433,9113],{"class":103},[29,15435,1468],{"class":309},[29,15437,15438,15441,15443,15446],{"class":31,"line":1925},[29,15439,15440],{"class":309},"        m_Car ",[29,15442,355],{"class":305},[29,15444,15445],{"class":103}," \"拖拉机\"",[29,15447,1468],{"class":309},[29,15449,15450,15453,15455,15458],{"class":31,"line":1930},[29,15451,15452],{"class":309},"        m_Password ",[29,15454,355],{"class":305},[29,15456,15457],{"class":39}," 123456",[29,15459,1468],{"class":309},[29,15461,15462],{"class":31,"line":1935},[29,15463,2362],{"class":309},[29,15465,15466],{"class":31,"line":1940},[29,15467,4170],{"class":309},[29,15469,15470],{"class":31,"line":1954},[29,15471,2575],{"emptyLinePlaceholder":233},[29,15473,15474,15476,15478],{"class":31,"line":1959},[29,15475,313],{"class":305},[29,15477,2148],{"class":35},[29,15479,11028],{"class":309},[29,15481,15482],{"class":31,"line":2752},[29,15483,2575],{"emptyLinePlaceholder":233},[29,15485,15486],{"class":31,"line":2766},[29,15487,15488],{"class":309},"    Person p;\n",[29,15490,15491,15494,15496,15499],{"class":31,"line":2774},[29,15492,15493],{"class":309},"    p.m_Name ",[29,15495,355],{"class":305},[29,15497,15498],{"class":103}," \"李四\"",[29,15500,1468],{"class":309},[29,15502,15503,15506],{"class":31,"line":2779},[29,15504,15505],{"class":367},"    \u002F\u002Fp.m_Car = \"奔驰\";",[29,15507,15508],{"class":367},"  \u002F\u002F保护权限类外访问不到\n",[29,15510,15511,15514],{"class":31,"line":2785},[29,15512,15513],{"class":367},"    \u002F\u002Fp.m_Password = 123;",[29,15515,15516],{"class":367}," \u002F\u002F私有权限类外访问不到\n",[29,15518,15519],{"class":31,"line":2791},[29,15520,2575],{"emptyLinePlaceholder":233},[29,15522,15523,15525,15527,15529],{"class":31,"line":2796},[29,15524,2478],{"class":35},[29,15526,310],{"class":309},[29,15528,2483],{"class":103},[29,15530,2894],{"class":309},[29,15532,15533],{"class":31,"line":8123},[29,15534,2575],{"emptyLinePlaceholder":233},[29,15536,15537,15539,15541],{"class":31,"line":8147},[29,15538,4265],{"class":305},[29,15540,4268],{"class":39},[29,15542,1468],{"class":309},[29,15544,15545],{"class":31,"line":8152},[29,15546,1741],{"class":309},[275,15548,15550],{"id":15549},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[171,15552,15553,15554,15557,15558],{},"在C++中 struct和class唯一的",[457,15555,15556],{},"区别","就在于 ",[457,15559,15560],{},"默认的访问权限不同",[171,15562,15563],{},"区别：",[175,15565,15566,15569],{},[178,15567,15568],{},"struct 默认权限为公共",[178,15570,15571],{},"class   默认权限为私有",[19,15573,15575],{"className":10116,"code":15574,"language":10118,"meta":24,"style":24},"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",[26,15576,15577,15584,15588,15598,15602,15606,15613,15617,15627,15631,15635,15643,15647,15652,15666,15670,15675,15689,15693,15703,15707,15715],{"__ignoreMap":24},[29,15578,15579,15581],{"class":31,"line":32},[29,15580,14869],{"class":305},[29,15582,15583],{"class":35}," C1\n",[29,15585,15586],{"class":31,"line":43},[29,15587,1722],{"class":309},[29,15589,15590,15592,15595],{"class":31,"line":51},[29,15591,2160],{"class":305},[29,15593,15594],{"class":309},"  m_A;",[29,15596,15597],{"class":367}," \u002F\u002F默认是私有权限\n",[29,15599,15600],{"class":31,"line":59},[29,15601,4170],{"class":309},[29,15603,15604],{"class":31,"line":67},[29,15605,2575],{"emptyLinePlaceholder":233},[29,15607,15608,15610],{"class":31,"line":75},[29,15609,7934],{"class":305},[29,15611,15612],{"class":35}," C2\n",[29,15614,15615],{"class":31,"line":83},[29,15616,1722],{"class":309},[29,15618,15619,15621,15624],{"class":31,"line":158},[29,15620,2160],{"class":305},[29,15622,15623],{"class":309}," m_A;",[29,15625,15626],{"class":367},"  \u002F\u002F默认是公共权限\n",[29,15628,15629],{"class":31,"line":166},[29,15630,4170],{"class":309},[29,15632,15633],{"class":31,"line":1505},[29,15634,2575],{"emptyLinePlaceholder":233},[29,15636,15637,15639,15641],{"class":31,"line":1788},[29,15638,313],{"class":305},[29,15640,2148],{"class":35},[29,15642,11028],{"class":309},[29,15644,15645],{"class":31,"line":1793},[29,15646,2575],{"emptyLinePlaceholder":233},[29,15648,15649],{"class":31,"line":1799},[29,15650,15651],{"class":309},"    C1 c1;\n",[29,15653,15654,15657,15659,15661,15663],{"class":31,"line":1804},[29,15655,15656],{"class":309},"    c1.m_A ",[29,15658,355],{"class":305},[29,15660,2213],{"class":39},[29,15662,364],{"class":309},[29,15664,15665],{"class":367}," \u002F\u002F错误，访问权限是私有\n",[29,15667,15668],{"class":31,"line":1818},[29,15669,2575],{"emptyLinePlaceholder":233},[29,15671,15672],{"class":31,"line":1823},[29,15673,15674],{"class":309},"    C2 c2;\n",[29,15676,15677,15680,15682,15684,15686],{"class":31,"line":1829},[29,15678,15679],{"class":309},"    c2.m_A ",[29,15681,355],{"class":305},[29,15683,2213],{"class":39},[29,15685,364],{"class":309},[29,15687,15688],{"class":367}," \u002F\u002F正确，访问权限是公共\n",[29,15690,15691],{"class":31,"line":1850},[29,15692,2575],{"emptyLinePlaceholder":233},[29,15694,15695,15697,15699,15701],{"class":31,"line":1855},[29,15696,2478],{"class":35},[29,15698,310],{"class":309},[29,15700,2483],{"class":103},[29,15702,2894],{"class":309},[29,15704,15705],{"class":31,"line":1869},[29,15706,2575],{"emptyLinePlaceholder":233},[29,15708,15709,15711,15713],{"class":31,"line":1874},[29,15710,4265],{"class":305},[29,15712,4268],{"class":39},[29,15714,1468],{"class":309},[29,15716,15717],{"class":31,"line":1903},[29,15718,1741],{"class":309},[275,15720,15722],{"id":15721},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[171,15724,15725],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[171,15727,15728],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[171,15730,15731],{},[457,15732,15310],{},[19,15734,15736],{"className":10116,"code":15735,"language":10118,"meta":24,"style":24},"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",[26,15737,15738,15748,15752,15756,15761,15775,15784,15788,15798,15802,15809,15813,15817,15821,15826,15835,15842,15846,15851,15867,15890,15903,15910,15914,15923,15927,15931,15936,15952,15962,15966,15970,15974,15982,15986,15996,16000,16008,16012,16016,16024,16028,16032,16037,16050,16073,16077,16082,16095,16117,16121,16126,16140,16148,16152,16162,16166,16174],{"__ignoreMap":24},[29,15739,15740,15742,15745],{"class":31,"line":32},[29,15741,14869],{"class":305},[29,15743,15744],{"class":35}," Person",[29,15746,15747],{"class":309}," {\n",[29,15749,15750],{"class":31,"line":43},[29,15751,14891],{"class":305},[29,15753,15754],{"class":31,"line":51},[29,15755,2575],{"emptyLinePlaceholder":233},[29,15757,15758],{"class":31,"line":59},[29,15759,15760],{"class":367},"    \u002F\u002F姓名设置可读可写\n",[29,15762,15763,15765,15767,15769,15771,15773],{"class":31,"line":67},[29,15764,15084],{"class":305},[29,15766,15087],{"class":35},[29,15768,310],{"class":309},[29,15770,15092],{"class":35},[29,15772,15095],{"class":5391},[29,15774,12617],{"class":309},[29,15776,15777,15779,15781],{"class":31,"line":75},[29,15778,15429],{"class":309},[29,15780,355],{"class":305},[29,15782,15783],{"class":309}," name;\n",[29,15785,15786],{"class":31,"line":83},[29,15787,2362],{"class":309},[29,15789,15790,15793,15796],{"class":31,"line":158},[29,15791,15792],{"class":35},"    string",[29,15794,15795],{"class":35}," getName",[29,15797,2151],{"class":309},[29,15799,15800],{"class":31,"line":166},[29,15801,2205],{"class":309},[29,15803,15804,15806],{"class":31,"line":1505},[29,15805,14927],{"class":305},[29,15807,15808],{"class":309}," m_Name;\n",[29,15810,15811],{"class":31,"line":1788},[29,15812,2362],{"class":309},[29,15814,15815],{"class":31,"line":1793},[29,15816,2575],{"emptyLinePlaceholder":233},[29,15818,15819],{"class":31,"line":1799},[29,15820,2575],{"emptyLinePlaceholder":233},[29,15822,15823],{"class":31,"line":1804},[29,15824,15825],{"class":367},"    \u002F\u002F获取年龄 \n",[29,15827,15828,15830,15833],{"class":31,"line":1818},[29,15829,2160],{"class":305},[29,15831,15832],{"class":35}," getAge",[29,15834,11028],{"class":309},[29,15836,15837,15839],{"class":31,"line":1823},[29,15838,14927],{"class":305},[29,15840,15841],{"class":309}," m_Age;\n",[29,15843,15844],{"class":31,"line":1829},[29,15845,2362],{"class":309},[29,15847,15848],{"class":31,"line":1850},[29,15849,15850],{"class":367},"    \u002F\u002F设置年龄\n",[29,15852,15853,15855,15858,15860,15862,15865],{"class":31,"line":1855},[29,15854,15084],{"class":305},[29,15856,15857],{"class":35}," setAge",[29,15859,310],{"class":309},[29,15861,313],{"class":305},[29,15863,15864],{"class":5391}," age",[29,15866,12617],{"class":309},[29,15868,15869,15871,15874,15876,15878,15880,15883,15885,15888],{"class":31,"line":1869},[29,15870,2672],{"class":305},[29,15872,15873],{"class":309}," (age ",[29,15875,1218],{"class":305},[29,15877,4268],{"class":39},[29,15879,3430],{"class":305},[29,15881,15882],{"class":309}," age ",[29,15884,1268],{"class":305},[29,15886,15887],{"class":39}," 150",[29,15889,12617],{"class":309},[29,15891,15892,15894,15896,15899,15901],{"class":31,"line":1874},[29,15893,9894],{"class":309},[29,15895,1351],{"class":305},[29,15897,15898],{"class":103}," \"你个老妖精!\"",[29,15900,1620],{"class":305},[29,15902,9015],{"class":309},[29,15904,15905,15908],{"class":31,"line":1903},[29,15906,15907],{"class":305},"            return",[29,15909,1468],{"class":309},[29,15911,15912],{"class":31,"line":1908},[29,15913,2704],{"class":309},[29,15915,15916,15919,15921],{"class":31,"line":1925},[29,15917,15918],{"class":309},"        m_Age ",[29,15920,355],{"class":305},[29,15922,7972],{"class":309},[29,15924,15925],{"class":31,"line":1930},[29,15926,2362],{"class":309},[29,15928,15929],{"class":31,"line":1935},[29,15930,2575],{"emptyLinePlaceholder":233},[29,15932,15933],{"class":31,"line":1940},[29,15934,15935],{"class":367},"    \u002F\u002F情人设置为只写\n",[29,15937,15938,15940,15943,15945,15947,15950],{"class":31,"line":1954},[29,15939,15084],{"class":305},[29,15941,15942],{"class":35}," setLover",[29,15944,310],{"class":309},[29,15946,15092],{"class":35},[29,15948,15949],{"class":5391}," lover",[29,15951,12617],{"class":309},[29,15953,15954,15957,15959],{"class":31,"line":1959},[29,15955,15956],{"class":309},"        m_Lover ",[29,15958,355],{"class":305},[29,15960,15961],{"class":309}," lover;\n",[29,15963,15964],{"class":31,"line":2752},[29,15965,2362],{"class":309},[29,15967,15968],{"class":31,"line":2766},[29,15969,2575],{"emptyLinePlaceholder":233},[29,15971,15972],{"class":31,"line":2774},[29,15973,15397],{"class":305},[29,15975,15976,15979],{"class":31,"line":2779},[29,15977,15978],{"class":309},"    string m_Name;",[29,15980,15981],{"class":367}," \u002F\u002F可读可写  姓名\n",[29,15983,15984],{"class":31,"line":2785},[29,15985,13385],{"class":309},[29,15987,15988,15990,15993],{"class":31,"line":2791},[29,15989,2160],{"class":305},[29,15991,15992],{"class":309}," m_Age;",[29,15994,15995],{"class":367}," \u002F\u002F只读  年龄\n",[29,15997,15998],{"class":31,"line":2796},[29,15999,2575],{"emptyLinePlaceholder":233},[29,16001,16002,16005],{"class":31,"line":8123},[29,16003,16004],{"class":309},"    string m_Lover;",[29,16006,16007],{"class":367}," \u002F\u002F只写  情人\n",[29,16009,16010],{"class":31,"line":8147},[29,16011,4170],{"class":309},[29,16013,16014],{"class":31,"line":8152},[29,16015,2575],{"emptyLinePlaceholder":233},[29,16017,16018,16020,16022],{"class":31,"line":8158},[29,16019,313],{"class":305},[29,16021,2148],{"class":35},[29,16023,11028],{"class":309},[29,16025,16026],{"class":31,"line":8185},[29,16027,2575],{"emptyLinePlaceholder":233},[29,16029,16030],{"class":31,"line":8190},[29,16031,15488],{"class":309},[29,16033,16034],{"class":31,"line":8196},[29,16035,16036],{"class":367},"    \u002F\u002F姓名设置\n",[29,16038,16039,16042,16044,16046,16048],{"class":31,"line":8208},[29,16040,16041],{"class":309},"    p.",[29,16043,15241],{"class":35},[29,16045,310],{"class":309},[29,16047,8091],{"class":103},[29,16049,2894],{"class":309},[29,16051,16052,16054,16056,16059,16061,16064,16067,16069,16071],{"class":31,"line":8220},[29,16053,6704],{"class":309},[29,16055,1351],{"class":305},[29,16057,16058],{"class":103}," \"姓名： \"",[29,16060,1620],{"class":305},[29,16062,16063],{"class":309}," p.",[29,16065,16066],{"class":35},"getName",[29,16068,13225],{"class":309},[29,16070,1351],{"class":305},[29,16072,9015],{"class":309},[29,16074,16075],{"class":31,"line":8232},[29,16076,2575],{"emptyLinePlaceholder":233},[29,16078,16079],{"class":31,"line":9891},[29,16080,16081],{"class":367},"    \u002F\u002F年龄设置\n",[29,16083,16084,16086,16089,16091,16093],{"class":31,"line":9916},[29,16085,16041],{"class":309},[29,16087,16088],{"class":35},"setAge",[29,16090,310],{"class":309},[29,16092,964],{"class":39},[29,16094,2894],{"class":309},[29,16096,16097,16099,16101,16104,16106,16108,16111,16113,16115],{"class":31,"line":9939},[29,16098,6704],{"class":309},[29,16100,1351],{"class":305},[29,16102,16103],{"class":103}," \"年龄： \"",[29,16105,1620],{"class":305},[29,16107,16063],{"class":309},[29,16109,16110],{"class":35},"getAge",[29,16112,13225],{"class":309},[29,16114,1351],{"class":305},[29,16116,9015],{"class":309},[29,16118,16119],{"class":31,"line":9963},[29,16120,2575],{"emptyLinePlaceholder":233},[29,16122,16123],{"class":31,"line":9968},[29,16124,16125],{"class":367},"    \u002F\u002F情人设置\n",[29,16127,16128,16130,16133,16135,16138],{"class":31,"line":9973},[29,16129,16041],{"class":309},[29,16131,16132],{"class":35},"setLover",[29,16134,310],{"class":309},[29,16136,16137],{"class":103},"\"苍井\"",[29,16139,2894],{"class":309},[29,16141,16142,16145],{"class":31,"line":9978},[29,16143,16144],{"class":367},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[29,16146,16147],{"class":367},"  \u002F\u002F只写属性，不可以读取\n",[29,16149,16150],{"class":31,"line":9987},[29,16151,2575],{"emptyLinePlaceholder":233},[29,16153,16154,16156,16158,16160],{"class":31,"line":9992},[29,16155,2478],{"class":35},[29,16157,310],{"class":309},[29,16159,2483],{"class":103},[29,16161,2894],{"class":309},[29,16163,16164],{"class":31,"line":9998},[29,16165,2575],{"emptyLinePlaceholder":233},[29,16167,16168,16170,16172],{"class":31,"line":10019},[29,16169,4265],{"class":305},[29,16171,4268],{"class":39},[29,16173,1468],{"class":309},[29,16175,16176],{"class":31,"line":10025},[29,16177,1741],{"class":309},[275,16179,16181],{"id":16180},"_814封装案例","8.1.4封装案例",[259,16183,16184],{},[178,16185,16186,16189],{},[457,16187,16188],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[175,16191,16192,16195],{},[178,16193,16194],{},"求出立方体的面积和体积",[178,16196,16197],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[19,16199,16201],{"className":296,"code":16200,"language":298,"meta":24,"style":24},"#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",[26,16202,16203,16209,16219,16226,16230,16234,16239,16269,16273,16283,16293,16303,16307,16316,16320,16356,16360,16369,16373,16389,16393,16398,16407,16411,16418,16422,16431,16435,16442,16446,16455,16459,16466,16470,16475,16492,16496,16542,16546,16555,16559,16563,16567,16576,16580,16584,16589,16593,16599,16605,16611,16615,16619,16624,16646,16650,16704,16708,16716,16720,16725,16730,16743,16750,16766,16777,16783,16806,16812,16835,16849,16869,16875,16886,16909,16931,16936,16942,16956,16969,16974,16988,16993,16999,17004,17018,17023,17028,17042,17054,17059,17072,17077,17082,17087,17100,17105],{"__ignoreMap":24},[29,16204,16205,16207],{"class":31,"line":32},[29,16206,2125],{"class":305},[29,16208,2128],{"class":103},[29,16210,16211,16213,16215,16217],{"class":31,"line":43},[29,16212,2133],{"class":305},[29,16214,2136],{"class":305},[29,16216,2139],{"class":35},[29,16218,1468],{"class":309},[29,16220,16221,16223],{"class":31,"line":51},[29,16222,14869],{"class":305},[29,16224,16225],{"class":35}," Cube\n",[29,16227,16228],{"class":31,"line":59},[29,16229,1722],{"class":309},[29,16231,16232],{"class":31,"line":67},[29,16233,14891],{"class":305},[29,16235,16236],{"class":31,"line":75},[29,16237,16238],{"class":367},"    \u002F\u002F输入长宽高\n",[29,16240,16241,16243,16246,16248,16250,16253,16255,16257,16260,16262,16264,16267],{"class":31,"line":83},[29,16242,15084],{"class":305},[29,16244,16245],{"class":35}," setLwh",[29,16247,310],{"class":309},[29,16249,313],{"class":305},[29,16251,16252],{"class":5391}," l",[29,16254,686],{"class":309},[29,16256,313],{"class":305},[29,16258,16259],{"class":5391}," w",[29,16261,686],{"class":309},[29,16263,313],{"class":305},[29,16265,16266],{"class":5391}," h",[29,16268,316],{"class":309},[29,16270,16271],{"class":31,"line":158},[29,16272,2205],{"class":309},[29,16274,16275,16278,16280],{"class":31,"line":166},[29,16276,16277],{"class":309},"        m_L",[29,16279,355],{"class":305},[29,16281,16282],{"class":309},"l;\n",[29,16284,16285,16288,16290],{"class":31,"line":1505},[29,16286,16287],{"class":309},"        m_W",[29,16289,355],{"class":305},[29,16291,16292],{"class":309},"w;\n",[29,16294,16295,16298,16300],{"class":31,"line":1788},[29,16296,16297],{"class":309},"        m_H",[29,16299,355],{"class":305},[29,16301,16302],{"class":309},"h;\n",[29,16304,16305],{"class":31,"line":1793},[29,16306,2362],{"class":309},[29,16308,16309,16311,16314],{"class":31,"line":1799},[29,16310,2160],{"class":305},[29,16312,16313],{"class":35}," mianji",[29,16315,2151],{"class":309},[29,16317,16318],{"class":31,"line":1804},[29,16319,2205],{"class":309},[29,16321,16322,16324,16326,16328,16331,16333,16336,16338,16341,16343,16346,16348,16351,16353],{"class":31,"line":1818},[29,16323,14927],{"class":305},[29,16325,14930],{"class":39},[29,16327,763],{"class":305},[29,16329,16330],{"class":309},"(m_L",[29,16332,763],{"class":305},[29,16334,16335],{"class":309},"m_W ",[29,16337,789],{"class":305},[29,16339,16340],{"class":309}," m_L",[29,16342,763],{"class":305},[29,16344,16345],{"class":309},"m_H ",[29,16347,789],{"class":305},[29,16349,16350],{"class":309}," m_W",[29,16352,763],{"class":305},[29,16354,16355],{"class":309},"m_H);\n",[29,16357,16358],{"class":31,"line":1823},[29,16359,2362],{"class":309},[29,16361,16362,16364,16367],{"class":31,"line":1829},[29,16363,2160],{"class":305},[29,16365,16366],{"class":35}," tiji",[29,16368,2151],{"class":309},[29,16370,16371],{"class":31,"line":1850},[29,16372,2205],{"class":309},[29,16374,16375,16377,16379,16381,16384,16386],{"class":31,"line":1855},[29,16376,14927],{"class":305},[29,16378,16340],{"class":309},[29,16380,763],{"class":305},[29,16382,16383],{"class":309},"m_W",[29,16385,763],{"class":305},[29,16387,16388],{"class":309},"m_H;\n",[29,16390,16391],{"class":31,"line":1869},[29,16392,2362],{"class":309},[29,16394,16395],{"class":31,"line":1874},[29,16396,16397],{"class":367},"    \u002F\u002F获取长宽高\n",[29,16399,16400,16402,16405],{"class":31,"line":1903},[29,16401,2160],{"class":305},[29,16403,16404],{"class":35}," getLength",[29,16406,2151],{"class":309},[29,16408,16409],{"class":31,"line":1908},[29,16410,2205],{"class":309},[29,16412,16413,16415],{"class":31,"line":1925},[29,16414,14927],{"class":305},[29,16416,16417],{"class":309}," m_L;\n",[29,16419,16420],{"class":31,"line":1930},[29,16421,2362],{"class":309},[29,16423,16424,16426,16429],{"class":31,"line":1935},[29,16425,2160],{"class":305},[29,16427,16428],{"class":35}," getWidth",[29,16430,2151],{"class":309},[29,16432,16433],{"class":31,"line":1940},[29,16434,2205],{"class":309},[29,16436,16437,16439],{"class":31,"line":1954},[29,16438,14927],{"class":305},[29,16440,16441],{"class":309}," m_W;\n",[29,16443,16444],{"class":31,"line":1959},[29,16445,2362],{"class":309},[29,16447,16448,16450,16453],{"class":31,"line":2752},[29,16449,2160],{"class":305},[29,16451,16452],{"class":35}," getHeight",[29,16454,2151],{"class":309},[29,16456,16457],{"class":31,"line":2766},[29,16458,2205],{"class":309},[29,16460,16461,16463],{"class":31,"line":2774},[29,16462,14927],{"class":305},[29,16464,16465],{"class":309}," m_H;\n",[29,16467,16468],{"class":31,"line":2779},[29,16469,2362],{"class":309},[29,16471,16472],{"class":31,"line":2785},[29,16473,16474],{"class":367},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[29,16476,16477,16480,16483,16485,16488,16490],{"class":31,"line":2791},[29,16478,16479],{"class":305},"    bool",[29,16481,16482],{"class":35}," isEqual",[29,16484,310],{"class":309},[29,16486,16487],{"class":35},"Cube",[29,16489,3024],{"class":5391},[29,16491,316],{"class":309},[29,16493,16494],{"class":31,"line":2796},[29,16495,2205],{"class":309},[29,16497,16498,16500,16503,16506,16508,16510,16513,16515,16518,16521,16523,16525,16528,16530,16532,16535,16537,16539],{"class":31,"line":8123},[29,16499,2672],{"class":305},[29,16501,16502],{"class":309}," (c.",[29,16504,16505],{"class":35},"getLength",[29,16507,13225],{"class":309},[29,16509,3124],{"class":305},[29,16511,16512],{"class":309}," m_L ",[29,16514,1891],{"class":305},[29,16516,16517],{"class":309}," c.",[29,16519,16520],{"class":35},"getWidth",[29,16522,13225],{"class":309},[29,16524,3124],{"class":305},[29,16526,16527],{"class":309}," m_W ",[29,16529,1891],{"class":305},[29,16531,16517],{"class":309},[29,16533,16534],{"class":35},"getHeight",[29,16536,13225],{"class":309},[29,16538,3124],{"class":305},[29,16540,16541],{"class":309}," m_H)\n",[29,16543,16544],{"class":31,"line":8147},[29,16545,2685],{"class":309},[29,16547,16548,16550,16553],{"class":31,"line":8152},[29,16549,15907],{"class":305},[29,16551,16552],{"class":39}," true",[29,16554,1468],{"class":309},[29,16556,16557],{"class":31,"line":8158},[29,16558,2704],{"class":309},[29,16560,16561],{"class":31,"line":8185},[29,16562,2745],{"class":305},[29,16564,16565],{"class":31,"line":8190},[29,16566,2685],{"class":309},[29,16568,16569,16571,16574],{"class":31,"line":8196},[29,16570,15907],{"class":305},[29,16572,16573],{"class":39}," false",[29,16575,1468],{"class":309},[29,16577,16578],{"class":31,"line":8208},[29,16579,2704],{"class":309},[29,16581,16582],{"class":31,"line":8220},[29,16583,2362],{"class":309},[29,16585,16586],{"class":31,"line":8232},[29,16587,16588],{"class":367},"    \u002F\u002F私有属性\n",[29,16590,16591],{"class":31,"line":9891},[29,16592,15397],{"class":305},[29,16594,16595,16597],{"class":31,"line":9916},[29,16596,2160],{"class":305},[29,16598,16417],{"class":309},[29,16600,16601,16603],{"class":31,"line":9939},[29,16602,2160],{"class":305},[29,16604,16441],{"class":309},[29,16606,16607,16609],{"class":31,"line":9963},[29,16608,2160],{"class":305},[29,16610,16465],{"class":309},[29,16612,16613],{"class":31,"line":9968},[29,16614,2575],{"emptyLinePlaceholder":233},[29,16616,16617],{"class":31,"line":9973},[29,16618,4170],{"class":309},[29,16620,16621],{"class":31,"line":9978},[29,16622,16623],{"class":367},"\u002F\u002F全局函数判断两个立方体是否相等\n",[29,16625,16626,16628,16630,16632,16634,16637,16639,16641,16644],{"class":31,"line":9987},[29,16627,1530],{"class":305},[29,16629,16482],{"class":35},[29,16631,310],{"class":309},[29,16633,16487],{"class":35},[29,16635,16636],{"class":5391}," c1",[29,16638,686],{"class":309},[29,16640,16487],{"class":35},[29,16642,16643],{"class":5391}," c2",[29,16645,316],{"class":309},[29,16647,16648],{"class":31,"line":9992},[29,16649,1722],{"class":309},[29,16651,16652,16654,16657,16659,16661,16663,16666,16668,16671,16673,16675,16677,16679,16681,16683,16685,16687,16689,16691,16693,16695,16697,16699,16701],{"class":31,"line":9998},[29,16653,4265],{"class":305},[29,16655,16656],{"class":309}," (c1.",[29,16658,16505],{"class":35},[29,16660,13225],{"class":309},[29,16662,3124],{"class":305},[29,16664,16665],{"class":309}," c2.",[29,16667,16505],{"class":35},[29,16669,16670],{"class":309},"()) ",[29,16672,1891],{"class":305},[29,16674,16656],{"class":309},[29,16676,16520],{"class":35},[29,16678,13225],{"class":309},[29,16680,3124],{"class":305},[29,16682,16665],{"class":309},[29,16684,16520],{"class":35},[29,16686,16670],{"class":309},[29,16688,1891],{"class":305},[29,16690,16656],{"class":309},[29,16692,16534],{"class":35},[29,16694,13225],{"class":309},[29,16696,3124],{"class":305},[29,16698,16665],{"class":309},[29,16700,16534],{"class":35},[29,16702,16703],{"class":309},"());\n",[29,16705,16706],{"class":31,"line":10019},[29,16707,1741],{"class":309},[29,16709,16710,16712,16714],{"class":31,"line":10025},[29,16711,313],{"class":305},[29,16713,2148],{"class":35},[29,16715,2151],{"class":309},[29,16717,16718],{"class":31,"line":10039},[29,16719,1722],{"class":309},[29,16721,16722],{"class":31,"line":10045},[29,16723,16724],{"class":309},"    Cube c1;\n",[29,16726,16727],{"class":31,"line":10072},[29,16728,16729],{"class":367},"    \u002F\u002F输入立方体的长宽高\n",[29,16731,16732,16734,16736,16739,16741],{"class":31,"line":10081},[29,16733,1727],{"class":309},[29,16735,1351],{"class":305},[29,16737,16738],{"class":103},"\"请输入第一个立方体的长、宽、高：\"",[29,16740,1351],{"class":305},[29,16742,1373],{"class":309},[29,16744,16745,16747],{"class":31,"line":10087},[29,16746,2160],{"class":305},[29,16748,16749],{"class":309}," l,w,h,l1,w1,h1;\n",[29,16751,16752,16754,16756,16758,16760,16762,16764],{"class":31,"line":10095},[29,16753,2187],{"class":309},[29,16755,1605],{"class":305},[29,16757,826],{"class":309},[29,16759,1605],{"class":305},[29,16761,1103],{"class":309},[29,16763,1605],{"class":305},[29,16765,16302],{"class":309},[29,16767,16768,16771,16774],{"class":31,"line":10100},[29,16769,16770],{"class":309},"    c1.",[29,16772,16773],{"class":35},"setLwh",[29,16775,16776],{"class":309},"(l,w,h);\n",[29,16778,16780],{"class":31,"line":16779},66,[29,16781,16782],{"class":367},"    \u002F\u002F面积\n",[29,16784,16786,16788,16790,16793,16795,16797,16800,16802,16804],{"class":31,"line":16785},67,[29,16787,1727],{"class":309},[29,16789,1351],{"class":305},[29,16791,16792],{"class":103},"\"立方体的表面积为：\"",[29,16794,1351],{"class":305},[29,16796,15005],{"class":309},[29,16798,16799],{"class":35},"mianji",[29,16801,2602],{"class":309},[29,16803,1351],{"class":305},[29,16805,1373],{"class":309},[29,16807,16809],{"class":31,"line":16808},68,[29,16810,16811],{"class":367},"    \u002F\u002F体积\n",[29,16813,16815,16817,16819,16822,16824,16826,16829,16831,16833],{"class":31,"line":16814},69,[29,16816,1727],{"class":309},[29,16818,1351],{"class":305},[29,16820,16821],{"class":103},"\"立方体的体积为：\"",[29,16823,1351],{"class":305},[29,16825,15005],{"class":309},[29,16827,16828],{"class":35},"tiji",[29,16830,2602],{"class":309},[29,16832,1351],{"class":305},[29,16834,1373],{"class":309},[29,16836,16838,16840,16842,16845,16847],{"class":31,"line":16837},70,[29,16839,1727],{"class":309},[29,16841,1351],{"class":305},[29,16843,16844],{"class":103},"\"请输入第二个立方体的长、宽、高：\"",[29,16846,1351],{"class":305},[29,16848,1373],{"class":309},[29,16850,16852,16854,16856,16859,16861,16864,16866],{"class":31,"line":16851},71,[29,16853,2187],{"class":309},[29,16855,1605],{"class":305},[29,16857,16858],{"class":309},"l1",[29,16860,1605],{"class":305},[29,16862,16863],{"class":309},"w1",[29,16865,1605],{"class":305},[29,16867,16868],{"class":309},"h1;\n",[29,16870,16872],{"class":31,"line":16871},72,[29,16873,16874],{"class":309},"    Cube c2;\n",[29,16876,16878,16881,16883],{"class":31,"line":16877},73,[29,16879,16880],{"class":309},"    c2.",[29,16882,16773],{"class":35},[29,16884,16885],{"class":309},"(l1,w1,h1);\n",[29,16887,16889,16891,16893,16896,16898,16901,16903,16905,16907],{"class":31,"line":16888},74,[29,16890,1727],{"class":309},[29,16892,1351],{"class":305},[29,16894,16895],{"class":103},"\"第二个立方体的表面积为：\"",[29,16897,1351],{"class":305},[29,16899,16900],{"class":309},"c2.",[29,16902,16799],{"class":35},[29,16904,2602],{"class":309},[29,16906,1351],{"class":305},[29,16908,1373],{"class":309},[29,16910,16912,16914,16916,16919,16921,16923,16925,16927,16929],{"class":31,"line":16911},75,[29,16913,1727],{"class":309},[29,16915,1351],{"class":305},[29,16917,16918],{"class":103},"\"第二个立方体的体积为：\"",[29,16920,1351],{"class":305},[29,16922,16900],{"class":309},[29,16924,16828],{"class":35},[29,16926,2602],{"class":309},[29,16928,1351],{"class":305},[29,16930,1373],{"class":309},[29,16932,16934],{"class":31,"line":16933},76,[29,16935,2575],{"emptyLinePlaceholder":233},[29,16937,16939],{"class":31,"line":16938},77,[29,16940,16941],{"class":367},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[29,16943,16945,16947,16949,16952,16954],{"class":31,"line":16944},78,[29,16946,1727],{"class":309},[29,16948,1351],{"class":305},[29,16950,16951],{"class":103},"\"内部函数判断结果：\"",[29,16953,1351],{"class":305},[29,16955,1373],{"class":309},[29,16957,16959,16961,16963,16966],{"class":31,"line":16958},79,[29,16960,3276],{"class":305},[29,16962,16656],{"class":309},[29,16964,16965],{"class":35},"isEqual",[29,16967,16968],{"class":309},"(c2))\n",[29,16970,16972],{"class":31,"line":16971},80,[29,16973,2205],{"class":309},[29,16975,16977,16979,16981,16984,16986],{"class":31,"line":16976},81,[29,16978,3626],{"class":309},[29,16980,1351],{"class":305},[29,16982,16983],{"class":103},"\"两个立方体相等\"",[29,16985,1351],{"class":305},[29,16987,1373],{"class":309},[29,16989,16991],{"class":31,"line":16990},82,[29,16992,2362],{"class":309},[29,16994,16996],{"class":31,"line":16995},83,[29,16997,16998],{"class":305},"    else\n",[29,17000,17002],{"class":31,"line":17001},84,[29,17003,2205],{"class":309},[29,17005,17007,17009,17011,17014,17016],{"class":31,"line":17006},85,[29,17008,3626],{"class":309},[29,17010,1351],{"class":305},[29,17012,17013],{"class":103},"\"两个立方体不相等\"",[29,17015,1351],{"class":305},[29,17017,1373],{"class":309},[29,17019,17021],{"class":31,"line":17020},86,[29,17022,2362],{"class":309},[29,17024,17026],{"class":31,"line":17025},87,[29,17027,2575],{"emptyLinePlaceholder":233},[29,17029,17031,17033,17035,17038,17040],{"class":31,"line":17030},88,[29,17032,1727],{"class":309},[29,17034,1351],{"class":305},[29,17036,17037],{"class":103},"\"全局函数判断结果：\"",[29,17039,1351],{"class":305},[29,17041,1373],{"class":309},[29,17043,17045,17047,17049,17051],{"class":31,"line":17044},89,[29,17046,3276],{"class":305},[29,17048,1834],{"class":309},[29,17050,16965],{"class":35},[29,17052,17053],{"class":309},"(c1, c2))\n",[29,17055,17057],{"class":31,"line":17056},90,[29,17058,2205],{"class":309},[29,17060,17062,17064,17066,17068,17070],{"class":31,"line":17061},91,[29,17063,3626],{"class":309},[29,17065,1351],{"class":305},[29,17067,16983],{"class":103},[29,17069,1351],{"class":305},[29,17071,1373],{"class":309},[29,17073,17075],{"class":31,"line":17074},92,[29,17076,2362],{"class":309},[29,17078,17080],{"class":31,"line":17079},93,[29,17081,16998],{"class":305},[29,17083,17085],{"class":31,"line":17084},94,[29,17086,2205],{"class":309},[29,17088,17090,17092,17094,17096,17098],{"class":31,"line":17089},95,[29,17091,3626],{"class":309},[29,17093,1351],{"class":305},[29,17095,17013],{"class":103},[29,17097,1351],{"class":305},[29,17099,1373],{"class":309},[29,17101,17103],{"class":31,"line":17102},96,[29,17104,2362],{"class":309},[29,17106,17108],{"class":31,"line":17107},97,[29,17109,1741],{"class":309},[259,17111,17112],{"start":43},[178,17113,17114],{},[457,17115,17116],{},"练习案例2：点和圆的关系",[175,17118,17119],{},[178,17120,17121],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[19,17123,17125],{"className":296,"code":17124,"language":298,"meta":24,"style":24},"#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",[26,17126,17127,17133,17143,17150,17157,17161,17165,17170,17204,17209,17225,17239,17243,17247,17254,17261,17265,17271,17275,17279,17283,17305,17328,17333,17347,17362,17366,17370,17376,17381,17386,17390,17416,17420,17450,17478,17506,17523,17527,17540,17544,17548,17552,17565,17569,17573,17581,17585,17589,17593,17598,17602,17613,17620,17629,17639,17650,17657,17670,17681,17691,17702,17709,17723,17728,17738,17746],{"__ignoreMap":24},[29,17128,17129,17131],{"class":31,"line":32},[29,17130,2125],{"class":305},[29,17132,2128],{"class":103},[29,17134,17135,17137,17139,17141],{"class":31,"line":43},[29,17136,2133],{"class":305},[29,17138,2136],{"class":305},[29,17140,2139],{"class":35},[29,17142,1468],{"class":309},[29,17144,17145,17147],{"class":31,"line":51},[29,17146,2125],{"class":305},[29,17148,17149],{"class":103},"\u003Ccmath>\n",[29,17151,17152,17154],{"class":31,"line":59},[29,17153,14869],{"class":305},[29,17155,17156],{"class":35}," Point\n",[29,17158,17159],{"class":31,"line":67},[29,17160,1722],{"class":309},[29,17162,17163],{"class":31,"line":75},[29,17164,14891],{"class":305},[29,17166,17167],{"class":31,"line":83},[29,17168,17169],{"class":367},"    \u002F\u002F赋值\n",[29,17171,17172,17174,17177,17179,17181,17184,17186,17188,17191,17194,17196,17199,17201],{"class":31,"line":158},[29,17173,15084],{"class":305},[29,17175,17176],{"class":35}," setPoint",[29,17178,310],{"class":309},[29,17180,14212],{"class":305},[29,17182,17183],{"class":5391}," x",[29,17185,12610],{"class":309},[29,17187,14212],{"class":305},[29,17189,17190],{"class":5391}," y",[29,17192,17193],{"class":309},") { m_x ",[29,17195,355],{"class":305},[29,17197,17198],{"class":309}," x; m_y ",[29,17200,355],{"class":305},[29,17202,17203],{"class":309}," y; }\n",[29,17205,17206],{"class":31,"line":166},[29,17207,17208],{"class":367},"    \u002F\u002F获取坐标\n",[29,17210,17211,17213,17216,17219,17222],{"class":31,"line":1505},[29,17212,14913],{"class":305},[29,17214,17215],{"class":35}," getX",[29,17217,17218],{"class":309},"() { ",[29,17220,17221],{"class":305},"return",[29,17223,17224],{"class":309}," m_x; }\n",[29,17226,17227,17229,17232,17234,17236],{"class":31,"line":1788},[29,17228,14913],{"class":305},[29,17230,17231],{"class":35}," getY",[29,17233,17218],{"class":309},[29,17235,17221],{"class":305},[29,17237,17238],{"class":309}," m_y; }\n",[29,17240,17241],{"class":31,"line":1793},[29,17242,2575],{"emptyLinePlaceholder":233},[29,17244,17245],{"class":31,"line":1799},[29,17246,15397],{"class":305},[29,17248,17249,17251],{"class":31,"line":1804},[29,17250,14913],{"class":305},[29,17252,17253],{"class":309}," m_x;\n",[29,17255,17256,17258],{"class":31,"line":1818},[29,17257,14913],{"class":305},[29,17259,17260],{"class":309}," m_y;\n",[29,17262,17263],{"class":31,"line":1823},[29,17264,4170],{"class":309},[29,17266,17267,17269],{"class":31,"line":1829},[29,17268,14869],{"class":305},[29,17270,14872],{"class":35},[29,17272,17273],{"class":31,"line":1850},[29,17274,1722],{"class":309},[29,17276,17277],{"class":31,"line":1855},[29,17278,14891],{"class":305},[29,17280,17281],{"class":31,"line":1869},[29,17282,17169],{"class":367},[29,17284,17285,17287,17290,17292,17294,17297,17300,17302],{"class":31,"line":1874},[29,17286,15084],{"class":305},[29,17288,17289],{"class":35}," setRadius",[29,17291,310],{"class":309},[29,17293,14212],{"class":305},[29,17295,17296],{"class":5391}," r",[29,17298,17299],{"class":309},") { m_r ",[29,17301,355],{"class":305},[29,17303,17304],{"class":309}," r; }\n",[29,17306,17307,17309,17312,17314,17317,17320,17323,17325],{"class":31,"line":1903},[29,17308,15084],{"class":305},[29,17310,17311],{"class":35}," setCenter",[29,17313,310],{"class":309},[29,17315,17316],{"class":35},"Point",[29,17318,17319],{"class":5391}," center",[29,17321,17322],{"class":309},") { m_center ",[29,17324,355],{"class":305},[29,17326,17327],{"class":309}," center; }\n",[29,17329,17330],{"class":31,"line":1908},[29,17331,17332],{"class":367},"    \u002F\u002F获取属性\n",[29,17334,17335,17337,17340,17342,17344],{"class":31,"line":1925},[29,17336,14913],{"class":305},[29,17338,17339],{"class":35}," getRadius",[29,17341,17218],{"class":309},[29,17343,17221],{"class":305},[29,17345,17346],{"class":309}," m_r; }\n",[29,17348,17349,17352,17355,17357,17359],{"class":31,"line":1930},[29,17350,17351],{"class":35},"    Point",[29,17353,17354],{"class":35}," getCenter",[29,17356,17218],{"class":309},[29,17358,17221],{"class":305},[29,17360,17361],{"class":309}," m_center; }\n",[29,17363,17364],{"class":31,"line":1935},[29,17365,2575],{"emptyLinePlaceholder":233},[29,17367,17368],{"class":31,"line":1940},[29,17369,15397],{"class":305},[29,17371,17372,17374],{"class":31,"line":1954},[29,17373,14913],{"class":305},[29,17375,14903],{"class":309},[29,17377,17378],{"class":31,"line":1959},[29,17379,17380],{"class":367},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[29,17382,17383],{"class":31,"line":2752},[29,17384,17385],{"class":309},"    Point m_center;\n",[29,17387,17388],{"class":31,"line":2766},[29,17389,4170],{"class":309},[29,17391,17392,17394,17397,17399,17402,17404,17406,17408,17410,17412,17414],{"class":31,"line":2774},[29,17393,5539],{"class":305},[29,17395,17396],{"class":35}," isInCircle",[29,17398,310],{"class":309},[29,17400,17401],{"class":35},"Circle",[29,17403,10759],{"class":305},[29,17405,596],{"class":5391},[29,17407,686],{"class":309},[29,17409,17316],{"class":35},[29,17411,10759],{"class":305},[29,17413,171],{"class":5391},[29,17415,316],{"class":309},[29,17417,17418],{"class":31,"line":2779},[29,17419,1722],{"class":309},[29,17421,17422,17424,17427,17429,17431,17434,17437,17440,17442,17444,17446,17448],{"class":31,"line":2785},[29,17423,14913],{"class":305},[29,17425,17426],{"class":309}," dx ",[29,17428,355],{"class":305},[29,17430,16517],{"class":309},[29,17432,17433],{"class":35},"getCenter",[29,17435,17436],{"class":309},"().",[29,17438,17439],{"class":35},"getX",[29,17441,13225],{"class":309},[29,17443,840],{"class":305},[29,17445,16063],{"class":309},[29,17447,17439],{"class":35},[29,17449,5811],{"class":309},[29,17451,17452,17454,17457,17459,17461,17463,17465,17468,17470,17472,17474,17476],{"class":31,"line":2791},[29,17453,14913],{"class":305},[29,17455,17456],{"class":309}," dy ",[29,17458,355],{"class":305},[29,17460,16517],{"class":309},[29,17462,17433],{"class":35},[29,17464,17436],{"class":309},[29,17466,17467],{"class":35},"getY",[29,17469,13225],{"class":309},[29,17471,840],{"class":305},[29,17473,16063],{"class":309},[29,17475,17467],{"class":35},[29,17477,5811],{"class":309},[29,17479,17480,17482,17485,17487,17490,17493,17495,17497,17499,17501,17503],{"class":31,"line":2796},[29,17481,14913],{"class":305},[29,17483,17484],{"class":309}," distance ",[29,17486,355],{"class":305},[29,17488,17489],{"class":35}," sqrt",[29,17491,17492],{"class":309},"(dx ",[29,17494,763],{"class":305},[29,17496,17426],{"class":309},[29,17498,789],{"class":305},[29,17500,17456],{"class":309},[29,17502,763],{"class":305},[29,17504,17505],{"class":309}," dy);\n",[29,17507,17508,17510,17513,17515,17517,17520],{"class":31,"line":8123},[29,17509,3276],{"class":305},[29,17511,17512],{"class":309}," (distance ",[29,17514,1218],{"class":305},[29,17516,16517],{"class":309},[29,17518,17519],{"class":35},"getRadius",[29,17521,17522],{"class":309},"())\n",[29,17524,17525],{"class":31,"line":8147},[29,17526,2205],{"class":309},[29,17528,17529,17531,17533,17536,17538],{"class":31,"line":8152},[29,17530,9844],{"class":309},[29,17532,1351],{"class":305},[29,17534,17535],{"class":103}," \"点在圆内\"",[29,17537,1620],{"class":305},[29,17539,9015],{"class":309},[29,17541,17542],{"class":31,"line":8158},[29,17543,2362],{"class":309},[29,17545,17546],{"class":31,"line":8185},[29,17547,16998],{"class":305},[29,17549,17550],{"class":31,"line":8190},[29,17551,2205],{"class":309},[29,17553,17554,17556,17558,17561,17563],{"class":31,"line":8196},[29,17555,9844],{"class":309},[29,17557,1351],{"class":305},[29,17559,17560],{"class":103}," \"点在圆外\"",[29,17562,1620],{"class":305},[29,17564,9015],{"class":309},[29,17566,17567],{"class":31,"line":8208},[29,17568,2362],{"class":309},[29,17570,17571],{"class":31,"line":8220},[29,17572,1741],{"class":309},[29,17574,17575,17577,17579],{"class":31,"line":8232},[29,17576,313],{"class":305},[29,17578,2148],{"class":35},[29,17580,2151],{"class":309},[29,17582,17583],{"class":31,"line":9891},[29,17584,1722],{"class":309},[29,17586,17587],{"class":31,"line":9916},[29,17588,15228],{"class":367},[29,17590,17591],{"class":31,"line":9939},[29,17592,14975],{"class":309},[29,17594,17595],{"class":31,"line":9963},[29,17596,17597],{"class":309},"    Point p1;\n",[29,17599,17600],{"class":31,"line":9968},[29,17601,17169],{"class":367},[29,17603,17604,17606,17608,17611],{"class":31,"line":9973},[29,17605,1727],{"class":309},[29,17607,1351],{"class":305},[29,17609,17610],{"class":103},"\"请输入圆的半径：\"",[29,17612,1468],{"class":309},[29,17614,17615,17617],{"class":31,"line":9978},[29,17616,14913],{"class":305},[29,17618,17619],{"class":309}," r;\n",[29,17621,17622,17624,17626],{"class":31,"line":9987},[29,17623,2187],{"class":309},[29,17625,1605],{"class":305},[29,17627,17628],{"class":309},"r;\n",[29,17630,17631,17633,17636],{"class":31,"line":9992},[29,17632,16770],{"class":309},[29,17634,17635],{"class":35},"setRadius",[29,17637,17638],{"class":309},"(r);\n",[29,17640,17641,17643,17645,17648],{"class":31,"line":9998},[29,17642,1727],{"class":309},[29,17644,1351],{"class":305},[29,17646,17647],{"class":103},"\"请输入圆心坐标：\"",[29,17649,1468],{"class":309},[29,17651,17652,17654],{"class":31,"line":10019},[29,17653,14913],{"class":305},[29,17655,17656],{"class":309}," x, y;\n",[29,17658,17659,17661,17663,17665,17667],{"class":31,"line":10025},[29,17660,2187],{"class":309},[29,17662,1605],{"class":305},[29,17664,1128],{"class":309},[29,17666,1605],{"class":305},[29,17668,17669],{"class":309},"y;\n",[29,17671,17672,17675,17678],{"class":31,"line":10039},[29,17673,17674],{"class":309},"    p1.",[29,17676,17677],{"class":35},"setPoint",[29,17679,17680],{"class":309},"(x, y);\n",[29,17682,17683,17685,17688],{"class":31,"line":10045},[29,17684,16770],{"class":309},[29,17686,17687],{"class":35},"setCenter",[29,17689,17690],{"class":309},"(p1);\n",[29,17692,17693,17695,17697,17700],{"class":31,"line":10072},[29,17694,1727],{"class":309},[29,17696,1351],{"class":305},[29,17698,17699],{"class":103},"\"请输入测试点坐标：\"",[29,17701,1468],{"class":309},[29,17703,17704,17706],{"class":31,"line":10081},[29,17705,14913],{"class":305},[29,17707,17708],{"class":309}," x1, y1;\n",[29,17710,17711,17713,17715,17718,17720],{"class":31,"line":10087},[29,17712,2187],{"class":309},[29,17714,1605],{"class":305},[29,17716,17717],{"class":309},"x1",[29,17719,1605],{"class":305},[29,17721,17722],{"class":309},"y1;\n",[29,17724,17725],{"class":31,"line":10095},[29,17726,17727],{"class":309},"    Point p2;\n",[29,17729,17730,17733,17735],{"class":31,"line":10100},[29,17731,17732],{"class":309},"    p2.",[29,17734,17677],{"class":35},[29,17736,17737],{"class":309},"(x1, y1);\n",[29,17739,17740,17743],{"class":31,"line":16779},[29,17741,17742],{"class":35},"    isInCircle",[29,17744,17745],{"class":309},"(c1, p2);\n",[29,17747,17748],{"class":31,"line":16785},[29,17749,1741],{"class":309},[171,17751,17752],{},"在类中可以让另一个类作为本来的成员",[171,17754,17755],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[171,17757,17758],{},"创建point.h",[19,17760,17762],{"className":296,"code":17761,"language":298,"meta":24,"style":24},"#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",[26,17763,17764,17775,17781,17791,17797,17801,17806,17810,17814,17834,17838,17846,17854,17858,17862,17868,17874],{"__ignoreMap":24},[29,17765,17766,17769,17772],{"class":31,"line":32},[29,17767,17768],{"class":305},"#pragma",[29,17770,17771],{"class":35}," once",[29,17773,17774],{"class":367}," \u002F\u002F防止头文件重复包含\n",[29,17776,17777,17779],{"class":31,"line":43},[29,17778,2125],{"class":305},[29,17780,2128],{"class":103},[29,17782,17783,17785,17787,17789],{"class":31,"line":51},[29,17784,2133],{"class":305},[29,17786,2136],{"class":305},[29,17788,2139],{"class":35},[29,17790,1468],{"class":309},[29,17792,17793,17795],{"class":31,"line":59},[29,17794,14869],{"class":305},[29,17796,17156],{"class":35},[29,17798,17799],{"class":31,"line":67},[29,17800,1722],{"class":309},[29,17802,17803],{"class":31,"line":75},[29,17804,17805],{"class":367},"\u002F\u002F做好声明与变量定义就可以\n",[29,17807,17808],{"class":31,"line":83},[29,17809,14891],{"class":305},[29,17811,17812],{"class":31,"line":158},[29,17813,17169],{"class":367},[29,17815,17816,17818,17820,17822,17824,17826,17828,17830,17832],{"class":31,"line":166},[29,17817,15084],{"class":305},[29,17819,17176],{"class":35},[29,17821,310],{"class":309},[29,17823,14212],{"class":305},[29,17825,17183],{"class":5391},[29,17827,12610],{"class":309},[29,17829,14212],{"class":305},[29,17831,17190],{"class":5391},[29,17833,2894],{"class":309},[29,17835,17836],{"class":31,"line":1505},[29,17837,17208],{"class":367},[29,17839,17840,17842,17844],{"class":31,"line":1788},[29,17841,14913],{"class":305},[29,17843,17215],{"class":35},[29,17845,5811],{"class":309},[29,17847,17848,17850,17852],{"class":31,"line":1793},[29,17849,14913],{"class":305},[29,17851,17231],{"class":35},[29,17853,5811],{"class":309},[29,17855,17856],{"class":31,"line":1799},[29,17857,2575],{"emptyLinePlaceholder":233},[29,17859,17860],{"class":31,"line":1804},[29,17861,15397],{"class":305},[29,17863,17864,17866],{"class":31,"line":1818},[29,17865,14913],{"class":305},[29,17867,17253],{"class":309},[29,17869,17870,17872],{"class":31,"line":1823},[29,17871,14913],{"class":305},[29,17873,17260],{"class":309},[29,17875,17876],{"class":31,"line":1829},[29,17877,4170],{"class":309},[171,17879,17880],{},"创建point.cpp",[19,17882,17884],{"className":296,"code":17883,"language":298,"meta":24,"style":24},"#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",[26,17885,17886,17893,17898,17932,17936,17952],{"__ignoreMap":24},[29,17887,17888,17890],{"class":31,"line":32},[29,17889,2125],{"class":305},[29,17891,17892],{"class":103},"\u003Cpoint.h>\n",[29,17894,17895],{"class":31,"line":43},[29,17896,17897],{"class":367},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[29,17899,17900,17902,17905,17908,17910,17912,17914,17916,17918,17920,17922,17924,17926,17928,17930],{"class":31,"line":51},[29,17901,15084],{"class":305},[29,17903,17904],{"class":35}," Point",[29,17906,17907],{"class":309},"::",[29,17909,17677],{"class":35},[29,17911,310],{"class":309},[29,17913,14212],{"class":305},[29,17915,17183],{"class":5391},[29,17917,12610],{"class":309},[29,17919,14212],{"class":305},[29,17921,17190],{"class":5391},[29,17923,17193],{"class":309},[29,17925,355],{"class":305},[29,17927,17198],{"class":309},[29,17929,355],{"class":305},[29,17931,17203],{"class":309},[29,17933,17934],{"class":31,"line":59},[29,17935,17208],{"class":367},[29,17937,17938,17940,17942,17944,17946,17948,17950],{"class":31,"line":67},[29,17939,14913],{"class":305},[29,17941,17904],{"class":35},[29,17943,17907],{"class":309},[29,17945,17439],{"class":35},[29,17947,17218],{"class":309},[29,17949,17221],{"class":305},[29,17951,17224],{"class":309},[29,17953,17954,17956,17958,17960,17962,17964,17966],{"class":31,"line":75},[29,17955,14913],{"class":305},[29,17957,17904],{"class":35},[29,17959,17907],{"class":309},[29,17961,17467],{"class":35},[29,17963,17218],{"class":309},[29,17965,17221],{"class":305},[29,17967,17238],{"class":309},[171,17969,17970],{},"创建circle.h",[19,17972,17974],{"className":296,"code":17973,"language":298,"meta":24,"style":24},"#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",[26,17975,17976,17983,17989,17999,18005,18011,18015,18019,18023,18037,18051,18055,18063,18071,18075,18079,18085,18089,18093],{"__ignoreMap":24},[29,17977,17978,17980],{"class":31,"line":32},[29,17979,17768],{"class":305},[29,17981,17982],{"class":35}," once\n",[29,17984,17985,17987],{"class":31,"line":43},[29,17986,2125],{"class":305},[29,17988,2128],{"class":103},[29,17990,17991,17993,17995,17997],{"class":31,"line":51},[29,17992,2133],{"class":305},[29,17994,2136],{"class":305},[29,17996,2139],{"class":35},[29,17998,1468],{"class":309},[29,18000,18001,18003],{"class":31,"line":59},[29,18002,2125],{"class":305},[29,18004,17892],{"class":103},[29,18006,18007,18009],{"class":31,"line":67},[29,18008,14869],{"class":305},[29,18010,14872],{"class":35},[29,18012,18013],{"class":31,"line":75},[29,18014,1722],{"class":309},[29,18016,18017],{"class":31,"line":83},[29,18018,14891],{"class":305},[29,18020,18021],{"class":31,"line":158},[29,18022,17169],{"class":367},[29,18024,18025,18027,18029,18031,18033,18035],{"class":31,"line":166},[29,18026,15084],{"class":305},[29,18028,17289],{"class":35},[29,18030,310],{"class":309},[29,18032,14212],{"class":305},[29,18034,17296],{"class":5391},[29,18036,2894],{"class":309},[29,18038,18039,18041,18043,18045,18047,18049],{"class":31,"line":1505},[29,18040,15084],{"class":305},[29,18042,17311],{"class":35},[29,18044,310],{"class":309},[29,18046,17316],{"class":35},[29,18048,17319],{"class":5391},[29,18050,2894],{"class":309},[29,18052,18053],{"class":31,"line":1788},[29,18054,17332],{"class":367},[29,18056,18057,18059,18061],{"class":31,"line":1793},[29,18058,14913],{"class":305},[29,18060,17339],{"class":35},[29,18062,5811],{"class":309},[29,18064,18065,18067,18069],{"class":31,"line":1799},[29,18066,17351],{"class":35},[29,18068,17354],{"class":35},[29,18070,5811],{"class":309},[29,18072,18073],{"class":31,"line":1804},[29,18074,2575],{"emptyLinePlaceholder":233},[29,18076,18077],{"class":31,"line":1818},[29,18078,15397],{"class":305},[29,18080,18081,18083],{"class":31,"line":1823},[29,18082,14913],{"class":305},[29,18084,14903],{"class":309},[29,18086,18087],{"class":31,"line":1829},[29,18088,17380],{"class":367},[29,18090,18091],{"class":31,"line":1850},[29,18092,17385],{"class":309},[29,18094,18095],{"class":31,"line":1855},[29,18096,4170],{"class":309},[171,18098,18099],{},"创建circle.cpp",[19,18101,18103],{"className":296,"code":18102,"language":298,"meta":24,"style":24},"#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",[26,18104,18105,18112,18135,18157,18162,18178],{"__ignoreMap":24},[29,18106,18107,18109],{"class":31,"line":32},[29,18108,2125],{"class":305},[29,18110,18111],{"class":103},"\u003Ccircle.h>\n",[29,18113,18114,18116,18119,18121,18123,18125,18127,18129,18131,18133],{"class":31,"line":43},[29,18115,5539],{"class":305},[29,18117,18118],{"class":35}," Circle",[29,18120,17907],{"class":309},[29,18122,17635],{"class":35},[29,18124,310],{"class":309},[29,18126,14212],{"class":305},[29,18128,17296],{"class":5391},[29,18130,17299],{"class":309},[29,18132,355],{"class":305},[29,18134,17304],{"class":309},[29,18136,18137,18139,18141,18143,18145,18147,18149,18151,18153,18155],{"class":31,"line":51},[29,18138,5539],{"class":305},[29,18140,18118],{"class":35},[29,18142,17907],{"class":309},[29,18144,17687],{"class":35},[29,18146,310],{"class":309},[29,18148,17316],{"class":35},[29,18150,17319],{"class":5391},[29,18152,17322],{"class":309},[29,18154,355],{"class":305},[29,18156,17327],{"class":309},[29,18158,18159],{"class":31,"line":59},[29,18160,18161],{"class":367},"\u002F\u002F获取属性\n",[29,18163,18164,18166,18168,18170,18172,18174,18176],{"class":31,"line":67},[29,18165,14212],{"class":305},[29,18167,18118],{"class":35},[29,18169,17907],{"class":309},[29,18171,17519],{"class":35},[29,18173,17218],{"class":309},[29,18175,17221],{"class":305},[29,18177,17346],{"class":309},[29,18179,18180,18182,18184,18186,18188,18190,18192],{"class":31,"line":75},[29,18181,17316],{"class":35},[29,18183,18118],{"class":35},[29,18185,17907],{"class":309},[29,18187,17433],{"class":35},[29,18189,17218],{"class":309},[29,18191,17221],{"class":305},[29,18193,17361],{"class":309},[171,18195,18196],{},"使用封装的类",[19,18198,18200],{"className":296,"code":18199,"language":298,"meta":24,"style":24},"#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",[26,18201,18202,18208,18218,18224,18230,18254,18258,18284,18310,18334,18348,18352,18364,18368,18372,18376,18388,18392,18396,18404,18408,18412,18416,18420,18424,18434,18440,18448,18456,18466,18472,18484,18492,18500,18510,18516,18528,18532,18540,18546],{"__ignoreMap":24},[29,18203,18204,18206],{"class":31,"line":32},[29,18205,2125],{"class":305},[29,18207,2128],{"class":103},[29,18209,18210,18212,18214,18216],{"class":31,"line":43},[29,18211,2133],{"class":305},[29,18213,2136],{"class":305},[29,18215,2139],{"class":35},[29,18217,1468],{"class":309},[29,18219,18220,18222],{"class":31,"line":51},[29,18221,2125],{"class":305},[29,18223,18111],{"class":103},[29,18225,18226,18228],{"class":31,"line":59},[29,18227,2125],{"class":305},[29,18229,17892],{"class":103},[29,18231,18232,18234,18236,18238,18240,18242,18244,18246,18248,18250,18252],{"class":31,"line":67},[29,18233,5539],{"class":305},[29,18235,17396],{"class":35},[29,18237,310],{"class":309},[29,18239,17401],{"class":35},[29,18241,10759],{"class":305},[29,18243,596],{"class":5391},[29,18245,686],{"class":309},[29,18247,17316],{"class":35},[29,18249,10759],{"class":305},[29,18251,171],{"class":5391},[29,18253,316],{"class":309},[29,18255,18256],{"class":31,"line":75},[29,18257,1722],{"class":309},[29,18259,18260,18262,18264,18266,18268,18270,18272,18274,18276,18278,18280,18282],{"class":31,"line":83},[29,18261,14913],{"class":305},[29,18263,17426],{"class":309},[29,18265,355],{"class":305},[29,18267,16517],{"class":309},[29,18269,17433],{"class":35},[29,18271,17436],{"class":309},[29,18273,17439],{"class":35},[29,18275,13225],{"class":309},[29,18277,840],{"class":305},[29,18279,16063],{"class":309},[29,18281,17439],{"class":35},[29,18283,5811],{"class":309},[29,18285,18286,18288,18290,18292,18294,18296,18298,18300,18302,18304,18306,18308],{"class":31,"line":158},[29,18287,14913],{"class":305},[29,18289,17456],{"class":309},[29,18291,355],{"class":305},[29,18293,16517],{"class":309},[29,18295,17433],{"class":35},[29,18297,17436],{"class":309},[29,18299,17467],{"class":35},[29,18301,13225],{"class":309},[29,18303,840],{"class":305},[29,18305,16063],{"class":309},[29,18307,17467],{"class":35},[29,18309,5811],{"class":309},[29,18311,18312,18314,18316,18318,18320,18322,18324,18326,18328,18330,18332],{"class":31,"line":166},[29,18313,14913],{"class":305},[29,18315,17484],{"class":309},[29,18317,355],{"class":305},[29,18319,17489],{"class":35},[29,18321,17492],{"class":309},[29,18323,763],{"class":305},[29,18325,17426],{"class":309},[29,18327,789],{"class":305},[29,18329,17456],{"class":309},[29,18331,763],{"class":305},[29,18333,17505],{"class":309},[29,18335,18336,18338,18340,18342,18344,18346],{"class":31,"line":1505},[29,18337,3276],{"class":305},[29,18339,17512],{"class":309},[29,18341,1218],{"class":305},[29,18343,16517],{"class":309},[29,18345,17519],{"class":35},[29,18347,17522],{"class":309},[29,18349,18350],{"class":31,"line":1788},[29,18351,2205],{"class":309},[29,18353,18354,18356,18358,18360,18362],{"class":31,"line":1793},[29,18355,9844],{"class":309},[29,18357,1351],{"class":305},[29,18359,17535],{"class":103},[29,18361,1620],{"class":305},[29,18363,9015],{"class":309},[29,18365,18366],{"class":31,"line":1799},[29,18367,2362],{"class":309},[29,18369,18370],{"class":31,"line":1804},[29,18371,16998],{"class":305},[29,18373,18374],{"class":31,"line":1818},[29,18375,2205],{"class":309},[29,18377,18378,18380,18382,18384,18386],{"class":31,"line":1823},[29,18379,9844],{"class":309},[29,18381,1351],{"class":305},[29,18383,17560],{"class":103},[29,18385,1620],{"class":305},[29,18387,9015],{"class":309},[29,18389,18390],{"class":31,"line":1829},[29,18391,2362],{"class":309},[29,18393,18394],{"class":31,"line":1850},[29,18395,1741],{"class":309},[29,18397,18398,18400,18402],{"class":31,"line":1855},[29,18399,313],{"class":305},[29,18401,2148],{"class":35},[29,18403,2151],{"class":309},[29,18405,18406],{"class":31,"line":1869},[29,18407,1722],{"class":309},[29,18409,18410],{"class":31,"line":1874},[29,18411,15228],{"class":367},[29,18413,18414],{"class":31,"line":1903},[29,18415,14975],{"class":309},[29,18417,18418],{"class":31,"line":1908},[29,18419,17597],{"class":309},[29,18421,18422],{"class":31,"line":1925},[29,18423,17169],{"class":367},[29,18425,18426,18428,18430,18432],{"class":31,"line":1930},[29,18427,1727],{"class":309},[29,18429,1351],{"class":305},[29,18431,17610],{"class":103},[29,18433,1468],{"class":309},[29,18435,18436,18438],{"class":31,"line":1935},[29,18437,14913],{"class":305},[29,18439,17619],{"class":309},[29,18441,18442,18444,18446],{"class":31,"line":1940},[29,18443,2187],{"class":309},[29,18445,1605],{"class":305},[29,18447,17628],{"class":309},[29,18449,18450,18452,18454],{"class":31,"line":1954},[29,18451,16770],{"class":309},[29,18453,17635],{"class":35},[29,18455,17638],{"class":309},[29,18457,18458,18460,18462,18464],{"class":31,"line":1959},[29,18459,1727],{"class":309},[29,18461,1351],{"class":305},[29,18463,17647],{"class":103},[29,18465,1468],{"class":309},[29,18467,18468,18470],{"class":31,"line":2752},[29,18469,14913],{"class":305},[29,18471,17656],{"class":309},[29,18473,18474,18476,18478,18480,18482],{"class":31,"line":2766},[29,18475,2187],{"class":309},[29,18477,1605],{"class":305},[29,18479,1128],{"class":309},[29,18481,1605],{"class":305},[29,18483,17669],{"class":309},[29,18485,18486,18488,18490],{"class":31,"line":2774},[29,18487,17674],{"class":309},[29,18489,17677],{"class":35},[29,18491,17680],{"class":309},[29,18493,18494,18496,18498],{"class":31,"line":2779},[29,18495,16770],{"class":309},[29,18497,17687],{"class":35},[29,18499,17690],{"class":309},[29,18501,18502,18504,18506,18508],{"class":31,"line":2785},[29,18503,1727],{"class":309},[29,18505,1351],{"class":305},[29,18507,17699],{"class":103},[29,18509,1468],{"class":309},[29,18511,18512,18514],{"class":31,"line":2791},[29,18513,14913],{"class":305},[29,18515,17708],{"class":309},[29,18517,18518,18520,18522,18524,18526],{"class":31,"line":2796},[29,18519,2187],{"class":309},[29,18521,1605],{"class":305},[29,18523,17717],{"class":309},[29,18525,1605],{"class":305},[29,18527,17722],{"class":309},[29,18529,18530],{"class":31,"line":8123},[29,18531,17727],{"class":309},[29,18533,18534,18536,18538],{"class":31,"line":8147},[29,18535,17732],{"class":309},[29,18537,17677],{"class":35},[29,18539,17737],{"class":309},[29,18541,18542,18544],{"class":31,"line":8152},[29,18543,17742],{"class":35},[29,18545,17745],{"class":309},[29,18547,18548],{"class":31,"line":8158},[29,18549,1741],{"class":309},[14,18551,18553],{"id":18552},"_82对象的初始化清理","8.2对象的初始化清理",[175,18555,18556,18559],{},[178,18557,18558],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[178,18560,18561],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[275,18563,18565],{"id":18564},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[171,18567,18568,18569,18572],{},"对象的",[457,18570,18571],{},"初始化和清理","也是两个非常重要的安全问题",[171,18574,18575],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[171,18577,18578],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[171,18580,18581,18582,18585,18586,18589],{},"c++利用了",[457,18583,18584],{},"构造函数","和",[457,18587,18588],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[171,18591,18592,18593],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[457,18594,18595],{},"我们不提供构造和析构，编译器会提供",[171,18597,18598],{},[457,18599,18600],{},"编译器提供的构造函数和析构函数是空实现。",[175,18602,18603,18606],{},[178,18604,18605],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[178,18607,18608,18609,18612],{},"析构函数：主要作用在于对象",[457,18610,18611],{},"销毁前","系统自动调用，执行一些清理工作。",[171,18614,18615,18618],{},[457,18616,18617],{},"构造函数语法：",[26,18619,18620],{},"类名(){}",[259,18622,18623,18626,18629,18632,18635],{},[178,18624,18625],{},"构造函数，没有返回值也不写void",[178,18627,18628],{},"函数名称与类名相同",[178,18630,18631],{},"构造函数可以有参数，因此可以发生重载",[178,18633,18634],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[178,18636,18637,18638,737],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[26,18639,18640],{},"Person(){}",[171,18642,18643,13970,18646],{},[457,18644,18645],{},"析构函数语法：",[26,18647,18648],{},"~类名(){}",[259,18650,18651,18654,18657,18663],{},[178,18652,18653],{},"析构函数，没有返回值也不写void",[178,18655,18656],{},"函数名称与类名相同,在名称前加上符号  ~",[178,18658,18659,18660],{},"析构函数不可以有参数，因此",[457,18661,18662],{},"不可以发生重载",[178,18664,18665],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[19,18667,18669],{"className":296,"code":18668,"language":298,"meta":24,"style":24},"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",[26,18670,18671,18677,18681,18685,18690,18697,18701,18714,18718,18723,18730,18734,18747,18751,18755,18759,18763,18771,18775,18783,18787,18791,18799,18803,18808,18812,18819,18823,18836,18840,18848],{"__ignoreMap":24},[29,18672,18673,18675],{"class":31,"line":32},[29,18674,14869],{"class":305},[29,18676,15346],{"class":35},[29,18678,18679],{"class":31,"line":43},[29,18680,1722],{"class":309},[29,18682,18683],{"class":31,"line":51},[29,18684,14891],{"class":305},[29,18686,18687],{"class":31,"line":59},[29,18688,18689],{"class":367},"    \u002F\u002F构造函数\n",[29,18691,18692,18695],{"class":31,"line":67},[29,18693,18694],{"class":35},"    Person",[29,18696,2151],{"class":309},[29,18698,18699],{"class":31,"line":75},[29,18700,2205],{"class":309},[29,18702,18703,18705,18707,18710,18712],{"class":31,"line":83},[29,18704,9844],{"class":309},[29,18706,1351],{"class":305},[29,18708,18709],{"class":103}," \"Person的构造函数调用\"",[29,18711,1620],{"class":305},[29,18713,9015],{"class":309},[29,18715,18716],{"class":31,"line":158},[29,18717,2362],{"class":309},[29,18719,18720],{"class":31,"line":166},[29,18721,18722],{"class":367},"    \u002F\u002F析构函数\n",[29,18724,18725,18728],{"class":31,"line":1505},[29,18726,18727],{"class":35},"    ~Person",[29,18729,2151],{"class":309},[29,18731,18732],{"class":31,"line":1788},[29,18733,2205],{"class":309},[29,18735,18736,18738,18740,18743,18745],{"class":31,"line":1793},[29,18737,9844],{"class":309},[29,18739,1351],{"class":305},[29,18741,18742],{"class":103}," \"Person的析构函数调用\"",[29,18744,1620],{"class":305},[29,18746,9015],{"class":309},[29,18748,18749],{"class":31,"line":1799},[29,18750,2362],{"class":309},[29,18752,18753],{"class":31,"line":1804},[29,18754,2575],{"emptyLinePlaceholder":233},[29,18756,18757],{"class":31,"line":1818},[29,18758,4170],{"class":309},[29,18760,18761],{"class":31,"line":1823},[29,18762,2575],{"emptyLinePlaceholder":233},[29,18764,18765,18767,18769],{"class":31,"line":1829},[29,18766,5539],{"class":305},[29,18768,5763],{"class":35},[29,18770,2151],{"class":309},[29,18772,18773],{"class":31,"line":1850},[29,18774,1722],{"class":309},[29,18776,18777,18780],{"class":31,"line":1855},[29,18778,18779],{"class":309},"    Person p;",[29,18781,18782],{"class":367},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[29,18784,18785],{"class":31,"line":1869},[29,18786,1741],{"class":309},[29,18788,18789],{"class":31,"line":1874},[29,18790,2575],{"emptyLinePlaceholder":233},[29,18792,18793,18795,18797],{"class":31,"line":1903},[29,18794,313],{"class":305},[29,18796,2148],{"class":35},[29,18798,11028],{"class":309},[29,18800,18801],{"class":31,"line":1908},[29,18802,13385],{"class":309},[29,18804,18805],{"class":31,"line":1925},[29,18806,18807],{"class":367},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[29,18809,18810],{"class":31,"line":1930},[29,18811,2575],{"emptyLinePlaceholder":233},[29,18813,18814,18816],{"class":31,"line":1935},[29,18815,18779],{"class":309},[29,18817,18818],{"class":367},"\u002F\u002F只有构造函数\n",[29,18820,18821],{"class":31,"line":1940},[29,18822,2575],{"emptyLinePlaceholder":233},[29,18824,18825,18827,18829,18831,18833],{"class":31,"line":1954},[29,18826,2478],{"class":35},[29,18828,310],{"class":309},[29,18830,2483],{"class":103},[29,18832,6141],{"class":309},[29,18834,18835],{"class":367},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[29,18837,18838],{"class":31,"line":1959},[29,18839,2575],{"emptyLinePlaceholder":233},[29,18841,18842,18844,18846],{"class":31,"line":2752},[29,18843,4265],{"class":305},[29,18845,4268],{"class":39},[29,18847,1468],{"class":309},[29,18849,18850],{"class":31,"line":2766},[29,18851,1741],{"class":309},[171,18853,18854],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[275,18856,18858],{"id":18857},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[171,18860,18861],{},"两种分类方式：",[171,18863,18864],{},"​\t按参数分为： 有参构造和无参构造",[171,18866,18867],{},"​\t按类型分为： 普通构造和拷贝构造",[171,18869,18870],{},"三种调用方式：",[171,18872,18873],{},"​\t括号法",[171,18875,18876],{},"​\t显示法",[171,18878,18879],{},"​\t隐式转换法",[19,18881,18883],{"className":296,"code":18882,"language":298,"meta":24,"style":24},"#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",[26,18884,18885,18891,18901,18906,18911,18916,18921,18925,18933,18937,18941,18945,18951,18955,18968,18972,18984,18988,18997,19010,19014,19018,19024,19028,19041,19045,19050,19066,19070,19075,19084,19097,19101,19107,19111,19116,19124,19128,19133,19137,19145,19149,19154,19159,19164,19169,19174,19178,19183,19188,19193,19198,19202,19207,19212,19228,19240,19245,19249,19254,19259,19264,19268,19273,19287,19300,19304,19312,19316,19322,19328,19336],{"__ignoreMap":24},[29,18886,18887,18889],{"class":31,"line":32},[29,18888,2125],{"class":305},[29,18890,2128],{"class":103},[29,18892,18893,18895,18897,18899],{"class":31,"line":43},[29,18894,2133],{"class":305},[29,18896,2136],{"class":305},[29,18898,2139],{"class":35},[29,18900,1468],{"class":309},[29,18902,18903],{"class":31,"line":51},[29,18904,18905],{"class":367},"\u002F\u002F1.构造函数的分类及调用\n",[29,18907,18908],{"class":31,"line":59},[29,18909,18910],{"class":367},"\u002F\u002F分类\n",[29,18912,18913],{"class":31,"line":67},[29,18914,18915],{"class":367},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[29,18917,18918],{"class":31,"line":75},[29,18919,18920],{"class":367},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[29,18922,18923],{"class":31,"line":83},[29,18924,2575],{"emptyLinePlaceholder":233},[29,18926,18927,18929,18931],{"class":31,"line":158},[29,18928,14869],{"class":305},[29,18930,15744],{"class":35},[29,18932,2849],{"class":309},[29,18934,18935],{"class":31,"line":166},[29,18936,1722],{"class":309},[29,18938,18939],{"class":31,"line":1505},[29,18940,14891],{"class":305},[29,18942,18943],{"class":31,"line":1788},[29,18944,18689],{"class":367},[29,18946,18947,18949],{"class":31,"line":1793},[29,18948,18694],{"class":35},[29,18950,2151],{"class":309},[29,18952,18953],{"class":31,"line":1799},[29,18954,2205],{"class":309},[29,18956,18957,18959,18961,18964,18966],{"class":31,"line":1804},[29,18958,3626],{"class":309},[29,18960,1351],{"class":305},[29,18962,18963],{"class":103},"\"Person构造函数无参构造\"",[29,18965,1351],{"class":305},[29,18967,1373],{"class":309},[29,18969,18970],{"class":31,"line":1818},[29,18971,2362],{"class":309},[29,18973,18974,18976,18978,18980,18982],{"class":31,"line":1823},[29,18975,18694],{"class":35},[29,18977,310],{"class":309},[29,18979,313],{"class":305},[29,18981,1574],{"class":5391},[29,18983,316],{"class":309},[29,18985,18986],{"class":31,"line":1829},[29,18987,2205],{"class":309},[29,18989,18990,18993,18995],{"class":31,"line":1850},[29,18991,18992],{"class":309},"        age",[29,18994,355],{"class":305},[29,18996,6372],{"class":309},[29,18998,18999,19001,19003,19006,19008],{"class":31,"line":1855},[29,19000,3626],{"class":309},[29,19002,1351],{"class":305},[29,19004,19005],{"class":103},"\"Person构造函数有参构造\"",[29,19007,1351],{"class":305},[29,19009,1373],{"class":309},[29,19011,19012],{"class":31,"line":1869},[29,19013,2362],{"class":309},[29,19015,19016],{"class":31,"line":1874},[29,19017,18722],{"class":367},[29,19019,19020,19022],{"class":31,"line":1903},[29,19021,18727],{"class":35},[29,19023,2151],{"class":309},[29,19025,19026],{"class":31,"line":1908},[29,19027,2205],{"class":309},[29,19029,19030,19032,19034,19037,19039],{"class":31,"line":1925},[29,19031,3626],{"class":309},[29,19033,1351],{"class":305},[29,19035,19036],{"class":103},"\"Person析构函数被调用\"",[29,19038,1351],{"class":305},[29,19040,1373],{"class":309},[29,19042,19043],{"class":31,"line":1930},[29,19044,2362],{"class":309},[29,19046,19047],{"class":31,"line":1935},[29,19048,19049],{"class":367},"    \u002F\u002F拷贝构造函数\n",[29,19051,19052,19054,19056,19058,19060,19062,19064],{"class":31,"line":1940},[29,19053,18694],{"class":35},[29,19055,310],{"class":309},[29,19057,6967],{"class":305},[29,19059,15744],{"class":35},[29,19061,10759],{"class":305},[29,19063,171],{"class":5391},[29,19065,316],{"class":309},[29,19067,19068],{"class":31,"line":1954},[29,19069,2205],{"class":309},[29,19071,19072],{"class":31,"line":1959},[29,19073,19074],{"class":367},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[29,19076,19077,19079,19081],{"class":31,"line":2752},[29,19078,18992],{"class":309},[29,19080,355],{"class":305},[29,19082,19083],{"class":309},"p.age;\n",[29,19085,19086,19088,19090,19093,19095],{"class":31,"line":2766},[29,19087,3626],{"class":309},[29,19089,1351],{"class":305},[29,19091,19092],{"class":103},"\"Person拷贝构造函数被调用\"",[29,19094,1351],{"class":305},[29,19096,1373],{"class":309},[29,19098,19099],{"class":31,"line":2774},[29,19100,2362],{"class":309},[29,19102,19103,19105],{"class":31,"line":2779},[29,19104,2160],{"class":305},[29,19106,7972],{"class":309},[29,19108,19109],{"class":31,"line":2785},[29,19110,4170],{"class":309},[29,19112,19113],{"class":31,"line":2791},[29,19114,19115],{"class":367},"\u002F\u002F调用\n",[29,19117,19118,19120,19122],{"class":31,"line":2796},[29,19119,5539],{"class":305},[29,19121,5763],{"class":35},[29,19123,2151],{"class":309},[29,19125,19126],{"class":31,"line":8123},[29,19127,1722],{"class":309},[29,19129,19130],{"class":31,"line":8147},[29,19131,19132],{"class":367},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[29,19134,19135],{"class":31,"line":8152},[29,19136,1741],{"class":309},[29,19138,19139,19141,19143],{"class":31,"line":8158},[29,19140,5539],{"class":305},[29,19142,5832],{"class":35},[29,19144,2151],{"class":309},[29,19146,19147],{"class":31,"line":8185},[29,19148,1722],{"class":309},[29,19150,19151],{"class":31,"line":8190},[29,19152,19153],{"class":367},"    \u002F\u002F1.括号法\n",[29,19155,19156],{"class":31,"line":8196},[29,19157,19158],{"class":367},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[29,19160,19161],{"class":31,"line":8208},[29,19162,19163],{"class":367},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[29,19165,19166],{"class":31,"line":8220},[29,19167,19168],{"class":367},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[29,19170,19171],{"class":31,"line":8232},[29,19172,19173],{"class":367},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[29,19175,19176],{"class":31,"line":9891},[29,19177,2575],{"emptyLinePlaceholder":233},[29,19179,19180],{"class":31,"line":9916},[29,19181,19182],{"class":367},"    \u002F\u002F注意事项\n",[29,19184,19185],{"class":31,"line":9939},[29,19186,19187],{"class":367},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[29,19189,19190],{"class":31,"line":9963},[29,19191,19192],{"class":367},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[29,19194,19195],{"class":31,"line":9968},[29,19196,19197],{"class":367},"    \u002F\u002F Person p4();\n",[29,19199,19200],{"class":31,"line":9973},[29,19201,2575],{"emptyLinePlaceholder":233},[29,19203,19204],{"class":31,"line":9978},[29,19205,19206],{"class":367},"    \u002F\u002F2.显示法\n",[29,19208,19209],{"class":31,"line":9987},[29,19210,19211],{"class":309},"    Person p1;\n",[29,19213,19214,19217,19219,19222,19224,19226],{"class":31,"line":9992},[29,19215,19216],{"class":309},"    Person p2",[29,19218,355],{"class":305},[29,19220,19221],{"class":35},"Person",[29,19223,310],{"class":309},[29,19225,754],{"class":39},[29,19227,2894],{"class":309},[29,19229,19230,19233,19235,19237],{"class":31,"line":9998},[29,19231,19232],{"class":309},"    Person p3",[29,19234,355],{"class":305},[29,19236,19221],{"class":35},[29,19238,19239],{"class":309},"(p2);\n",[29,19241,19242],{"class":31,"line":10019},[29,19243,19244],{"class":367},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[29,19246,19247],{"class":31,"line":10025},[29,19248,2575],{"emptyLinePlaceholder":233},[29,19250,19251],{"class":31,"line":10039},[29,19252,19253],{"class":367},"    \u002F\u002F 注意事项2\n",[29,19255,19256],{"class":31,"line":10045},[29,19257,19258],{"class":367},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[29,19260,19261],{"class":31,"line":10072},[29,19262,19263],{"class":367},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[29,19265,19266],{"class":31,"line":10081},[29,19267,2575],{"emptyLinePlaceholder":233},[29,19269,19270],{"class":31,"line":10087},[29,19271,19272],{"class":367},"    \u002F\u002F3.隐士转换法\n",[29,19274,19275,19278,19280,19282,19284],{"class":31,"line":10095},[29,19276,19277],{"class":309},"    Person p4",[29,19279,355],{"class":305},[29,19281,754],{"class":39},[29,19283,364],{"class":309},[29,19285,19286],{"class":367},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[29,19288,19289,19292,19294,19297],{"class":31,"line":10100},[29,19290,19291],{"class":309},"    Person p5",[29,19293,355],{"class":305},[29,19295,19296],{"class":309},"p4;",[29,19298,19299],{"class":367}," \u002F\u002F 这里会调用拷贝构造函数\n",[29,19301,19302],{"class":31,"line":16779},[29,19303,1741],{"class":309},[29,19305,19306,19308,19310],{"class":31,"line":16785},[29,19307,313],{"class":305},[29,19309,2148],{"class":35},[29,19311,2151],{"class":309},[29,19313,19314],{"class":31,"line":16808},[29,19315,1722],{"class":309},[29,19317,19318,19320],{"class":31,"line":16814},[29,19319,5808],{"class":35},[29,19321,5811],{"class":309},[29,19323,19324,19326],{"class":31,"line":16837},[29,19325,5877],{"class":35},[29,19327,5811],{"class":309},[29,19329,19330,19332,19334],{"class":31,"line":16851},[29,19331,4265],{"class":305},[29,19333,4268],{"class":39},[29,19335,1468],{"class":309},[29,19337,19338],{"class":31,"line":16871},[29,19339,1741],{"class":309},[171,19341,19342,19345],{},[457,19343,19344],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[275,19347,19349],{"id":19348},"_823拷贝构造函数","8.2.3拷贝构造函数",[171,19351,19352],{},"C++中拷贝构造函数调用时机通常有三种情况",[175,19354,19355,19358,19361],{},[178,19356,19357],{},"使用一个已经创建完毕的对象来初始化一个新对象",[178,19359,19360],{},"值传递的方式给函数参数传值",[178,19362,19363],{},"以值方式返回局部对象",[19,19365,19367],{"className":296,"code":19366,"language":298,"meta":24,"style":24},"#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",[26,19368,19369,19375,19385,19389,19394,19398,19403,19408,19413,19419,19423,19427,19433,19437,19450,19454,19459,19471,19475,19483,19496,19500,19504,19520,19524,19533,19546,19550,19556,19560,19572,19576,19582,19586,19590,19598,19602,19615,19623,19641,19645,19650,19655,19670,19674,19687,19691,19699,19703,19707,19715,19719,19724,19733,19737,19741,19766,19776,19780,19788,19792,19803,19828,19832,19836,19840,19848,19852,19857,19862,19869,19874,19879,19884,19889,19893,19898,19902,19907,19911,19916,19921,19925,19929,19934,19939,19947],{"__ignoreMap":24},[29,19370,19371,19373],{"class":31,"line":32},[29,19372,2125],{"class":305},[29,19374,2128],{"class":103},[29,19376,19377,19379,19381,19383],{"class":31,"line":43},[29,19378,2133],{"class":305},[29,19380,2136],{"class":305},[29,19382,2139],{"class":35},[29,19384,1468],{"class":309},[29,19386,19387],{"class":31,"line":51},[29,19388,2575],{"emptyLinePlaceholder":233},[29,19390,19391],{"class":31,"line":59},[29,19392,19393],{"class":367},"\u002F\u002F拷贝构造函数调用时机\n",[29,19395,19396],{"class":31,"line":67},[29,19397,2575],{"emptyLinePlaceholder":233},[29,19399,19400],{"class":31,"line":75},[29,19401,19402],{"class":367},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[29,19404,19405],{"class":31,"line":83},[29,19406,19407],{"class":367},"\u002F\u002F2.值传递的方式给函数参数传值\n",[29,19409,19410],{"class":31,"line":158},[29,19411,19412],{"class":367},"\u002F\u002F3.以值方式返回局部对象\n",[29,19414,19415,19417],{"class":31,"line":166},[29,19416,14869],{"class":305},[29,19418,15346],{"class":35},[29,19420,19421],{"class":31,"line":1505},[29,19422,1722],{"class":309},[29,19424,19425],{"class":31,"line":1788},[29,19426,14891],{"class":305},[29,19428,19429,19431],{"class":31,"line":1793},[29,19430,18694],{"class":35},[29,19432,2151],{"class":309},[29,19434,19435],{"class":31,"line":1799},[29,19436,2205],{"class":309},[29,19438,19439,19441,19443,19446,19448],{"class":31,"line":1804},[29,19440,9844],{"class":309},[29,19442,1351],{"class":305},[29,19444,19445],{"class":103}," \"Person的默认构造函数调用\"",[29,19447,1620],{"class":305},[29,19449,9015],{"class":309},[29,19451,19452],{"class":31,"line":1818},[29,19453,2362],{"class":309},[29,19455,19456],{"class":31,"line":1823},[29,19457,19458],{"class":367},"    \u002F\u002F有参构造\n",[29,19460,19461,19463,19465,19467,19469],{"class":31,"line":1829},[29,19462,18694],{"class":35},[29,19464,310],{"class":309},[29,19466,313],{"class":305},[29,19468,15864],{"class":5391},[29,19470,316],{"class":309},[29,19472,19473],{"class":31,"line":1850},[29,19474,2205],{"class":309},[29,19476,19477,19479,19481],{"class":31,"line":1855},[29,19478,15918],{"class":309},[29,19480,355],{"class":305},[29,19482,7972],{"class":309},[29,19484,19485,19487,19489,19492,19494],{"class":31,"line":1869},[29,19486,9844],{"class":309},[29,19488,1351],{"class":305},[29,19490,19491],{"class":103}," \"Person的有参构造函数调用\"",[29,19493,1620],{"class":305},[29,19495,9015],{"class":309},[29,19497,19498],{"class":31,"line":1874},[29,19499,2362],{"class":309},[29,19501,19502],{"class":31,"line":1903},[29,19503,19049],{"class":367},[29,19505,19506,19508,19510,19512,19514,19516,19518],{"class":31,"line":1908},[29,19507,18694],{"class":35},[29,19509,310],{"class":309},[29,19511,6967],{"class":305},[29,19513,15744],{"class":35},[29,19515,10759],{"class":305},[29,19517,171],{"class":5391},[29,19519,316],{"class":309},[29,19521,19522],{"class":31,"line":1925},[29,19523,2205],{"class":309},[29,19525,19526,19528,19530],{"class":31,"line":1930},[29,19527,15918],{"class":309},[29,19529,355],{"class":305},[29,19531,19532],{"class":309}," p.m_Age;\n",[29,19534,19535,19537,19539,19542,19544],{"class":31,"line":1935},[29,19536,9844],{"class":309},[29,19538,1351],{"class":305},[29,19540,19541],{"class":103}," \"Person的拷贝构造函数调用\"",[29,19543,1620],{"class":305},[29,19545,9015],{"class":309},[29,19547,19548],{"class":31,"line":1940},[29,19549,2362],{"class":309},[29,19551,19552,19554],{"class":31,"line":1954},[29,19553,18727],{"class":35},[29,19555,2151],{"class":309},[29,19557,19558],{"class":31,"line":1959},[29,19559,2205],{"class":309},[29,19561,19562,19564,19566,19568,19570],{"class":31,"line":2752},[29,19563,9844],{"class":309},[29,19565,1351],{"class":305},[29,19567,18742],{"class":103},[29,19569,1620],{"class":305},[29,19571,9015],{"class":309},[29,19573,19574],{"class":31,"line":2766},[29,19575,2362],{"class":309},[29,19577,19578,19580],{"class":31,"line":2774},[29,19579,2160],{"class":305},[29,19581,15841],{"class":309},[29,19583,19584],{"class":31,"line":2779},[29,19585,4170],{"class":309},[29,19587,19588],{"class":31,"line":2785},[29,19589,19402],{"class":367},[29,19591,19592,19594,19596],{"class":31,"line":2791},[29,19593,5539],{"class":305},[29,19595,5763],{"class":35},[29,19597,2151],{"class":309},[29,19599,19600],{"class":31,"line":2796},[29,19601,1722],{"class":309},[29,19603,19604,19607,19609,19611,19613],{"class":31,"line":8123},[29,19605,19606],{"class":309},"    Person ",[29,19608,7305],{"class":35},[29,19610,310],{"class":309},[29,19612,1008],{"class":39},[29,19614,2894],{"class":309},[29,19616,19617,19619,19621],{"class":31,"line":8147},[29,19618,19606],{"class":309},[29,19620,7208],{"class":35},[29,19622,17690],{"class":309},[29,19624,19625,19627,19629,19632,19634,19637,19639],{"class":31,"line":8152},[29,19626,1727],{"class":309},[29,19628,1351],{"class":305},[29,19630,19631],{"class":103},"\"P2的年龄为：\"",[29,19633,1351],{"class":305},[29,19635,19636],{"class":309},"p2.m_Age",[29,19638,1351],{"class":305},[29,19640,1373],{"class":309},[29,19642,19643],{"class":31,"line":8158},[29,19644,1741],{"class":309},[29,19646,19647],{"class":31,"line":8185},[29,19648,19649],{"class":367},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[29,19651,19652],{"class":31,"line":8190},[29,19653,19654],{"class":367},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[29,19656,19657,19659,19662,19664,19666,19668],{"class":31,"line":8196},[29,19658,5539],{"class":305},[29,19660,19661],{"class":35}," doWork",[29,19663,310],{"class":309},[29,19665,19221],{"class":35},[29,19667,7000],{"class":5391},[29,19669,316],{"class":309},[29,19671,19672],{"class":31,"line":8208},[29,19673,1722],{"class":309},[29,19675,19676,19678,19680,19683,19685],{"class":31,"line":8220},[29,19677,6704],{"class":309},[29,19679,1351],{"class":305},[29,19681,19682],{"class":103}," \"doWork函数调用\"",[29,19684,1620],{"class":305},[29,19686,9015],{"class":309},[29,19688,19689],{"class":31,"line":8232},[29,19690,1741],{"class":309},[29,19692,19693,19695,19697],{"class":31,"line":9891},[29,19694,5539],{"class":305},[29,19696,5832],{"class":35},[29,19698,2151],{"class":309},[29,19700,19701],{"class":31,"line":9916},[29,19702,1722],{"class":309},[29,19704,19705],{"class":31,"line":9939},[29,19706,15488],{"class":309},[29,19708,19709,19712],{"class":31,"line":9963},[29,19710,19711],{"class":35},"    doWork",[29,19713,19714],{"class":309},"(p);\n",[29,19716,19717],{"class":31,"line":9968},[29,19718,1741],{"class":309},[29,19720,19721],{"class":31,"line":9973},[29,19722,19723],{"class":367},"\u002F\u002F 3.以值方式返回局部对象\n",[29,19725,19726,19728,19731],{"class":31,"line":9978},[29,19727,19221],{"class":35},[29,19729,19730],{"class":35}," doWork2",[29,19732,2151],{"class":309},[29,19734,19735],{"class":31,"line":9987},[29,19736,1722],{"class":309},[29,19738,19739],{"class":31,"line":9992},[29,19740,19211],{"class":309},[29,19742,19743,19745,19747,19749,19751,19753,19755,19757,19759,19761,19763],{"class":31,"line":9998},[29,19744,1727],{"class":309},[29,19746,1351],{"class":305},[29,19748,310],{"class":309},[29,19750,313],{"class":305},[29,19752,6693],{"class":305},[29,19754,737],{"class":309},[29,19756,661],{"class":305},[29,19758,7305],{"class":309},[29,19760,1351],{"class":305},[29,19762,1416],{"class":309},[29,19764,19765],{"class":367},"\u002F\u002F打印p1的地址\n",[29,19767,19768,19770,19773],{"class":31,"line":10019},[29,19769,4265],{"class":305},[29,19771,19772],{"class":309}," p1;",[29,19774,19775],{"class":367},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[29,19777,19778],{"class":31,"line":10025},[29,19779,1741],{"class":309},[29,19781,19782,19784,19786],{"class":31,"line":10039},[29,19783,5539],{"class":305},[29,19785,5904],{"class":35},[29,19787,2151],{"class":309},[29,19789,19790],{"class":31,"line":10045},[29,19791,1722],{"class":309},[29,19793,19794,19797,19799,19801],{"class":31,"line":10072},[29,19795,19796],{"class":309},"    Person p ",[29,19798,355],{"class":305},[29,19800,19730],{"class":35},[29,19802,5811],{"class":309},[29,19804,19805,19807,19809,19811,19813,19815,19817,19819,19821,19823,19825],{"class":31,"line":10081},[29,19806,1727],{"class":309},[29,19808,1351],{"class":305},[29,19810,310],{"class":309},[29,19812,313],{"class":305},[29,19814,6693],{"class":305},[29,19816,737],{"class":309},[29,19818,661],{"class":305},[29,19820,171],{"class":309},[29,19822,1351],{"class":305},[29,19824,1416],{"class":309},[29,19826,19827],{"class":367},"\u002F\u002F打印p的地址\n",[29,19829,19830],{"class":31,"line":10087},[29,19831,1741],{"class":309},[29,19833,19834],{"class":31,"line":10095},[29,19835,2575],{"emptyLinePlaceholder":233},[29,19837,19838],{"class":31,"line":10100},[29,19839,2575],{"emptyLinePlaceholder":233},[29,19841,19842,19844,19846],{"class":31,"line":16779},[29,19843,313],{"class":305},[29,19845,2148],{"class":35},[29,19847,2151],{"class":309},[29,19849,19850],{"class":31,"line":16785},[29,19851,1722],{"class":309},[29,19853,19854],{"class":31,"line":16808},[29,19855,19856],{"class":367},"    \u002F\u002F test01();\n",[29,19858,19859],{"class":31,"line":16814},[29,19860,19861],{"class":367},"    \u002F\u002F test02();\n",[29,19863,19864,19867],{"class":31,"line":16837},[29,19865,19866],{"class":35},"    test03",[29,19868,5811],{"class":309},[29,19870,19871],{"class":31,"line":16851},[29,19872,19873],{"class":367},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[29,19875,19876],{"class":31,"line":16871},[29,19877,19878],{"class":367},"\u002F\u002F 输出结果如下：\n",[29,19880,19881],{"class":31,"line":16877},[29,19882,19883],{"class":367},"\u002F\u002F Person的默认构造函数调用\n",[29,19885,19886],{"class":31,"line":16888},[29,19887,19888],{"class":367},"\u002F\u002F 0x7fffffffceec\n",[29,19890,19891],{"class":31,"line":16911},[29,19892,19888],{"class":367},[29,19894,19895],{"class":31,"line":16933},[29,19896,19897],{"class":367},"\u002F\u002F Person的析构函数调用\n",[29,19899,19900],{"class":31,"line":16938},[29,19901,2575],{"emptyLinePlaceholder":233},[29,19903,19904],{"class":31,"line":16944},[29,19905,19906],{"class":367},"\u002F\u002F 之前的输出结果如下：\n",[29,19908,19909],{"class":31,"line":16958},[29,19910,19883],{"class":367},[29,19912,19913],{"class":31,"line":16971},[29,19914,19915],{"class":367},"\u002F\u002F 地址\n",[29,19917,19918],{"class":31,"line":16976},[29,19919,19920],{"class":367},"\u002F\u002F Person的拷贝构造函数调用\n",[29,19922,19923],{"class":31,"line":16990},[29,19924,19897],{"class":367},[29,19926,19927],{"class":31,"line":16995},[29,19928,19915],{"class":367},[29,19930,19931],{"class":31,"line":17001},[29,19932,19933],{"class":367},"\u002F\u002F (这两次输出的地址也是不同的) \n",[29,19935,19936],{"class":31,"line":17006},[29,19937,19938],{"class":367},"\u002F\u002F Person的析构函数调用     \n",[29,19940,19941,19943,19945],{"class":31,"line":17020},[29,19942,4265],{"class":305},[29,19944,4268],{"class":39},[29,19946,1468],{"class":309},[29,19948,19949],{"class":31,"line":17025},[29,19950,1741],{"class":309},[171,19952,19953],{},"简化版理解",[19,19955,19957],{"className":296,"code":19956,"language":298,"meta":24,"style":24},"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",[26,19958,19959,19967,19971,19977,19990,20001,20005,20017,20030,20038,20042,20058,20071,20080,20084,20089,20095,20108,20112,20116,20123,20127,20131,20136,20144,20148,20164,20177,20190,20194,20199,20207,20211,20215,20220,20225,20241,20249,20256,20262,20266,20270,20275,20283,20287,20291,20314,20321,20325,20329,20337,20341,20351,20373,20377,20381,20385,20393,20397,20402,20407,20413,20417,20427,20431,20439],{"__ignoreMap":24},[29,19960,19961,19963,19965],{"class":31,"line":32},[29,19962,14869],{"class":305},[29,19964,15744],{"class":35},[29,19966,15747],{"class":309},[29,19968,19969],{"class":31,"line":43},[29,19970,14891],{"class":305},[29,19972,19973,19975],{"class":31,"line":51},[29,19974,18694],{"class":35},[29,19976,11028],{"class":309},[29,19978,19979,19981,19983,19986,19988],{"class":31,"line":59},[29,19980,9844],{"class":309},[29,19982,1351],{"class":305},[29,19984,19985],{"class":103}," \"无参构造函数!\"",[29,19987,1620],{"class":305},[29,19989,9015],{"class":309},[29,19991,19992,19995,19997,19999],{"class":31,"line":67},[29,19993,19994],{"class":309},"        mAge ",[29,19996,355],{"class":305},[29,19998,4268],{"class":39},[29,20000,1468],{"class":309},[29,20002,20003],{"class":31,"line":75},[29,20004,2362],{"class":309},[29,20006,20007,20009,20011,20013,20015],{"class":31,"line":83},[29,20008,18694],{"class":35},[29,20010,310],{"class":309},[29,20012,313],{"class":305},[29,20014,15864],{"class":5391},[29,20016,12617],{"class":309},[29,20018,20019,20021,20023,20026,20028],{"class":31,"line":158},[29,20020,9844],{"class":309},[29,20022,1351],{"class":305},[29,20024,20025],{"class":103}," \"有参构造函数!\"",[29,20027,1620],{"class":305},[29,20029,9015],{"class":309},[29,20031,20032,20034,20036],{"class":31,"line":166},[29,20033,19994],{"class":309},[29,20035,355],{"class":305},[29,20037,7972],{"class":309},[29,20039,20040],{"class":31,"line":1505},[29,20041,2362],{"class":309},[29,20043,20044,20046,20048,20050,20052,20054,20056],{"class":31,"line":1788},[29,20045,18694],{"class":35},[29,20047,310],{"class":309},[29,20049,6967],{"class":305},[29,20051,15744],{"class":35},[29,20053,661],{"class":305},[29,20055,7000],{"class":5391},[29,20057,12617],{"class":309},[29,20059,20060,20062,20064,20067,20069],{"class":31,"line":1793},[29,20061,9844],{"class":309},[29,20063,1351],{"class":305},[29,20065,20066],{"class":103}," \"拷贝构造函数!\"",[29,20068,1620],{"class":305},[29,20070,9015],{"class":309},[29,20072,20073,20075,20077],{"class":31,"line":1799},[29,20074,19994],{"class":309},[29,20076,355],{"class":305},[29,20078,20079],{"class":309}," p.mAge;\n",[29,20081,20082],{"class":31,"line":1804},[29,20083,2362],{"class":309},[29,20085,20086],{"class":31,"line":1818},[29,20087,20088],{"class":367},"    \u002F\u002F析构函数在释放内存之前调用\n",[29,20090,20091,20093],{"class":31,"line":1823},[29,20092,18727],{"class":35},[29,20094,11028],{"class":309},[29,20096,20097,20099,20101,20104,20106],{"class":31,"line":1829},[29,20098,9844],{"class":309},[29,20100,1351],{"class":305},[29,20102,20103],{"class":103}," \"析构函数!\"",[29,20105,1620],{"class":305},[29,20107,9015],{"class":309},[29,20109,20110],{"class":31,"line":1850},[29,20111,2362],{"class":309},[29,20113,20114],{"class":31,"line":1855},[29,20115,14891],{"class":305},[29,20117,20118,20120],{"class":31,"line":1869},[29,20119,2160],{"class":305},[29,20121,20122],{"class":309}," mAge;\n",[29,20124,20125],{"class":31,"line":1874},[29,20126,4170],{"class":309},[29,20128,20129],{"class":31,"line":1903},[29,20130,2575],{"emptyLinePlaceholder":233},[29,20132,20133],{"class":31,"line":1908},[29,20134,20135],{"class":367},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[29,20137,20138,20140,20142],{"class":31,"line":1925},[29,20139,5539],{"class":305},[29,20141,5763],{"class":35},[29,20143,11028],{"class":309},[29,20145,20146],{"class":31,"line":1930},[29,20147,2575],{"emptyLinePlaceholder":233},[29,20149,20150,20152,20155,20157,20159,20161],{"class":31,"line":1935},[29,20151,19606],{"class":309},[29,20153,20154],{"class":35},"man",[29,20156,310],{"class":309},[29,20158,619],{"class":39},[29,20160,6141],{"class":309},[29,20162,20163],{"class":367}," \u002F\u002Fp对象已经创建完毕\n",[29,20165,20166,20168,20171,20174],{"class":31,"line":1940},[29,20167,19606],{"class":309},[29,20169,20170],{"class":35},"newman",[29,20172,20173],{"class":309},"(man);",[29,20175,20176],{"class":367}," \u002F\u002F调用拷贝构造函数\n",[29,20178,20179,20182,20184,20187],{"class":31,"line":1954},[29,20180,20181],{"class":309},"    Person newman2 ",[29,20183,355],{"class":305},[29,20185,20186],{"class":309}," man;",[29,20188,20189],{"class":367}," \u002F\u002F拷贝构造\n",[29,20191,20192],{"class":31,"line":1959},[29,20193,2575],{"emptyLinePlaceholder":233},[29,20195,20196],{"class":31,"line":2752},[29,20197,20198],{"class":367},"    \u002F\u002FPerson newman3;\n",[29,20200,20201,20204],{"class":31,"line":2766},[29,20202,20203],{"class":367},"    \u002F\u002Fnewman3 = man;",[29,20205,20206],{"class":367}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[29,20208,20209],{"class":31,"line":2774},[29,20210,1741],{"class":309},[29,20212,20213],{"class":31,"line":2779},[29,20214,2575],{"emptyLinePlaceholder":233},[29,20216,20217],{"class":31,"line":2785},[29,20218,20219],{"class":367},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[29,20221,20222],{"class":31,"line":2791},[29,20223,20224],{"class":367},"\u002F\u002F相当于Person p1 = p;\n",[29,20226,20227,20229,20231,20233,20235,20238],{"class":31,"line":2796},[29,20228,5539],{"class":305},[29,20230,19661],{"class":35},[29,20232,310],{"class":309},[29,20234,19221],{"class":35},[29,20236,20237],{"class":5391}," p1",[29,20239,20240],{"class":309},") {}\n",[29,20242,20243,20245,20247],{"class":31,"line":8123},[29,20244,5539],{"class":305},[29,20246,5832],{"class":35},[29,20248,11028],{"class":309},[29,20250,20251,20253],{"class":31,"line":8147},[29,20252,18779],{"class":309},[29,20254,20255],{"class":367}," \u002F\u002F无参构造函数\n",[29,20257,20258,20260],{"class":31,"line":8152},[29,20259,19711],{"class":35},[29,20261,19714],{"class":309},[29,20263,20264],{"class":31,"line":8158},[29,20265,1741],{"class":309},[29,20267,20268],{"class":31,"line":8185},[29,20269,2575],{"emptyLinePlaceholder":233},[29,20271,20272],{"class":31,"line":8190},[29,20273,20274],{"class":367},"\u002F\u002F3. 以值方式返回局部对象\n",[29,20276,20277,20279,20281],{"class":31,"line":8196},[29,20278,19221],{"class":35},[29,20280,19730],{"class":35},[29,20282,2151],{"class":309},[29,20284,20285],{"class":31,"line":8208},[29,20286,1722],{"class":309},[29,20288,20289],{"class":31,"line":8220},[29,20290,19211],{"class":309},[29,20292,20293,20295,20297,20299,20301,20303,20305,20307,20310,20312],{"class":31,"line":8232},[29,20294,6704],{"class":309},[29,20296,1351],{"class":305},[29,20298,1834],{"class":309},[29,20300,313],{"class":305},[29,20302,6693],{"class":305},[29,20304,737],{"class":309},[29,20306,661],{"class":305},[29,20308,20309],{"class":309},"p1 ",[29,20311,1351],{"class":305},[29,20313,9015],{"class":309},[29,20315,20316,20318],{"class":31,"line":9891},[29,20317,4265],{"class":305},[29,20319,20320],{"class":309}," p1;\n",[29,20322,20323],{"class":31,"line":9916},[29,20324,1741],{"class":309},[29,20326,20327],{"class":31,"line":9939},[29,20328,2575],{"emptyLinePlaceholder":233},[29,20330,20331,20333,20335],{"class":31,"line":9963},[29,20332,5539],{"class":305},[29,20334,5904],{"class":35},[29,20336,2151],{"class":309},[29,20338,20339],{"class":31,"line":9968},[29,20340,1722],{"class":309},[29,20342,20343,20345,20347,20349],{"class":31,"line":9973},[29,20344,19796],{"class":309},[29,20346,355],{"class":305},[29,20348,19730],{"class":35},[29,20350,5811],{"class":309},[29,20352,20353,20355,20357,20359,20361,20363,20365,20367,20369,20371],{"class":31,"line":9978},[29,20354,6704],{"class":309},[29,20356,1351],{"class":305},[29,20358,1834],{"class":309},[29,20360,313],{"class":305},[29,20362,6693],{"class":305},[29,20364,737],{"class":309},[29,20366,661],{"class":305},[29,20368,11623],{"class":309},[29,20370,1351],{"class":305},[29,20372,9015],{"class":309},[29,20374,20375],{"class":31,"line":9987},[29,20376,1741],{"class":309},[29,20378,20379],{"class":31,"line":9992},[29,20380,2575],{"emptyLinePlaceholder":233},[29,20382,20383],{"class":31,"line":9998},[29,20384,2575],{"emptyLinePlaceholder":233},[29,20386,20387,20389,20391],{"class":31,"line":10019},[29,20388,313],{"class":305},[29,20390,2148],{"class":35},[29,20392,11028],{"class":309},[29,20394,20395],{"class":31,"line":10025},[29,20396,2575],{"emptyLinePlaceholder":233},[29,20398,20399],{"class":31,"line":10039},[29,20400,20401],{"class":367},"    \u002F\u002Ftest01();\n",[29,20403,20404],{"class":31,"line":10045},[29,20405,20406],{"class":367},"    \u002F\u002Ftest02();\n",[29,20408,20409,20411],{"class":31,"line":10072},[29,20410,19866],{"class":35},[29,20412,5811],{"class":309},[29,20414,20415],{"class":31,"line":10081},[29,20416,2575],{"emptyLinePlaceholder":233},[29,20418,20419,20421,20423,20425],{"class":31,"line":10087},[29,20420,2478],{"class":35},[29,20422,310],{"class":309},[29,20424,2483],{"class":103},[29,20426,2894],{"class":309},[29,20428,20429],{"class":31,"line":10095},[29,20430,2575],{"emptyLinePlaceholder":233},[29,20432,20433,20435,20437],{"class":31,"line":10100},[29,20434,4265],{"class":305},[29,20436,4268],{"class":39},[29,20438,1468],{"class":309},[29,20440,20441],{"class":31,"line":16779},[29,20442,1741],{"class":309},[275,20444,20446],{"id":20445},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[171,20448,20449],{},"默认情况下，c++编译器至少给一个类添加3个函数",[171,20451,20452],{},"1．默认构造函数(无参，函数体为空)",[171,20454,20455],{},"2．默认析构函数(无参，函数体为空)",[171,20457,20458],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[171,20460,20461],{},"构造函数调用规则如下：",[175,20463,20464,20467],{},[178,20465,20466],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[178,20468,20469],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[19,20471,20473],{"className":296,"code":20472,"language":298,"meta":24,"style":24},"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",[26,20474,20475,20483,20487,20492,20498,20510,20514,20519,20531,20540,20552,20556,20560,20576,20585,20597,20601,20605,20611,20623,20627,20631,20637,20641,20645,20653,20657,20669,20674,20682,20686,20704,20708,20712,20720,20724,20729,20737,20752,20765,20769,20774,20781,20797,20810,20814,20818,20826,20830,20836,20840,20850,20854,20862],{"__ignoreMap":24},[29,20476,20477,20479,20481],{"class":31,"line":32},[29,20478,14869],{"class":305},[29,20480,15744],{"class":35},[29,20482,15747],{"class":309},[29,20484,20485],{"class":31,"line":43},[29,20486,14891],{"class":305},[29,20488,20489],{"class":31,"line":51},[29,20490,20491],{"class":367},"    \u002F\u002F无参（默认）构造函数\n",[29,20493,20494,20496],{"class":31,"line":59},[29,20495,18694],{"class":35},[29,20497,11028],{"class":309},[29,20499,20500,20502,20504,20506,20508],{"class":31,"line":67},[29,20501,9844],{"class":309},[29,20503,1351],{"class":305},[29,20505,19985],{"class":103},[29,20507,1620],{"class":305},[29,20509,9015],{"class":309},[29,20511,20512],{"class":31,"line":75},[29,20513,2362],{"class":309},[29,20515,20516],{"class":31,"line":83},[29,20517,20518],{"class":367},"    \u002F\u002F有参构造函数\n",[29,20520,20521,20523,20525,20527,20529],{"class":31,"line":158},[29,20522,18694],{"class":35},[29,20524,310],{"class":309},[29,20526,313],{"class":305},[29,20528,1574],{"class":5391},[29,20530,12617],{"class":309},[29,20532,20533,20536,20538],{"class":31,"line":166},[29,20534,20535],{"class":309},"        age ",[29,20537,355],{"class":305},[29,20539,1608],{"class":309},[29,20541,20542,20544,20546,20548,20550],{"class":31,"line":1505},[29,20543,9844],{"class":309},[29,20545,1351],{"class":305},[29,20547,20025],{"class":103},[29,20549,1620],{"class":305},[29,20551,9015],{"class":309},[29,20553,20554],{"class":31,"line":1788},[29,20555,2362],{"class":309},[29,20557,20558],{"class":31,"line":1793},[29,20559,19049],{"class":367},[29,20561,20562,20564,20566,20568,20570,20572,20574],{"class":31,"line":1799},[29,20563,18694],{"class":35},[29,20565,310],{"class":309},[29,20567,6967],{"class":305},[29,20569,15744],{"class":35},[29,20571,661],{"class":305},[29,20573,7000],{"class":5391},[29,20575,12617],{"class":309},[29,20577,20578,20580,20582],{"class":31,"line":1804},[29,20579,20535],{"class":309},[29,20581,355],{"class":305},[29,20583,20584],{"class":309}," p.age;\n",[29,20586,20587,20589,20591,20593,20595],{"class":31,"line":1818},[29,20588,9844],{"class":309},[29,20590,1351],{"class":305},[29,20592,20066],{"class":103},[29,20594,1620],{"class":305},[29,20596,9015],{"class":309},[29,20598,20599],{"class":31,"line":1823},[29,20600,2362],{"class":309},[29,20602,20603],{"class":31,"line":1829},[29,20604,18722],{"class":367},[29,20606,20607,20609],{"class":31,"line":1850},[29,20608,18727],{"class":35},[29,20610,11028],{"class":309},[29,20612,20613,20615,20617,20619,20621],{"class":31,"line":1855},[29,20614,9844],{"class":309},[29,20616,1351],{"class":305},[29,20618,20103],{"class":103},[29,20620,1620],{"class":305},[29,20622,9015],{"class":309},[29,20624,20625],{"class":31,"line":1869},[29,20626,2362],{"class":309},[29,20628,20629],{"class":31,"line":1874},[29,20630,14891],{"class":305},[29,20632,20633,20635],{"class":31,"line":1903},[29,20634,2160],{"class":305},[29,20636,7972],{"class":309},[29,20638,20639],{"class":31,"line":1908},[29,20640,4170],{"class":309},[29,20642,20643],{"class":31,"line":1925},[29,20644,2575],{"emptyLinePlaceholder":233},[29,20646,20647,20649,20651],{"class":31,"line":1930},[29,20648,5539],{"class":305},[29,20650,5763],{"class":35},[29,20652,2151],{"class":309},[29,20654,20655],{"class":31,"line":1935},[29,20656,1722],{"class":309},[29,20658,20659,20661,20663,20665,20667],{"class":31,"line":1940},[29,20660,19606],{"class":309},[29,20662,7305],{"class":35},[29,20664,310],{"class":309},[29,20666,958],{"class":39},[29,20668,2894],{"class":309},[29,20670,20671],{"class":31,"line":1954},[29,20672,20673],{"class":367},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[29,20675,20676,20678,20680],{"class":31,"line":1959},[29,20677,19606],{"class":309},[29,20679,7208],{"class":35},[29,20681,17690],{"class":309},[29,20683,20684],{"class":31,"line":2752},[29,20685,2575],{"emptyLinePlaceholder":233},[29,20687,20688,20690,20692,20695,20697,20700,20702],{"class":31,"line":2766},[29,20689,6704],{"class":309},[29,20691,1351],{"class":305},[29,20693,20694],{"class":103}," \"p2的年龄为： \"",[29,20696,1620],{"class":305},[29,20698,20699],{"class":309}," p2.age ",[29,20701,1351],{"class":305},[29,20703,9015],{"class":309},[29,20705,20706],{"class":31,"line":2774},[29,20707,1741],{"class":309},[29,20709,20710],{"class":31,"line":2779},[29,20711,2575],{"emptyLinePlaceholder":233},[29,20713,20714,20716,20718],{"class":31,"line":2785},[29,20715,5539],{"class":305},[29,20717,5832],{"class":35},[29,20719,2151],{"class":309},[29,20721,20722],{"class":31,"line":2791},[29,20723,1722],{"class":309},[29,20725,20726],{"class":31,"line":2796},[29,20727,20728],{"class":367},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[29,20730,20731,20734],{"class":31,"line":8123},[29,20732,20733],{"class":309},"    Person p1;",[29,20735,20736],{"class":367}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[29,20738,20739,20741,20743,20745,20747,20749],{"class":31,"line":8147},[29,20740,19606],{"class":309},[29,20742,7208],{"class":35},[29,20744,310],{"class":309},[29,20746,754],{"class":39},[29,20748,6141],{"class":309},[29,20750,20751],{"class":367}," \u002F\u002F用户提供的有参\n",[29,20753,20754,20756,20759,20762],{"class":31,"line":8152},[29,20755,19606],{"class":309},[29,20757,20758],{"class":35},"p3",[29,20760,20761],{"class":309},"(p2);",[29,20763,20764],{"class":367}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[29,20766,20767],{"class":31,"line":8158},[29,20768,2575],{"emptyLinePlaceholder":233},[29,20770,20771],{"class":31,"line":8185},[29,20772,20773],{"class":367},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[29,20775,20776,20779],{"class":31,"line":8190},[29,20777,20778],{"class":309},"    Person p4;",[29,20780,20736],{"class":367},[29,20782,20783,20785,20788,20790,20792,20794],{"class":31,"line":8196},[29,20784,19606],{"class":309},[29,20786,20787],{"class":35},"p5",[29,20789,310],{"class":309},[29,20791,754],{"class":39},[29,20793,6141],{"class":309},[29,20795,20796],{"class":367}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[29,20798,20799,20801,20804,20807],{"class":31,"line":8208},[29,20800,19606],{"class":309},[29,20802,20803],{"class":35},"p6",[29,20805,20806],{"class":309},"(p5);",[29,20808,20809],{"class":367}," \u002F\u002F用户自己提供拷贝构造\n",[29,20811,20812],{"class":31,"line":8220},[29,20813,1741],{"class":309},[29,20815,20816],{"class":31,"line":8232},[29,20817,2575],{"emptyLinePlaceholder":233},[29,20819,20820,20822,20824],{"class":31,"line":9891},[29,20821,313],{"class":305},[29,20823,2148],{"class":35},[29,20825,11028],{"class":309},[29,20827,20828],{"class":31,"line":9916},[29,20829,2575],{"emptyLinePlaceholder":233},[29,20831,20832,20834],{"class":31,"line":9939},[29,20833,5808],{"class":35},[29,20835,5811],{"class":309},[29,20837,20838],{"class":31,"line":9963},[29,20839,2575],{"emptyLinePlaceholder":233},[29,20841,20842,20844,20846,20848],{"class":31,"line":9968},[29,20843,2478],{"class":35},[29,20845,310],{"class":309},[29,20847,2483],{"class":103},[29,20849,2894],{"class":309},[29,20851,20852],{"class":31,"line":9973},[29,20853,2575],{"emptyLinePlaceholder":233},[29,20855,20856,20858,20860],{"class":31,"line":9978},[29,20857,4265],{"class":305},[29,20859,4268],{"class":39},[29,20861,1468],{"class":309},[29,20863,20864],{"class":31,"line":9987},[29,20865,1741],{"class":309},[275,20867,20869],{"id":20868},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[171,20871,20872],{},"浅拷贝：简单的赋值拷贝操作",[171,20874,20875],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[19,20877,20879],{"className":296,"code":20878,"language":298,"meta":24,"style":24},"#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",[26,20880,20881,20887,20897,20903,20907,20911,20916,20922,20926,20939,20943,20947,20954,20958,20968,20983,20996,21000,21005,21010,21026,21030,21043,21048,21053,21058,21067,21072,21087,21091,21095,21099,21105,21109,21114,21129,21133,21144,21158,21162,21171,21175,21181,21193,21197,21205,21209,21226,21257,21265,21293,21297,21301,21309,21313,21319],{"__ignoreMap":24},[29,20882,20883,20885],{"class":31,"line":32},[29,20884,2125],{"class":305},[29,20886,2128],{"class":103},[29,20888,20889,20891,20893,20895],{"class":31,"line":43},[29,20890,2133],{"class":305},[29,20892,2136],{"class":305},[29,20894,2139],{"class":35},[29,20896,1468],{"class":309},[29,20898,20899,20901],{"class":31,"line":51},[29,20900,14869],{"class":305},[29,20902,15346],{"class":35},[29,20904,20905],{"class":31,"line":59},[29,20906,1722],{"class":309},[29,20908,20909],{"class":31,"line":67},[29,20910,14891],{"class":305},[29,20912,20913],{"class":31,"line":75},[29,20914,20915],{"class":367},"    \u002F\u002F默认构造函数\n",[29,20917,20918,20920],{"class":31,"line":83},[29,20919,18694],{"class":35},[29,20921,2151],{"class":309},[29,20923,20924],{"class":31,"line":158},[29,20925,2205],{"class":309},[29,20927,20928,20930,20932,20935,20937],{"class":31,"line":166},[29,20929,3626],{"class":309},[29,20931,1351],{"class":305},[29,20933,20934],{"class":103},"\"默认构造函数\"",[29,20936,1351],{"class":305},[29,20938,1373],{"class":309},[29,20940,20941],{"class":31,"line":1505},[29,20942,2362],{"class":309},[29,20944,20945],{"class":31,"line":1788},[29,20946,20518],{"class":367},[29,20948,20949,20951],{"class":31,"line":1793},[29,20950,18727],{"class":35},[29,20952,20953],{"class":309},"(int age,int height)\n",[29,20955,20956],{"class":31,"line":1799},[29,20957,2205],{"class":309},[29,20959,20960,20963,20965],{"class":31,"line":1804},[29,20961,20962],{"class":309},"        m_Age",[29,20964,355],{"class":305},[29,20966,20967],{"class":309},"age;\n",[29,20969,20970,20973,20975,20977,20980],{"class":31,"line":1818},[29,20971,20972],{"class":309},"        m_Height",[29,20974,11892],{"class":305},[29,20976,2557],{"class":305},[29,20978,20979],{"class":309},"(height);",[29,20981,20982],{"class":367},"\u002F\u002F放到堆区\n",[29,20984,20985,20987,20989,20992,20994],{"class":31,"line":1823},[29,20986,3626],{"class":309},[29,20988,1351],{"class":305},[29,20990,20991],{"class":103},"\"有参构造函数\"",[29,20993,1351],{"class":305},[29,20995,1373],{"class":309},[29,20997,20998],{"class":31,"line":1829},[29,20999,2362],{"class":309},[29,21001,21002],{"class":31,"line":1850},[29,21003,21004],{"class":367},"    \u002F\u002F深拷贝解决上述问题\n",[29,21006,21007],{"class":31,"line":1855},[29,21008,21009],{"class":367},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[29,21011,21012,21014,21016,21018,21020,21022,21024],{"class":31,"line":1869},[29,21013,18694],{"class":35},[29,21015,310],{"class":309},[29,21017,6967],{"class":305},[29,21019,15744],{"class":35},[29,21021,10759],{"class":305},[29,21023,171],{"class":5391},[29,21025,316],{"class":309},[29,21027,21028],{"class":31,"line":1874},[29,21029,2205],{"class":309},[29,21031,21032,21034,21036,21039,21041],{"class":31,"line":1903},[29,21033,3626],{"class":309},[29,21035,1351],{"class":305},[29,21037,21038],{"class":103},"\"拷贝构造函数\"",[29,21040,1351],{"class":305},[29,21042,1373],{"class":309},[29,21044,21045],{"class":31,"line":1908},[29,21046,21047],{"class":367},"        \u002F\u002F编译器默认的写如下注释部分\n",[29,21049,21050],{"class":31,"line":1925},[29,21051,21052],{"class":367},"        \u002F\u002Fm_Age=p.m_Age;\n",[29,21054,21055],{"class":31,"line":1930},[29,21056,21057],{"class":367},"        \u002F\u002Fm_Height=p.m_Height;\n",[29,21059,21060,21062,21064],{"class":31,"line":1935},[29,21061,20962],{"class":309},[29,21063,355],{"class":305},[29,21065,21066],{"class":309},"p.m_Age;\n",[29,21068,21069],{"class":31,"line":1940},[29,21070,21071],{"class":367},"        \u002F\u002F深拷贝操作\n",[29,21073,21074,21076,21078,21080,21082,21084],{"class":31,"line":1954},[29,21075,20972],{"class":309},[29,21077,11892],{"class":305},[29,21079,2557],{"class":305},[29,21081,310],{"class":309},[29,21083,763],{"class":305},[29,21085,21086],{"class":309},"p.m_Height);\n",[29,21088,21089],{"class":31,"line":1959},[29,21090,2362],{"class":309},[29,21092,21093],{"class":31,"line":2752},[29,21094,2575],{"emptyLinePlaceholder":233},[29,21096,21097],{"class":31,"line":2766},[29,21098,18722],{"class":367},[29,21100,21101,21103],{"class":31,"line":2774},[29,21102,18727],{"class":35},[29,21104,2151],{"class":309},[29,21106,21107],{"class":31,"line":2779},[29,21108,2205],{"class":309},[29,21110,21111],{"class":31,"line":2785},[29,21112,21113],{"class":367},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[29,21115,21116,21118,21121,21124,21127],{"class":31,"line":2791},[29,21117,2672],{"class":305},[29,21119,21120],{"class":309},"(m_Height ",[29,21122,21123],{"class":305},"!=",[29,21125,21126],{"class":39}," NULL",[29,21128,316],{"class":309},[29,21130,21131],{"class":31,"line":2796},[29,21132,2685],{"class":309},[29,21134,21135,21138,21141],{"class":31,"line":8123},[29,21136,21137],{"class":305},"            delete",[29,21139,21140],{"class":309}," m_Height;",[29,21142,21143],{"class":367}," \u002F\u002F释放堆区内存\n",[29,21145,21146,21149,21151,21153,21155],{"class":31,"line":8147},[29,21147,21148],{"class":309},"            m_Height",[29,21150,355],{"class":305},[29,21152,2567],{"class":39},[29,21154,364],{"class":309},[29,21156,21157],{"class":367}," \u002F\u002F防止野指针\n",[29,21159,21160],{"class":31,"line":8152},[29,21161,2704],{"class":309},[29,21163,21164,21166,21168],{"class":31,"line":8158},[29,21165,3626],{"class":309},[29,21167,1351],{"class":305},[29,21169,21170],{"class":103},"\"Person的析构函数调用\"\n",[29,21172,21173],{"class":31,"line":8185},[29,21174,2362],{"class":309},[29,21176,21177,21179],{"class":31,"line":8190},[29,21178,2160],{"class":305},[29,21180,15841],{"class":309},[29,21182,21183,21185,21187,21190],{"class":31,"line":8196},[29,21184,2160],{"class":305},[29,21186,6693],{"class":305},[29,21188,21189],{"class":309},"m_Height;",[29,21191,21192],{"class":367}," \u002F\u002F定义一个指针，指向身高\n",[29,21194,21195],{"class":31,"line":8208},[29,21196,4170],{"class":309},[29,21198,21199,21201,21203],{"class":31,"line":8220},[29,21200,5539],{"class":305},[29,21202,5763],{"class":35},[29,21204,2151],{"class":309},[29,21206,21207],{"class":31,"line":8232},[29,21208,1722],{"class":309},[29,21210,21211,21213,21215,21217,21219,21221,21224],{"class":31,"line":9891},[29,21212,19606],{"class":309},[29,21214,7305],{"class":35},[29,21216,310],{"class":309},[29,21218,958],{"class":39},[29,21220,686],{"class":309},[29,21222,21223],{"class":39},"160",[29,21225,2894],{"class":309},[29,21227,21228,21230,21232,21235,21237,21240,21242,21245,21247,21250,21252,21254],{"class":31,"line":9916},[29,21229,1727],{"class":309},[29,21231,1351],{"class":305},[29,21233,21234],{"class":103},"\"p1的年龄为:\"",[29,21236,1351],{"class":305},[29,21238,21239],{"class":309},"p1.m_Age",[29,21241,1351],{"class":305},[29,21243,21244],{"class":103},"\"身高为：\"",[29,21246,6594],{"class":305},[29,21248,21249],{"class":309},"p1.m_Height",[29,21251,1351],{"class":305},[29,21253,1416],{"class":309},[29,21255,21256],{"class":367},"  \u002F\u002F18\n",[29,21258,21259,21261,21263],{"class":31,"line":9939},[29,21260,19606],{"class":309},[29,21262,7208],{"class":35},[29,21264,17690],{"class":309},[29,21266,21267,21269,21271,21274,21276,21278,21280,21282,21284,21287,21289,21291],{"class":31,"line":9963},[29,21268,1727],{"class":309},[29,21270,1351],{"class":305},[29,21272,21273],{"class":103},"\"p2的年龄为：\"",[29,21275,1351],{"class":305},[29,21277,19636],{"class":309},[29,21279,1351],{"class":305},[29,21281,21244],{"class":103},[29,21283,6594],{"class":305},[29,21285,21286],{"class":309},"p2.m_Height",[29,21288,1351],{"class":305},[29,21290,1416],{"class":309},[29,21292,21256],{"class":367},[29,21294,21295],{"class":31,"line":9968},[29,21296,13385],{"class":309},[29,21298,21299],{"class":31,"line":9973},[29,21300,1741],{"class":309},[29,21302,21303,21305,21307],{"class":31,"line":9978},[29,21304,313],{"class":305},[29,21306,2148],{"class":35},[29,21308,2151],{"class":309},[29,21310,21311],{"class":31,"line":9987},[29,21312,1722],{"class":309},[29,21314,21315,21317],{"class":31,"line":9992},[29,21316,5808],{"class":35},[29,21318,5811],{"class":309},[29,21320,21321],{"class":31,"line":9998},[29,21322,1741],{"class":309},[171,21324,21325],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[171,21327,21328],{},"浅拷贝带来的问题是堆区的内存重复释放",[171,21330,21331],{},[1638,21332],{"alt":24,"src":21333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[171,21335,21336],{},"浅拷贝问题要使用深拷贝来解决",[171,21338,21339],{},[1638,21340],{"alt":24,"src":21341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[171,21343,21344],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[275,21346,21348],{"id":21347},"_826初始化列表","8.2.6初始化列表",[171,21350,21351],{},"作用：初始化属性",[171,21353,5356],{},[19,21355,21358],{"className":21356,"code":21357,"language":5362},[5360],"构造函数():属性1(值1),属性2(值2).....{}\n",[26,21359,21357],{"__ignoreMap":24},[171,21361,21362],{},"例子",[19,21364,21366],{"className":296,"code":21365,"language":298,"meta":24,"style":24},"#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",[26,21367,21368,21374,21384,21390,21394,21399,21403,21408,21413,21418,21423,21428,21433,21437,21442,21447,21490,21499,21517,21535,21553,21557,21561,21568,21575,21582,21586,21590,21598,21602,21606,21626,21635,21639,21643,21653,21657,21665],{"__ignoreMap":24},[29,21369,21370,21372],{"class":31,"line":32},[29,21371,2125],{"class":305},[29,21373,2128],{"class":103},[29,21375,21376,21378,21380,21382],{"class":31,"line":43},[29,21377,2133],{"class":305},[29,21379,2136],{"class":305},[29,21381,2139],{"class":35},[29,21383,1468],{"class":309},[29,21385,21386,21388],{"class":31,"line":51},[29,21387,14869],{"class":305},[29,21389,15346],{"class":35},[29,21391,21392],{"class":31,"line":59},[29,21393,1722],{"class":309},[29,21395,21396],{"class":31,"line":67},[29,21397,21398],{"class":305},"    public:\n",[29,21400,21401],{"class":31,"line":75},[29,21402,2575],{"emptyLinePlaceholder":233},[29,21404,21405],{"class":31,"line":83},[29,21406,21407],{"class":367},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[29,21409,21410],{"class":31,"line":158},[29,21411,21412],{"class":367},"    \u002F\u002FPerson(int a, int b, int c) {\n",[29,21414,21415],{"class":31,"line":166},[29,21416,21417],{"class":367},"    \u002F\u002F  m_A = a;\n",[29,21419,21420],{"class":31,"line":1505},[29,21421,21422],{"class":367},"    \u002F\u002F  m_B = b;\n",[29,21424,21425],{"class":31,"line":1788},[29,21426,21427],{"class":367},"    \u002F\u002F  m_C = c;\n",[29,21429,21430],{"class":31,"line":1793},[29,21431,21432],{"class":367},"    \u002F\u002F}\n",[29,21434,21435],{"class":31,"line":1799},[29,21436,2575],{"emptyLinePlaceholder":233},[29,21438,21439],{"class":31,"line":1804},[29,21440,21441],{"class":367},"    \u002F\u002F初始化列表方式初始化\n",[29,21443,21444],{"class":31,"line":1818},[29,21445,21446],{"class":367},"    \u002F\u002F使用有参构造函数\n",[29,21448,21449,21451,21453,21455,21457,21459,21461,21463,21465,21467,21469,21472,21475,21478,21481,21484,21487],{"class":31,"line":1823},[29,21450,18694],{"class":35},[29,21452,310],{"class":309},[29,21454,313],{"class":305},[29,21456,1574],{"class":5391},[29,21458,12610],{"class":309},[29,21460,313],{"class":305},[29,21462,3008],{"class":5391},[29,21464,12610],{"class":309},[29,21466,313],{"class":305},[29,21468,3024],{"class":5391},[29,21470,21471],{"class":309},") :",[29,21473,21474],{"class":35},"m_A",[29,21476,21477],{"class":309},"(a), ",[29,21479,21480],{"class":35},"m_B",[29,21482,21483],{"class":309},"(b), ",[29,21485,21486],{"class":35},"m_C",[29,21488,21489],{"class":309},"(c) {}\n",[29,21491,21492,21494,21497],{"class":31,"line":1829},[29,21493,15084],{"class":305},[29,21495,21496],{"class":35}," PrintPerson",[29,21498,11028],{"class":309},[29,21500,21501,21503,21505,21508,21510,21513,21515],{"class":31,"line":1850},[29,21502,9844],{"class":309},[29,21504,1351],{"class":305},[29,21506,21507],{"class":103}," \"mA:\"",[29,21509,1620],{"class":305},[29,21511,21512],{"class":309}," m_A ",[29,21514,1351],{"class":305},[29,21516,9015],{"class":309},[29,21518,21519,21521,21523,21526,21528,21531,21533],{"class":31,"line":1855},[29,21520,9844],{"class":309},[29,21522,1351],{"class":305},[29,21524,21525],{"class":103}," \"mB:\"",[29,21527,1620],{"class":305},[29,21529,21530],{"class":309}," m_B ",[29,21532,1351],{"class":305},[29,21534,9015],{"class":309},[29,21536,21537,21539,21541,21544,21546,21549,21551],{"class":31,"line":1869},[29,21538,9844],{"class":309},[29,21540,1351],{"class":305},[29,21542,21543],{"class":103}," \"mC:\"",[29,21545,1620],{"class":305},[29,21547,21548],{"class":309}," m_C ",[29,21550,1351],{"class":305},[29,21552,9015],{"class":309},[29,21554,21555],{"class":31,"line":1874},[29,21556,2362],{"class":309},[29,21558,21559],{"class":31,"line":1903},[29,21560,15397],{"class":305},[29,21562,21563,21565],{"class":31,"line":1908},[29,21564,2160],{"class":305},[29,21566,21567],{"class":309}," m_A;\n",[29,21569,21570,21572],{"class":31,"line":1925},[29,21571,2160],{"class":305},[29,21573,21574],{"class":309}," m_B;\n",[29,21576,21577,21579],{"class":31,"line":1930},[29,21578,2160],{"class":305},[29,21580,21581],{"class":309}," m_C;\n",[29,21583,21584],{"class":31,"line":1935},[29,21585,4170],{"class":309},[29,21587,21588],{"class":31,"line":1940},[29,21589,2575],{"emptyLinePlaceholder":233},[29,21591,21592,21594,21596],{"class":31,"line":1954},[29,21593,313],{"class":305},[29,21595,2148],{"class":35},[29,21597,6153],{"class":309},[29,21599,21600],{"class":31,"line":1959},[29,21601,1722],{"class":309},[29,21603,21604],{"class":31,"line":2752},[29,21605,2575],{"emptyLinePlaceholder":233},[29,21607,21608,21610,21612,21614,21616,21618,21620,21622,21624],{"class":31,"line":2766},[29,21609,19606],{"class":309},[29,21611,171],{"class":35},[29,21613,310],{"class":309},[29,21615,525],{"class":39},[29,21617,12610],{"class":309},[29,21619,386],{"class":39},[29,21621,12610],{"class":309},[29,21623,380],{"class":39},[29,21625,2894],{"class":309},[29,21627,21628,21630,21633],{"class":31,"line":2774},[29,21629,16041],{"class":309},[29,21631,21632],{"class":35},"PrintPerson",[29,21634,5811],{"class":309},[29,21636,21637],{"class":31,"line":2779},[29,21638,2575],{"emptyLinePlaceholder":233},[29,21640,21641],{"class":31,"line":2785},[29,21642,2575],{"emptyLinePlaceholder":233},[29,21644,21645,21647,21649,21651],{"class":31,"line":2791},[29,21646,2478],{"class":35},[29,21648,310],{"class":309},[29,21650,2483],{"class":103},[29,21652,2894],{"class":309},[29,21654,21655],{"class":31,"line":2796},[29,21656,2575],{"emptyLinePlaceholder":233},[29,21658,21659,21661,21663],{"class":31,"line":8123},[29,21660,4265],{"class":305},[29,21662,4268],{"class":39},[29,21664,1468],{"class":309},[29,21666,21667],{"class":31,"line":8147},[29,21668,1741],{"class":309},[171,21670,21671,21672,21675,21676],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[457,21673,21674],{},"参数名就是定义的对象属性","，",[457,21677,21678],{},"属性后面的值为有参构造函数的形参",[19,21680,21682],{"className":296,"code":21681,"language":298,"meta":24,"style":24},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[26,21683,21684],{"__ignoreMap":24},[29,21685,21686,21688,21690,21692,21695,21697,21700,21702,21705,21707,21710,21712,21715,21717],{"class":31,"line":32},[29,21687,19221],{"class":35},[29,21689,310],{"class":309},[29,21691,313],{"class":305},[29,21693,21694],{"class":309}," a.",[29,21696,313],{"class":305},[29,21698,21699],{"class":309}," b,",[29,21701,313],{"class":305},[29,21703,21704],{"class":309}," b):",[29,21706,21474],{"class":35},[29,21708,21709],{"class":309},"(a),",[29,21711,21480],{"class":35},[29,21713,21714],{"class":309},"(c),",[29,21716,21486],{"class":35},[29,21718,21719],{"class":309},"(b) {}\n",[275,21721,21723],{"id":21722},"_827类对象作为类成员","8.2.7类对象作为类成员",[171,21725,21726],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[171,21728,14808],{},[19,21730,21732],{"className":296,"code":21731,"language":298,"meta":24,"style":24},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[26,21733,21734,21739,21744,21748,21753,21757],{"__ignoreMap":24},[29,21735,21736],{"class":31,"line":32},[29,21737,21738],{"class":309},"A{};\n",[29,21740,21741],{"class":31,"line":43},[29,21742,21743],{"class":309},"B\n",[29,21745,21746],{"class":31,"line":51},[29,21747,1722],{"class":309},[29,21749,21750],{"class":31,"line":59},[29,21751,21752],{"class":309},"    A a;\n",[29,21754,21755],{"class":31,"line":67},[29,21756,1741],{"class":309},[29,21758,21759],{"class":31,"line":75},[29,21760,21761],{"class":367},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[171,21763,21764],{},"案例",[19,21766,21768],{"className":296,"code":21767,"language":298,"meta":24,"style":24},"\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",[26,21769,21770,21775,21782,21786,21791,21796,21810,21814,21824,21835,21839,21846,21850,21863,21867,21872,21877,21881,21887,21891,21895,21899,21930,21934,21945,21949,21955,21959,21972,21976,21980,21984,21989,21994,21998,22006,22010,22027,22046,22050,22058,22062,22068],{"__ignoreMap":24},[29,21771,21772],{"class":31,"line":32},[29,21773,21774],{"class":367},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[29,21776,21777,21779],{"class":31,"line":43},[29,21778,14869],{"class":305},[29,21780,21781],{"class":35}," Phone\n",[29,21783,21784],{"class":31,"line":51},[29,21785,1722],{"class":309},[29,21787,21788],{"class":31,"line":59},[29,21789,21790],{"class":309},"public：\n",[29,21792,21793],{"class":31,"line":67},[29,21794,21795],{"class":367},"    \u002F\u002F 赋值(构造函数)\n",[29,21797,21798,21801,21803,21805,21808],{"class":31,"line":75},[29,21799,21800],{"class":35},"    Phone",[29,21802,310],{"class":309},[29,21804,15092],{"class":35},[29,21806,21807],{"class":5391}," pName",[29,21809,316],{"class":309},[29,21811,21812],{"class":31,"line":83},[29,21813,2205],{"class":309},[29,21815,21816,21819,21821],{"class":31,"line":158},[29,21817,21818],{"class":309},"        m_pName",[29,21820,355],{"class":305},[29,21822,21823],{"class":309},"pName;\n",[29,21825,21826,21828,21830,21833],{"class":31,"line":166},[29,21827,3626],{"class":309},[29,21829,1351],{"class":305},[29,21831,21832],{"class":103},"\"Phone的构造函数调用\"",[29,21834,1468],{"class":309},[29,21836,21837],{"class":31,"line":1505},[29,21838,2362],{"class":309},[29,21840,21841,21844],{"class":31,"line":1788},[29,21842,21843],{"class":35},"    ~Phone",[29,21845,2151],{"class":309},[29,21847,21848],{"class":31,"line":1793},[29,21849,2205],{"class":309},[29,21851,21852,21854,21856,21859,21861],{"class":31,"line":1799},[29,21853,3626],{"class":309},[29,21855,1351],{"class":305},[29,21857,21858],{"class":103},"\"Phone析构函数调用\"",[29,21860,1351],{"class":305},[29,21862,1373],{"class":309},[29,21864,21865],{"class":31,"line":1804},[29,21866,2362],{"class":309},[29,21868,21869],{"class":31,"line":1818},[29,21870,21871],{"class":367},"    \u002F\u002F\n",[29,21873,21874],{"class":31,"line":1823},[29,21875,21876],{"class":309},"    string m_PName;\n",[29,21878,21879],{"class":31,"line":1829},[29,21880,4170],{"class":309},[29,21882,21883,21885],{"class":31,"line":1850},[29,21884,14869],{"class":305},[29,21886,15346],{"class":35},[29,21888,21889],{"class":31,"line":1855},[29,21890,1722],{"class":309},[29,21892,21893],{"class":31,"line":1869},[29,21894,14891],{"class":305},[29,21896,21897],{"class":31,"line":1874},[29,21898,17169],{"class":367},[29,21900,21901,21903,21905,21907,21909,21911,21913,21916,21919,21921,21924,21927],{"class":31,"line":1903},[29,21902,18694],{"class":35},[29,21904,310],{"class":309},[29,21906,15092],{"class":35},[29,21908,15095],{"class":5391},[29,21910,686],{"class":309},[29,21912,15092],{"class":35},[29,21914,21915],{"class":5391}," pname",[29,21917,21918],{"class":309},"):",[29,21920,15185],{"class":35},[29,21922,21923],{"class":309},"(name),m_phone.",[29,21925,21926],{"class":35},"m_PName",[29,21928,21929],{"class":309},"(pname) \n",[29,21931,21932],{"class":31,"line":1908},[29,21933,2205],{"class":309},[29,21935,21936,21938,21940,21943],{"class":31,"line":1925},[29,21937,3626],{"class":309},[29,21939,1351],{"class":305},[29,21941,21942],{"class":103},"\"Person的构造函数调用\"",[29,21944,1468],{"class":309},[29,21946,21947],{"class":31,"line":1930},[29,21948,2362],{"class":309},[29,21950,21951,21953],{"class":31,"line":1935},[29,21952,18727],{"class":35},[29,21954,2151],{"class":309},[29,21956,21957],{"class":31,"line":1940},[29,21958,2205],{"class":309},[29,21960,21961,21963,21965,21968,21970],{"class":31,"line":1954},[29,21962,3626],{"class":309},[29,21964,1351],{"class":305},[29,21966,21967],{"class":103},"\"Person析构函数调用\"",[29,21969,1351],{"class":305},[29,21971,1373],{"class":309},[29,21973,21974],{"class":31,"line":1959},[29,21975,2362],{"class":309},[29,21977,21978],{"class":31,"line":2752},[29,21979,7955],{"class":367},[29,21981,21982],{"class":31,"line":2766},[29,21983,15067],{"class":309},[29,21985,21986],{"class":31,"line":2774},[29,21987,21988],{"class":367},"    \u002F\u002F手机\n",[29,21990,21991],{"class":31,"line":2779},[29,21992,21993],{"class":309},"    Phone m_Phone;\n",[29,21995,21996],{"class":31,"line":2785},[29,21997,4170],{"class":309},[29,21999,22000,22002,22004],{"class":31,"line":2791},[29,22001,5539],{"class":305},[29,22003,5763],{"class":35},[29,22005,2151],{"class":309},[29,22007,22008],{"class":31,"line":2796},[29,22009,1722],{"class":309},[29,22011,22012,22014,22016,22018,22020,22022,22025],{"class":31,"line":8123},[29,22013,19606],{"class":309},[29,22015,171],{"class":35},[29,22017,310],{"class":309},[29,22019,8091],{"class":103},[29,22021,686],{"class":309},[29,22023,22024],{"class":103},"\"安卓\"",[29,22026,2894],{"class":309},[29,22028,22029,22031,22033,22036,22038,22041,22043],{"class":31,"line":8147},[29,22030,1727],{"class":309},[29,22032,1351],{"class":305},[29,22034,22035],{"class":309},"p.Name",[29,22037,1351],{"class":305},[29,22039,22040],{"class":103},"\"拿着：\"",[29,22042,1351],{"class":305},[29,22044,22045],{"class":309},"p.m_phone.m_PName;\n",[29,22047,22048],{"class":31,"line":8152},[29,22049,1741],{"class":309},[29,22051,22052,22054,22056],{"class":31,"line":8158},[29,22053,313],{"class":305},[29,22055,2148],{"class":35},[29,22057,2151],{"class":309},[29,22059,22060],{"class":31,"line":8185},[29,22061,1722],{"class":309},[29,22063,22064,22066],{"class":31,"line":8190},[29,22065,5808],{"class":35},[29,22067,5811],{"class":309},[29,22069,22070],{"class":31,"line":8196},[29,22071,1741],{"class":309},[171,22073,9200],{},[19,22075,22077],{"className":296,"code":22076,"language":298,"meta":24,"style":24},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[26,22078,22079,22084],{"__ignoreMap":24},[29,22080,22081],{"class":31,"line":32},[29,22082,22083],{"class":367},"    \u002F\u002F不需要写这个：\n",[29,22085,22086],{"class":31,"line":43},[29,22087,22088],{"class":367},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[171,22090,22091],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[19,22093,22095],{"className":296,"code":22094,"language":298,"meta":24,"style":24},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[26,22096,22097],{"__ignoreMap":24},[29,22098,22099,22101,22104,22106,22109,22112],{"class":31,"line":32},[29,22100,19221],{"class":35},[29,22102,22103],{"class":309},"(string name.string pname):",[29,22105,15185],{"class":35},[29,22107,22108],{"class":309},"(name),",[29,22110,22111],{"class":35},"m_phone",[29,22113,22114],{"class":309},"(pname) {}\n",[171,22116,22117,22118,355,22121],{},"采用的是隐式转换法，实际为如下：\n",[26,22119,22120],{},"m_phone(pname)",[26,22122,22123],{},"Phone m_phone=pname",[171,22125,22126,22129],{},[457,22127,22128],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[171,22131,22132],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[275,22134,22136],{"id":22135},"_828静态对象","8.2.8静态对象",[171,22138,22139],{},"静态对象在成员对象前static，称为静态对象",[171,22141,22142],{},"静态对象分为两类：",[259,22144,22145],{},[178,22146,22147],{},"静态成员变量",[175,22149,22150,22153,22156],{},[178,22151,22152],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[178,22154,22155],{},"②在编译阶段分配内存",[178,22157,22158],{},"③类内声明，类外初始化",[259,22160,22161],{"start":43},[178,22162,22163],{},"静态成员函数",[175,22165,22166,22169],{},[178,22167,22168],{},"①所有对象共享同一个函数",[178,22170,22171],{},"②静态成员函数只能访问静态成员变量",[22173,22174,22176],"h4",{"id":22175},"_8281静态成员变量","8.2.8.1静态成员变量",[19,22178,22180],{"className":296,"code":22179,"language":298,"meta":24,"style":24},"#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",[26,22181,22182,22188,22198,22204,22208,22212,22217,22222,22227,22235,22239,22243,22247,22255,22259,22263,22268,22281,22285,22293,22297,22303],{"__ignoreMap":24},[29,22183,22184,22186],{"class":31,"line":32},[29,22185,2125],{"class":305},[29,22187,2128],{"class":103},[29,22189,22190,22192,22194,22196],{"class":31,"line":43},[29,22191,2133],{"class":305},[29,22193,2136],{"class":305},[29,22195,2139],{"class":35},[29,22197,1468],{"class":309},[29,22199,22200,22202],{"class":31,"line":51},[29,22201,14869],{"class":305},[29,22203,15346],{"class":35},[29,22205,22206],{"class":31,"line":59},[29,22207,1722],{"class":309},[29,22209,22210],{"class":31,"line":67},[29,22211,14891],{"class":305},[29,22213,22214],{"class":31,"line":75},[29,22215,22216],{"class":367},"    \u002F\u002F非静态成员变量\n",[29,22218,22219],{"class":31,"line":83},[29,22220,22221],{"class":367},"    \u002F\u002F int m_A;\n",[29,22223,22224],{"class":31,"line":158},[29,22225,22226],{"class":367},"    \u002F\u002F定义静态成员变量\n",[29,22228,22229,22231,22233],{"class":31,"line":166},[29,22230,11195],{"class":305},[29,22232,2557],{"class":305},[29,22234,21567],{"class":309},[29,22236,22237],{"class":31,"line":1505},[29,22238,2575],{"emptyLinePlaceholder":233},[29,22240,22241],{"class":31,"line":1788},[29,22242,2575],{"emptyLinePlaceholder":233},[29,22244,22245],{"class":31,"line":1793},[29,22246,4170],{"class":309},[29,22248,22249,22251,22253],{"class":31,"line":1799},[29,22250,5539],{"class":305},[29,22252,5763],{"class":35},[29,22254,2151],{"class":309},[29,22256,22257],{"class":31,"line":1804},[29,22258,1722],{"class":309},[29,22260,22261],{"class":31,"line":1818},[29,22262,15488],{"class":309},[29,22264,22265],{"class":31,"line":1823},[29,22266,22267],{"class":367},"    \u002F\u002F输出类成员变量这块内存\n",[29,22269,22270,22272,22274,22277,22279],{"class":31,"line":1829},[29,22271,1727],{"class":309},[29,22273,1351],{"class":305},[29,22275,22276],{"class":309},"p.m_A",[29,22278,1351],{"class":305},[29,22280,1373],{"class":309},[29,22282,22283],{"class":31,"line":1850},[29,22284,1741],{"class":309},[29,22286,22287,22289,22291],{"class":31,"line":1855},[29,22288,313],{"class":305},[29,22290,2148],{"class":35},[29,22292,2151],{"class":309},[29,22294,22295],{"class":31,"line":1869},[29,22296,1722],{"class":309},[29,22298,22299,22301],{"class":31,"line":1874},[29,22300,5808],{"class":35},[29,22302,2151],{"class":309},[29,22304,22305],{"class":31,"line":1903},[29,22306,1741],{"class":309},[171,22308,22309],{},"此时输出是报错的：无法解析外部命令",[171,22311,22312],{},"解决这一问题：必须用到类内声明，类外初始化操作",[19,22314,22316],{"className":296,"code":22315,"language":298,"meta":24,"style":24},"#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",[26,22317,22318,22324,22334,22340,22344,22348,22353,22361,22365,22370,22385,22393,22397,22401,22406,22411,22423,22428,22439,22444,22449,22462,22466,22474,22478,22484],{"__ignoreMap":24},[29,22319,22320,22322],{"class":31,"line":32},[29,22321,2125],{"class":305},[29,22323,2128],{"class":103},[29,22325,22326,22328,22330,22332],{"class":31,"line":43},[29,22327,2133],{"class":305},[29,22329,2136],{"class":305},[29,22331,2139],{"class":35},[29,22333,1468],{"class":309},[29,22335,22336,22338],{"class":31,"line":51},[29,22337,14869],{"class":305},[29,22339,15346],{"class":35},[29,22341,22342],{"class":31,"line":59},[29,22343,1722],{"class":309},[29,22345,22346],{"class":31,"line":67},[29,22347,14891],{"class":305},[29,22349,22350],{"class":31,"line":75},[29,22351,22352],{"class":367},"    \u002F\u002F类内声明\n",[29,22354,22355,22357,22359],{"class":31,"line":83},[29,22356,11195],{"class":305},[29,22358,2557],{"class":305},[29,22360,21567],{"class":309},[29,22362,22363],{"class":31,"line":158},[29,22364,4170],{"class":309},[29,22366,22367],{"class":31,"line":166},[29,22368,22369],{"class":367},"\u002F\u002F类外初始化\n",[29,22371,22372,22374,22376,22379,22381,22383],{"class":31,"line":1505},[29,22373,313],{"class":305},[29,22375,15744],{"class":35},[29,22377,22378],{"class":309},"::m_A",[29,22380,355],{"class":305},[29,22382,754],{"class":39},[29,22384,1468],{"class":309},[29,22386,22387,22389,22391],{"class":31,"line":1788},[29,22388,5539],{"class":305},[29,22390,5763],{"class":35},[29,22392,2151],{"class":309},[29,22394,22395],{"class":31,"line":1793},[29,22396,1722],{"class":309},[29,22398,22399],{"class":31,"line":1799},[29,22400,15488],{"class":309},[29,22402,22403],{"class":31,"line":1804},[29,22404,22405],{"class":367},"    \u002F\u002F访问变量的原内存空间\n",[29,22407,22408],{"class":31,"line":1818},[29,22409,22410],{"class":367},"    \u002F\u002F100\n",[29,22412,22413,22415,22417,22419,22421],{"class":31,"line":1823},[29,22414,1727],{"class":309},[29,22416,1351],{"class":305},[29,22418,22276],{"class":309},[29,22420,1351],{"class":305},[29,22422,1373],{"class":309},[29,22424,22425],{"class":31,"line":1829},[29,22426,22427],{"class":309},"    Person p2;\n",[29,22429,22430,22433,22435,22437],{"class":31,"line":1850},[29,22431,22432],{"class":309},"    p2.m_A",[29,22434,355],{"class":305},[29,22436,1898],{"class":39},[29,22438,1468],{"class":309},[29,22440,22441],{"class":31,"line":1855},[29,22442,22443],{"class":367},"    \u002F\u002F继续访问这片空间\n",[29,22445,22446],{"class":31,"line":1869},[29,22447,22448],{"class":367},"    \u002F\u002F200\n",[29,22450,22451,22453,22455,22458,22460],{"class":31,"line":1874},[29,22452,1727],{"class":309},[29,22454,1351],{"class":305},[29,22456,22457],{"class":309},"p2.m_A",[29,22459,1351],{"class":305},[29,22461,1373],{"class":309},[29,22463,22464],{"class":31,"line":1903},[29,22465,1741],{"class":309},[29,22467,22468,22470,22472],{"class":31,"line":1908},[29,22469,313],{"class":305},[29,22471,2148],{"class":35},[29,22473,2151],{"class":309},[29,22475,22476],{"class":31,"line":1925},[29,22477,1722],{"class":309},[29,22479,22480,22482],{"class":31,"line":1930},[29,22481,5808],{"class":35},[29,22483,5811],{"class":309},[29,22485,22486],{"class":31,"line":1935},[29,22487,1741],{"class":309},[171,22489,22490],{},[457,22491,22492],{},"静态变量的访问",[19,22494,22496],{"className":296,"code":22495,"language":298,"meta":24,"style":24},"#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",[26,22497,22498,22504,22514,22520,22524,22528,22532,22540,22544,22549,22557,22561,22565,22579,22594,22602,22606,22611,22616,22621,22626,22638,22643,22648,22662,22679,22683,22691,22695,22701],{"__ignoreMap":24},[29,22499,22500,22502],{"class":31,"line":32},[29,22501,2125],{"class":305},[29,22503,2128],{"class":103},[29,22505,22506,22508,22510,22512],{"class":31,"line":43},[29,22507,2133],{"class":305},[29,22509,2136],{"class":305},[29,22511,2139],{"class":35},[29,22513,1468],{"class":309},[29,22515,22516,22518],{"class":31,"line":51},[29,22517,14869],{"class":305},[29,22519,15346],{"class":35},[29,22521,22522],{"class":31,"line":59},[29,22523,1722],{"class":309},[29,22525,22526],{"class":31,"line":67},[29,22527,14891],{"class":305},[29,22529,22530],{"class":31,"line":75},[29,22531,22352],{"class":367},[29,22533,22534,22536,22538],{"class":31,"line":83},[29,22535,11195],{"class":305},[29,22537,2557],{"class":305},[29,22539,21567],{"class":309},[29,22541,22542],{"class":31,"line":158},[29,22543,15397],{"class":305},[29,22545,22546],{"class":31,"line":166},[29,22547,22548],{"class":367},"    \u002F\u002F静态成员变量也是有访问权限的\n",[29,22550,22551,22553,22555],{"class":31,"line":1505},[29,22552,11195],{"class":305},[29,22554,2557],{"class":305},[29,22556,21574],{"class":309},[29,22558,22559],{"class":31,"line":1788},[29,22560,4170],{"class":309},[29,22562,22563],{"class":31,"line":1793},[29,22564,22369],{"class":367},[29,22566,22567,22569,22571,22573,22575,22577],{"class":31,"line":1799},[29,22568,313],{"class":305},[29,22570,15744],{"class":35},[29,22572,22378],{"class":309},[29,22574,355],{"class":305},[29,22576,754],{"class":39},[29,22578,1468],{"class":309},[29,22580,22581,22583,22585,22588,22590,22592],{"class":31,"line":1804},[29,22582,313],{"class":305},[29,22584,15744],{"class":35},[29,22586,22587],{"class":309},"::m_B",[29,22589,355],{"class":305},[29,22591,1008],{"class":39},[29,22593,1468],{"class":309},[29,22595,22596,22598,22600],{"class":31,"line":1818},[29,22597,5539],{"class":305},[29,22599,5832],{"class":35},[29,22601,2151],{"class":309},[29,22603,22604],{"class":31,"line":1823},[29,22605,1722],{"class":309},[29,22607,22608],{"class":31,"line":1829},[29,22609,22610],{"class":367},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[29,22612,22613],{"class":31,"line":1850},[29,22614,22615],{"class":367},"    \u002F\u002F静态成员变量有两种访问方式：\n",[29,22617,22618],{"class":31,"line":1855},[29,22619,22620],{"class":367},"    \u002F\u002F1.通过对象进行访问\n",[29,22622,22623],{"class":31,"line":1869},[29,22624,22625],{"class":309},"    Person p;  \n",[29,22627,22628,22630,22632,22634,22636],{"class":31,"line":1874},[29,22629,1727],{"class":309},[29,22631,1351],{"class":305},[29,22633,22276],{"class":309},[29,22635,1351],{"class":305},[29,22637,1373],{"class":309},[29,22639,22640],{"class":31,"line":1903},[29,22641,22642],{"class":367},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[29,22644,22645],{"class":31,"line":1908},[29,22646,22647],{"class":367},"    \u002F\u002F2.通过类名进行访问\n",[29,22649,22650,22652,22654,22656,22658,22660],{"class":31,"line":1925},[29,22651,1727],{"class":309},[29,22653,1351],{"class":305},[29,22655,19221],{"class":35},[29,22657,22378],{"class":309},[29,22659,1351],{"class":305},[29,22661,1373],{"class":309},[29,22663,22664,22666,22668,22670,22672,22674,22676],{"class":31,"line":1930},[29,22665,1727],{"class":309},[29,22667,1351],{"class":305},[29,22669,19221],{"class":35},[29,22671,22587],{"class":309},[29,22673,1351],{"class":305},[29,22675,1416],{"class":309},[29,22677,22678],{"class":367}," \u002F\u002F没有访问权限，报错\n",[29,22680,22681],{"class":31,"line":1935},[29,22682,1741],{"class":309},[29,22684,22685,22687,22689],{"class":31,"line":1940},[29,22686,313],{"class":305},[29,22688,2148],{"class":35},[29,22690,2151],{"class":309},[29,22692,22693],{"class":31,"line":1954},[29,22694,1722],{"class":309},[29,22696,22697,22699],{"class":31,"line":1959},[29,22698,5877],{"class":35},[29,22700,5811],{"class":309},[29,22702,22703],{"class":31,"line":2752},[29,22704,1741],{"class":309},[22173,22706,22708],{"id":22707},"_8282静态成员函数","8.2.8.2静态成员函数",[171,22710,22711],{},"1.静态成员函数定义与访问",[19,22713,22715],{"className":296,"code":22714,"language":298,"meta":24,"style":24},"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",[26,22716,22717,22723,22727,22731,22736,22747,22751,22765,22769,22773,22781,22785,22790,22795,22799,22807,22812,22822],{"__ignoreMap":24},[29,22718,22719,22721],{"class":31,"line":32},[29,22720,14869],{"class":305},[29,22722,15346],{"class":35},[29,22724,22725],{"class":31,"line":43},[29,22726,1722],{"class":309},[29,22728,22729],{"class":31,"line":51},[29,22730,14891],{"class":305},[29,22732,22733],{"class":31,"line":59},[29,22734,22735],{"class":367},"    \u002F\u002F在公共权限下定义静态成员函数\n",[29,22737,22738,22740,22743,22745],{"class":31,"line":67},[29,22739,11195],{"class":305},[29,22741,22742],{"class":305}," void",[29,22744,11560],{"class":35},[29,22746,2151],{"class":309},[29,22748,22749],{"class":31,"line":75},[29,22750,2205],{"class":309},[29,22752,22753,22756,22758,22761,22763],{"class":31,"line":83},[29,22754,22755],{"class":309},"        coout",[29,22757,1351],{"class":305},[29,22759,22760],{"class":103},"\"静态成员函数的调用\"",[29,22762,1351],{"class":305},[29,22764,1373],{"class":309},[29,22766,22767],{"class":31,"line":158},[29,22768,2362],{"class":309},[29,22770,22771],{"class":31,"line":166},[29,22772,4170],{"class":309},[29,22774,22775,22777,22779],{"class":31,"line":1505},[29,22776,5539],{"class":305},[29,22778,5763],{"class":35},[29,22780,2151],{"class":309},[29,22782,22783],{"class":31,"line":1788},[29,22784,1722],{"class":309},[29,22786,22787],{"class":31,"line":1793},[29,22788,22789],{"class":367},"    \u002F\u002F静态成员函数的调用方式:\n",[29,22791,22792],{"class":31,"line":1799},[29,22793,22794],{"class":367},"    \u002F\u002F1.通过对象访问\n",[29,22796,22797],{"class":31,"line":1804},[29,22798,15488],{"class":309},[29,22800,22801,22803,22805],{"class":31,"line":1818},[29,22802,16041],{"class":309},[29,22804,11726],{"class":35},[29,22806,5811],{"class":309},[29,22808,22809],{"class":31,"line":1823},[29,22810,22811],{"class":367},"    \u002F\u002F2.通过类名访问\n",[29,22813,22814,22816,22818,22820],{"class":31,"line":1829},[29,22815,18694],{"class":35},[29,22817,17907],{"class":309},[29,22819,11726],{"class":35},[29,22821,5811],{"class":309},[29,22823,22824],{"class":31,"line":1850},[29,22825,1741],{"class":309},[259,22827,22828],{"start":43},[178,22829,22830],{},"静态成员函数只能访问静态成员变量",[19,22832,22834],{"className":296,"code":22833,"language":298,"meta":24,"style":24},"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",[26,22835,22836,22842,22846,22850,22854,22864,22868,22882,22887,22899,22903,22914,22924,22928,22932,22936,22946,22950,22963,22967,22971,22975,22979,22993,23001,23005,23009,23013,23017,23025,23029,23039,23044,23048,23056,23060,23066],{"__ignoreMap":24},[29,22837,22838,22840],{"class":31,"line":32},[29,22839,14869],{"class":305},[29,22841,15346],{"class":35},[29,22843,22844],{"class":31,"line":43},[29,22845,1722],{"class":309},[29,22847,22848],{"class":31,"line":51},[29,22849,14891],{"class":305},[29,22851,22852],{"class":31,"line":59},[29,22853,22735],{"class":367},[29,22855,22856,22858,22860,22862],{"class":31,"line":67},[29,22857,11195],{"class":305},[29,22859,22742],{"class":305},[29,22861,11560],{"class":35},[29,22863,2151],{"class":309},[29,22865,22866],{"class":31,"line":75},[29,22867,2205],{"class":309},[29,22869,22870,22873,22875,22877,22879],{"class":31,"line":83},[29,22871,22872],{"class":309},"        m_A",[29,22874,355],{"class":305},[29,22876,619],{"class":39},[29,22878,364],{"class":309},[29,22880,22881],{"class":367}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[29,22883,22884],{"class":31,"line":158},[29,22885,22886],{"class":367},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[29,22888,22889,22891,22893,22895,22897],{"class":31,"line":166},[29,22890,22755],{"class":309},[29,22892,1351],{"class":305},[29,22894,22760],{"class":103},[29,22896,1351],{"class":305},[29,22898,1373],{"class":309},[29,22900,22901],{"class":31,"line":1505},[29,22902,2362],{"class":309},[29,22904,22905,22907,22909,22911],{"class":31,"line":1788},[29,22906,11195],{"class":305},[29,22908,2557],{"class":305},[29,22910,15623],{"class":309},[29,22912,22913],{"class":367}," \u002F\u002F静态成员变量\n",[29,22915,22916,22918,22921],{"class":31,"line":1793},[29,22917,2160],{"class":305},[29,22919,22920],{"class":309}," m_B;",[29,22922,22923],{"class":367}," \u002F\u002F非静态成员变量\n",[29,22925,22926],{"class":31,"line":1799},[29,22927,2575],{"emptyLinePlaceholder":233},[29,22929,22930],{"class":31,"line":1804},[29,22931,15397],{"class":305},[29,22933,22934],{"class":31,"line":1818},[29,22935,22548],{"class":367},[29,22937,22938,22940,22942,22944],{"class":31,"line":1823},[29,22939,11195],{"class":305},[29,22941,22742],{"class":305},[29,22943,13793],{"class":35},[29,22945,2151],{"class":309},[29,22947,22948],{"class":31,"line":1829},[29,22949,2205],{"class":309},[29,22951,22952,22954,22956,22959,22961],{"class":31,"line":1850},[29,22953,3626],{"class":309},[29,22955,1351],{"class":305},[29,22957,22958],{"class":103},"\"这是私有权限下的静态函数调用\"",[29,22960,1351],{"class":305},[29,22962,1373],{"class":309},[29,22964,22965],{"class":31,"line":1855},[29,22966,2362],{"class":309},[29,22968,22969],{"class":31,"line":1869},[29,22970,2575],{"emptyLinePlaceholder":233},[29,22972,22973],{"class":31,"line":1874},[29,22974,2575],{"emptyLinePlaceholder":233},[29,22976,22977],{"class":31,"line":1903},[29,22978,4170],{"class":309},[29,22980,22981,22983,22985,22987,22989,22991],{"class":31,"line":1908},[29,22982,313],{"class":305},[29,22984,15744],{"class":35},[29,22986,22378],{"class":309},[29,22988,355],{"class":305},[29,22990,499],{"class":39},[29,22992,1468],{"class":309},[29,22994,22995,22997,22999],{"class":31,"line":1925},[29,22996,5539],{"class":305},[29,22998,5763],{"class":35},[29,23000,2151],{"class":309},[29,23002,23003],{"class":31,"line":1930},[29,23004,1722],{"class":309},[29,23006,23007],{"class":31,"line":1935},[29,23008,22789],{"class":367},[29,23010,23011],{"class":31,"line":1940},[29,23012,22794],{"class":367},[29,23014,23015],{"class":31,"line":1954},[29,23016,15488],{"class":309},[29,23018,23019,23021,23023],{"class":31,"line":1959},[29,23020,16041],{"class":309},[29,23022,11726],{"class":35},[29,23024,5811],{"class":309},[29,23026,23027],{"class":31,"line":2752},[29,23028,22811],{"class":367},[29,23030,23031,23033,23035,23037],{"class":31,"line":2766},[29,23032,18694],{"class":35},[29,23034,17907],{"class":309},[29,23036,11726],{"class":35},[29,23038,5811],{"class":309},[29,23040,23041],{"class":31,"line":2774},[29,23042,23043],{"class":367},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[29,23045,23046],{"class":31,"line":2779},[29,23047,1741],{"class":309},[29,23049,23050,23052,23054],{"class":31,"line":2785},[29,23051,313],{"class":305},[29,23053,2148],{"class":35},[29,23055,2151],{"class":309},[29,23057,23058],{"class":31,"line":2791},[29,23059,1722],{"class":309},[29,23061,23062,23064],{"class":31,"line":2796},[29,23063,5808],{"class":35},[29,23065,5811],{"class":309},[29,23067,23068],{"class":31,"line":8123},[29,23069,1741],{"class":309},[275,23071,23073],{"id":23072},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22173,23075,23077],{"id":23076},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[171,23079,23080],{},"在c++中，类内的成员变量和成员函数分开存储",[171,23082,23083],{},"只有非静态成员变量才属于类的对象上",[23085,23086,23088],"h5",{"id":23087},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[19,23090,23092],{"className":296,"code":23091,"language":298,"meta":24,"style":24},"#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",[26,23093,23094,23101,23111,23117,23121,23125,23129,23137,23141,23145,23168,23172,23180,23184,23190],{"__ignoreMap":24},[29,23095,23096,23098],{"class":31,"line":32},[29,23097,2125],{"class":305},[29,23099,23100],{"class":103},"\u003Ciostraem>\n",[29,23102,23103,23105,23107,23109],{"class":31,"line":43},[29,23104,2133],{"class":305},[29,23106,2136],{"class":305},[29,23108,2139],{"class":35},[29,23110,1468],{"class":309},[29,23112,23113,23115],{"class":31,"line":51},[29,23114,14869],{"class":305},[29,23116,15346],{"class":35},[29,23118,23119],{"class":31,"line":59},[29,23120,1722],{"class":309},[29,23122,23123],{"class":31,"line":67},[29,23124,2575],{"emptyLinePlaceholder":233},[29,23126,23127],{"class":31,"line":75},[29,23128,4170],{"class":309},[29,23130,23131,23133,23135],{"class":31,"line":83},[29,23132,5539],{"class":305},[29,23134,5763],{"class":35},[29,23136,2151],{"class":309},[29,23138,23139],{"class":31,"line":158},[29,23140,1722],{"class":309},[29,23142,23143],{"class":31,"line":166},[29,23144,15488],{"class":309},[29,23146,23147,23149,23151,23154,23156,23159,23161,23163,23165],{"class":31,"line":1505},[29,23148,1727],{"class":309},[29,23150,1351],{"class":305},[29,23152,23153],{"class":103},"\"size of p=\"",[29,23155,1351],{"class":305},[29,23157,23158],{"class":35},"sizeoif",[29,23160,6714],{"class":309},[29,23162,1351],{"class":305},[29,23164,1416],{"class":309},[29,23166,23167],{"class":367}," \u002F\u002F查看这个空类的占用的内存空间\n",[29,23169,23170],{"class":31,"line":1788},[29,23171,1741],{"class":309},[29,23173,23174,23176,23178],{"class":31,"line":1793},[29,23175,313],{"class":305},[29,23177,2148],{"class":35},[29,23179,2151],{"class":309},[29,23181,23182],{"class":31,"line":1799},[29,23183,1722],{"class":309},[29,23185,23186,23188],{"class":31,"line":1804},[29,23187,5808],{"class":35},[29,23189,5811],{"class":309},[29,23191,23192],{"class":31,"line":1818},[29,23193,1741],{"class":309},[171,23195,23196],{},"输出结果为：size of p=1",[171,23198,23199],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[171,23201,23202],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23085,23204,23206],{"id":23205},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[19,23208,23210],{"className":296,"code":23209,"language":298,"meta":24,"style":24},"#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",[26,23211,23212,23218,23228,23236,23240,23249,23253,23261,23265,23269,23288,23292,23296,23304,23308,23314],{"__ignoreMap":24},[29,23213,23214,23216],{"class":31,"line":32},[29,23215,2125],{"class":305},[29,23217,2128],{"class":103},[29,23219,23220,23222,23224,23226],{"class":31,"line":43},[29,23221,2133],{"class":305},[29,23223,2136],{"class":305},[29,23225,2139],{"class":35},[29,23227,1468],{"class":309},[29,23229,23230,23232,23234],{"class":31,"line":51},[29,23231,14869],{"class":305},[29,23233,15744],{"class":35},[29,23235,2849],{"class":309},[29,23237,23238],{"class":31,"line":59},[29,23239,1722],{"class":309},[29,23241,23242,23244,23246],{"class":31,"line":67},[29,23243,2160],{"class":305},[29,23245,15623],{"class":309},[29,23247,23248],{"class":367},"\u002F\u002F非静态成员变量\n",[29,23250,23251],{"class":31,"line":75},[29,23252,4170],{"class":309},[29,23254,23255,23257,23259],{"class":31,"line":83},[29,23256,5539],{"class":305},[29,23258,5763],{"class":35},[29,23260,2151],{"class":309},[29,23262,23263],{"class":31,"line":158},[29,23264,1722],{"class":309},[29,23266,23267],{"class":31,"line":166},[29,23268,15488],{"class":309},[29,23270,23271,23273,23275,23277,23279,23281,23283,23285],{"class":31,"line":1505},[29,23272,1727],{"class":309},[29,23274,1351],{"class":305},[29,23276,23153],{"class":103},[29,23278,1548],{"class":305},[29,23280,6714],{"class":309},[29,23282,1351],{"class":305},[29,23284,1416],{"class":309},[29,23286,23287],{"class":367}," \u002F\u002F查看不是空对象时占用多少内存\n",[29,23289,23290],{"class":31,"line":1788},[29,23291,2575],{"emptyLinePlaceholder":233},[29,23293,23294],{"class":31,"line":1793},[29,23295,1741],{"class":309},[29,23297,23298,23300,23302],{"class":31,"line":1799},[29,23299,313],{"class":305},[29,23301,2148],{"class":35},[29,23303,2151],{"class":309},[29,23305,23306],{"class":31,"line":1804},[29,23307,1722],{"class":309},[29,23309,23310,23312],{"class":31,"line":1818},[29,23311,5808],{"class":35},[29,23313,5811],{"class":309},[29,23315,23316],{"class":31,"line":1823},[29,23317,1741],{"class":309},[171,23319,23320],{},"输出结果：size of p=4",[171,23322,23323],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[259,23325,23326],{},[178,23327,23328],{},"如果加上非静态成员变量，Person类修改如下",[19,23330,23332],{"className":296,"code":23331,"language":298,"meta":24,"style":24},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[26,23333,23334,23340,23344,23350,23358,23362,23367],{"__ignoreMap":24},[29,23335,23336,23338],{"class":31,"line":32},[29,23337,14869],{"class":305},[29,23339,15346],{"class":35},[29,23341,23342],{"class":31,"line":43},[29,23343,1722],{"class":309},[29,23345,23346,23348],{"class":31,"line":51},[29,23347,2160],{"class":305},[29,23349,21567],{"class":309},[29,23351,23352,23354,23356],{"class":31,"line":59},[29,23353,11195],{"class":305},[29,23355,2557],{"class":305},[29,23357,21574],{"class":309},[29,23359,23360],{"class":31,"line":67},[29,23361,4170],{"class":309},[29,23363,23364],{"class":31,"line":75},[29,23365,23366],{"class":367},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[29,23368,23369,23371,23373,23375,23377,23379],{"class":31,"line":83},[29,23370,313],{"class":305},[29,23372,15744],{"class":35},[29,23374,22587],{"class":309},[29,23376,355],{"class":305},[29,23378,499],{"class":39},[29,23380,1468],{"class":309},[171,23382,23383],{},"输出结果：4",[171,23385,23386],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[259,23388,23389],{"start":43},[178,23390,23391],{},"加上非静态成员函数",[19,23393,23395],{"className":296,"code":23394,"language":298,"meta":24,"style":24},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[26,23396,23397,23404,23408,23414,23422,23426,23430,23434],{"__ignoreMap":24},[29,23398,23399,23401],{"class":31,"line":32},[29,23400,14869],{"class":305},[29,23402,23403],{"class":35},"  Person\n",[29,23405,23406],{"class":31,"line":43},[29,23407,1722],{"class":309},[29,23409,23410,23412],{"class":31,"line":51},[29,23411,2160],{"class":305},[29,23413,21567],{"class":309},[29,23415,23416,23418,23420],{"class":31,"line":59},[29,23417,15084],{"class":305},[29,23419,11560],{"class":35},[29,23421,2151],{"class":309},[29,23423,23424],{"class":31,"line":67},[29,23425,2205],{"class":309},[29,23427,23428],{"class":31,"line":75},[29,23429,2575],{"emptyLinePlaceholder":233},[29,23431,23432],{"class":31,"line":83},[29,23433,2362],{"class":309},[29,23435,23436],{"class":31,"line":158},[29,23437,4170],{"class":309},[171,23439,23440],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[259,23442,23443],{"start":51},[178,23444,23445],{},"加上静态成员函数",[19,23447,23449],{"className":296,"code":23448,"language":298,"meta":24,"style":24},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[26,23450,23451,23457,23461,23467,23475,23479,23483,23487,23498,23502,23506,23510],{"__ignoreMap":24},[29,23452,23453,23455],{"class":31,"line":32},[29,23454,14869],{"class":305},[29,23456,23403],{"class":35},[29,23458,23459],{"class":31,"line":43},[29,23460,1722],{"class":309},[29,23462,23463,23465],{"class":31,"line":51},[29,23464,2160],{"class":305},[29,23466,21567],{"class":309},[29,23468,23469,23471,23473],{"class":31,"line":59},[29,23470,15084],{"class":305},[29,23472,11560],{"class":35},[29,23474,2151],{"class":309},[29,23476,23477],{"class":31,"line":67},[29,23478,2205],{"class":309},[29,23480,23481],{"class":31,"line":75},[29,23482,2575],{"emptyLinePlaceholder":233},[29,23484,23485],{"class":31,"line":83},[29,23486,2362],{"class":309},[29,23488,23489,23491,23493,23496],{"class":31,"line":158},[29,23490,11195],{"class":305},[29,23492,22742],{"class":305},[29,23494,23495],{"class":35}," func1",[29,23497,2151],{"class":309},[29,23499,23500],{"class":31,"line":166},[29,23501,2205],{"class":309},[29,23503,23504],{"class":31,"line":1505},[29,23505,2575],{"emptyLinePlaceholder":233},[29,23507,23508],{"class":31,"line":1788},[29,23509,2362],{"class":309},[29,23511,23512],{"class":31,"line":1793},[29,23513,4170],{"class":309},[171,23515,23383],{},[171,23517,23518],{},"解释：静态成员函数也不属于类上",[223,23520,7849],{},{"title":24,"searchDepth":43,"depth":43,"links":23522},[23523,23529],{"id":14820,"depth":43,"text":14821,"children":23524},[23525,23526,23527,23528],{"id":14824,"depth":51,"text":14825},{"id":15549,"depth":51,"text":15550},{"id":15721,"depth":51,"text":15722},{"id":16180,"depth":51,"text":16181},{"id":18552,"depth":43,"text":18553,"children":23530},[23531,23532,23533,23534,23535,23536,23537,23538,23539],{"id":18564,"depth":51,"text":18565},{"id":18857,"depth":51,"text":18858},{"id":19348,"depth":51,"text":19349},{"id":20445,"depth":51,"text":20446},{"id":20868,"depth":51,"text":20869},{"id":21347,"depth":51,"text":21348},{"id":21722,"depth":51,"text":21723},{"id":22135,"depth":51,"text":22136},{"id":23072,"depth":51,"text":23073},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14785,"description":23540},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23547,"title":298,"body":23548,"description":230,"extension":231,"meta":23552,"navigation":233,"path":23554,"seo":23555,"stem":23556,"__hash__":23557},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23549,"toc":23550},[],{"title":24,"searchDepth":43,"depth":43,"links":23551},[],{"category":23553},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":298,"description":230},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23559,"title":23560,"body":23561,"description":24,"extension":231,"meta":24150,"navigation":233,"path":24151,"seo":24152,"stem":24153,"__hash__":24154},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23562,"toc":24132},[23563,23566,23570,23573,23576,23579,23597,23602,23605,23608,23611,23614,23619,23622,23627,23630,23633,23637,23640,23643,23649,23652,23670,23674,23678,23681,23686,23689,23693,23696,23709,23712,23716,23719,23722,23725,23750,23753,23762,23773,23788,23820,23824,23831,23839,23843,23846,23849,23854,23858,23861,23864,23869,23872,23876,23879,23882,23887,23890,23894,23899,23903,23970,23974,23977,23980,23983,23986,23989,23995,24014,24017,24031,24040,24044,24047,24050,24055,24058,24063,24068,24071,24074,24079,24084,24087,24092,24097,24100,24105,24110,24113,24116,24121,24124,24129],[10,23564,23560],{"id":23565},"_1强化学习基本认识",[14,23567,23569],{"id":23568},"_11什么是强化学习","1.1.什么是强化学习",[171,23571,23572],{},"强化学习有两部分组成：智能体和环境；",[171,23574,23575],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[171,23577,23578],{},"强化学习与监督学习的区别:",[259,23580,23581,23584,23587,23590],{},[178,23582,23583],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[178,23585,23586],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[178,23588,23589],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[178,23591,23592,23593,23596],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[457,23594,23595],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[171,23598,23599],{},[1638,23600],{"alt":24,"src":23601},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[171,23603,23604],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[171,23606,23607],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[171,23609,23610],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[171,23612,23613],{},"获取奖励",[171,23615,23616],{},[1638,23617],{"alt":24,"src":23618},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[171,23620,23621],{},"强化学习可以分成标准强化学习和深度强化学习",[171,23623,23624],{},[1638,23625],{"alt":24,"src":23626},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[171,23628,23629],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[171,23631,23632],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23634,23636],{"id":23635},"_12强化学习应用场景","1.2.强化学习应用场景",[171,23638,23639],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[171,23641,23642],{},"具身智能中的应用",[171,23644,23645,23648],{},[457,23646,23647],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[171,23650,23651],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[171,23653,23654,23655,23658,23659,23662,23663,23666,23667],{},"机器人是",[457,23656,23657],{},"躯体","，深度学习是",[457,23660,23661],{},"神经元****网络","，VLA是",[457,23664,23665],{},"通用的行为逻辑","，而强化学习是",[457,23668,23669],{},"教练",[14,23671,23673],{"id":23672},"_13序列决策","1.3.序列决策",[275,23675,23677],{"id":23676},"_131智能体与环境","1.3.1.智能体与环境",[171,23679,23680],{},"强化学习研究的问题是智能体agent与环境交互的问题",[171,23682,23683],{},[1638,23684],{"alt":24,"src":23685},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[171,23687,23688],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[275,23690,23692],{"id":23691},"_132奖励","1.3.2.奖励",[171,23694,23695],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[171,23697,23698,23699,23708],{},"取某个策略的表现如何。强化学习的目的就是",[457,23700,23701,23702,23707],{},"最大化",[457,23703,23704],{},[457,23705,23706],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[171,23710,23711],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[275,23713,23715],{"id":23714},"_133序列决策","1.3.3.序列决策",[171,23717,23718],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[171,23720,23721],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[171,23723,23724],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[171,23726,23727,23731,23732,23734,23735,23737,23738,23740,23741,13970,23744,13970,23747],{},[23728,23729,23730],"em",{},"Ht"," = ",[23728,23733,904],{},"1*, a",[23728,23736,525],{},", r",[23728,23739,525],{},", . . . ,* ",[23728,23742,23743],{},"ot",[23728,23745,23746],{},", at ,",[23728,23748,23749],{},"rt",[171,23751,23752],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[171,23754,23755,23731,23758,1834,23760,737],{},[23728,23756,23757],{},"st",[23728,23759,361],{},[23728,23761,23730],{},[171,23763,23764,23765,23768,23769,23772],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[457,23766,23767],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[457,23770,23771],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[171,23774,23775,23776,23779,23780,23783,23784,23787],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[457,23777,23778],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[457,23781,23782],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23728,23785,23786],{},"S, A, T, R, Ω, O, γ",")。",[171,23789,23790,23791,23793,23794,23796,23797,310,23799,23802,23803,23805,23806,310,23809,23812,23813,23815,23816,23819],{},"其中 ",[23728,23792,997],{}," 表示状态空间，为隐变量，",[23728,23795,540],{}," 为动作空间，",[23728,23798,1022],{},[23728,23800,23801],{},"s ′ |s, a",") 为状态转移概率，",[23728,23804,972],{}," 为奖励函数，",[23728,23807,23808],{},"Ω",[23728,23810,23811],{},"o|s, a",") 为观测概率，",[23728,23814,898],{}," 为观测空间，",[23728,23817,23818],{},"γ"," 为折扣因子。",[14,23821,23823],{"id":23822},"_14动作空间","1.4.动作空间",[171,23825,23826,23827,23830],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[457,23828,23829],{},"动作空间"," ，动作空间分为:",[259,23832,23833,23836],{},[178,23834,23835],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[178,23837,23838],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23840,23842],{"id":23841},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[171,23844,23845],{},"由策略、价值函数、模型三部分组成",[171,23847,23848],{},"这三者组成马尔可夫决策过程",[171,23850,23851],{},[1638,23852],{"alt":24,"src":23853},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[275,23855,23857],{"id":23856},"_151策略","1.5.1.策略",[171,23859,23860],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[171,23862,23863],{},"策略可分为两种：",[171,23865,23866],{},[1638,23867],{"alt":24,"src":23868},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[171,23870,23871],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[275,23873,23875],{"id":23874},"_152价值函数","1.5.2.价值函数",[171,23877,23878],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[171,23880,23881],{},"价值函数中有一个折扣因子，类似于存款利息",[171,23883,23884],{},[1638,23885],{"alt":24,"src":23886},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[171,23888,23889],{},"进入某个状态采取的最优动作可以通过Q函数得到",[275,23891,23893],{"id":23892},"_153模型","1.5.3.模型",[171,23895,23896],{},[1638,23897],{"alt":24,"src":23898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23900,23902],{"id":23901},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[445,23904,23905,23916],{},[448,23906,23907],{},[451,23908,23909,23913],{},[454,23910,23912],{"align":23911},"left","类型",[454,23914,23915],{"align":23911},"特点",[492,23917,23918,23928,23938,23948,23960],{},[451,23919,23920,23925],{},[497,23921,23922],{"align":23911},[457,23923,23924],{},"基于价值的智能体",[497,23926,23927],{"align":23911},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[451,23929,23930,23935],{},[497,23931,23932],{"align":23911},[457,23933,23934],{},"基于策略的智能体",[497,23936,23937],{"align":23911},"直接学习策略，没有学习价值函数",[451,23939,23940,23945],{},[497,23941,23942],{"align":23911},[457,23943,23944],{},"演员-评论员智能体",[497,23946,23947],{"align":23911},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[451,23949,23950,23955],{},[497,23951,23952],{"align":23911},[457,23953,23954],{},"有模型强化学习智能体",[497,23956,23957],{"align":23911},[1638,23958],{"alt":24,"src":23959},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[451,23961,23962,23967],{},[497,23963,23964],{"align":23911},[457,23965,23966],{},"免模型强化学习智能体",[497,23968,23969],{"align":23911},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,23971,23973],{"id":23972},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[171,23975,23976],{},"学习和规划是序列决策的两个基本问题",[171,23978,23979],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[171,23981,23982],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[171,23984,23985],{},"强化学习用到的库：Gym",[171,23987,23988],{},"Gym可以检验强化学习算法的优劣",[171,23990,23991,23994],{},[457,23992,23993],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[19,23996,23998],{"className":21,"code":23997,"language":23,"meta":24,"style":24},"pip install gym==0.25.2\n",[26,23999,24000],{"__ignoreMap":24},[29,24001,24002,24005,24008,24011],{"class":31,"line":32},[29,24003,24004],{"class":35},"pip",[29,24006,24007],{"class":103}," install",[29,24009,24010],{"class":103}," gym==",[29,24012,24013],{"class":39},"0.25.2\n",[171,24015,24016],{},"显示图形界面需要",[19,24018,24020],{"className":21,"code":24019,"language":23,"meta":24,"style":24},"pip install pygame\n",[26,24021,24022],{"__ignoreMap":24},[29,24023,24024,24026,24028],{"class":31,"line":32},[29,24025,24004],{"class":35},[29,24027,24007],{"class":103},[29,24029,24030],{"class":103}," pygame\n",[171,24032,24033,24034],{},"有关Gym库的相关文档介绍：",[546,24035,24039],{"href":24036,"rel":24037},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24038],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24041,24043],{"id":24042},"_18一些补充基础概念","1.8.一些补充基础概念",[171,24045,24046],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[171,24048,24049],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[171,24051,24052],{},[1638,24053],{"alt":24,"src":24054},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[171,24056,24057],{},"折扣率需要自己来设定",[171,24059,24060],{},[1638,24061],{"alt":24,"src":24062},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[259,24064,24065],{},[178,24066,24067],{},"状态转移函数：",[171,24069,24070],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[171,24072,24073],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[171,24075,24076],{},[1638,24077],{"alt":24,"src":24078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[259,24080,24081],{"start":43},[178,24082,24083],{},"动作价值函数：",[171,24085,24086],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[171,24088,24089],{},[1638,24090],{"alt":24,"src":24091},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[259,24093,24094],{"start":51},[178,24095,24096],{},"最优动作价值函数：",[171,24098,24099],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[171,24101,24102],{},[1638,24103],{"alt":24,"src":24104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[259,24106,24107],{"start":59},[178,24108,24109],{},"状态价值函数:",[171,24111,24112],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[171,24114,24115],{},"它衡量的是“一个具体动作”的长期价值",[171,24117,24118],{},[1638,24119],{"alt":24,"src":24120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[171,24122,24123],{},"几个价值函数之间的比较：",[171,24125,24126],{},[1638,24127],{"alt":24,"src":24128},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[223,24130,24131],{},"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":24,"searchDepth":43,"depth":43,"links":24133},[24134,24135,24136,24141,24142,24147,24148,24149],{"id":23568,"depth":43,"text":23569},{"id":23635,"depth":43,"text":23636},{"id":23672,"depth":43,"text":23673,"children":24137},[24138,24139,24140],{"id":23676,"depth":51,"text":23677},{"id":23691,"depth":51,"text":23692},{"id":23714,"depth":51,"text":23715},{"id":23822,"depth":43,"text":23823},{"id":23841,"depth":43,"text":23842,"children":24143},[24144,24145,24146],{"id":23856,"depth":51,"text":23857},{"id":23874,"depth":51,"text":23875},{"id":23892,"depth":51,"text":23893},{"id":23901,"depth":43,"text":23902},{"id":23972,"depth":43,"text":23973},{"id":24042,"depth":43,"text":24043},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23560,"description":24},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24156,"title":24157,"body":24158,"description":24165,"extension":231,"meta":24176,"navigation":233,"path":24177,"seo":24178,"stem":24179,"__hash__":24180},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24159,"toc":24174},[24160,24163,24166,24171],[10,24161,24157],{"id":24162},"_2马尔可夫决策过程",[171,24164,24165],{},"这是强化学习的基本框架",[171,24167,24168],{},[1638,24169],{"alt":24,"src":24170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[171,24172,24173],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":24,"searchDepth":43,"depth":43,"links":24175},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24157,"description":24165},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24182,"title":24183,"body":24184,"description":24,"extension":231,"meta":24300,"navigation":233,"path":24301,"seo":24302,"stem":24303,"__hash__":24304},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24185,"toc":24295},[24186,24189,24193,24196,24201,24206,24209,24214,24217,24222,24225,24229,24234,24237,24242,24247,24252,24255,24259,24264,24267,24272,24277,24282,24287,24290],[10,24187,24183],{"id":24188},"_3动作价值函数",[14,24190,24192],{"id":24191},"_31dqn","3.1.DQN",[171,24194,24195],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[171,24197,24198],{},[1638,24199],{"alt":24,"src":24200},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[171,24202,24203],{},[1638,24204],{"alt":24,"src":24205},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[171,24207,24208],{},"DQN算法的描述：",[171,24210,24211],{},[1638,24212],{"alt":24,"src":24213},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[171,24215,24216],{},"这里的Dense指的是全连接层",[171,24218,24219],{},[1638,24220],{"alt":24,"src":24221},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[171,24223,24224],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,24226,24228],{"id":24227},"_32dqn的举例","3.2.DQN的举例",[171,24230,24231],{},[1638,24232],{"alt":24,"src":24233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[171,24235,24236],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[171,24238,24239],{},[1638,24240],{"alt":24,"src":24241},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[171,24243,24244],{},[1638,24245],{"alt":24,"src":24246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[171,24248,24249],{},[1638,24250],{"alt":24,"src":24251},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[171,24253,24254],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24256,24258],{"id":24257},"_33td算法","3.3.TD算法",[171,24260,24261],{},[1638,24262],{"alt":24,"src":24263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[171,24265,24266],{},"强化学习TD算法公式的粗略解释：",[171,24268,24269],{},[1638,24270],{"alt":24,"src":24271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[171,24273,24274],{},[1638,24275],{"alt":24,"src":24276},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[171,24278,24279],{},[1638,24280],{"alt":24,"src":24281},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[171,24283,24284],{},[1638,24285],{"alt":24,"src":24286},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[171,24288,24289],{},"TD算法总结：",[171,24291,24292],{},[1638,24293],{"alt":24,"src":24294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":24,"searchDepth":43,"depth":43,"links":24296},[24297,24298,24299],{"id":24191,"depth":43,"text":24192},{"id":24227,"depth":43,"text":24228},{"id":24257,"depth":43,"text":24258},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24183,"description":24},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24306,"title":24307,"body":24308,"description":24,"extension":231,"meta":24541,"navigation":233,"path":24542,"seo":24543,"stem":24544,"__hash__":24545},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24309,"toc":24537},[24310,24313,24317,24320,24323,24328,24333,24336,24341,24346,24349,24354,24357,24362,24365,24370,24373,24378,24381,24386,24391,24394,24399,24402,24405,24410,24413,24418,24423,24427,24430,24433,24438,24443,24446,24451,24456,24459,24464,24467,24470,24475,24478,24483,24486,24491,24496,24499,24504,24509,24512,24517,24520,24525,24528],[10,24311,24307],{"id":24312},"_4策略学习",[14,24314,24316],{"id":24315},"_41概念描述","4.1.概念描述",[171,24318,24319],{},"用神经网络（策略网络）近似策略函数",[171,24321,24322],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[171,24324,24325],{},[1638,24326],{"alt":24,"src":24327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[171,24329,24330],{},[1638,24331],{"alt":24,"src":24332},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[171,24334,24335],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[171,24337,24338],{},[1638,24339],{"alt":24,"src":24340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[171,24342,24343],{},[1638,24344],{"alt":24,"src":24345},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[171,24347,24348],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[171,24350,24351],{},[1638,24352],{"alt":24,"src":24353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[171,24355,24356],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[171,24358,24359],{},[1638,24360],{"alt":24,"src":24361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[171,24363,24364],{},"改进theta要用到策略梯度算法",[171,24366,24367],{},[1638,24368],{"alt":24,"src":24369},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[171,24371,24372],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[171,24374,24375],{},[1638,24376],{"alt":24,"src":24377},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[171,24379,24380],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[171,24382,24383],{},[1638,24384],{"alt":24,"src":24385},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[171,24387,24388],{},[1638,24389],{"alt":24,"src":24390},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[171,24392,24393],{},"梯度公式总结：",[171,24395,24396],{},[1638,24397],{"alt":24,"src":24398},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[171,24400,24401],{},"两个公式的分别应用场景：",[171,24403,24404],{},"对于离散的动作：",[171,24406,24407],{},[1638,24408],{"alt":24,"src":24409},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[171,24411,24412],{},"对于连续的动作：",[171,24414,24415],{},[1638,24416],{"alt":24,"src":24417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[171,24419,24420],{},[1638,24421],{"alt":24,"src":24422},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24424,24426],{"id":24425},"_42概率梯度算法总结","4.2.概率梯度算法总结",[171,24428,24429],{},"使用蒙特卡洛来近似计算策略梯度",[171,24431,24432],{},"蒙特卡洛法的解释如下：",[171,24434,24435],{},[1638,24436],{"alt":24,"src":24437},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[171,24439,24440],{},[1638,24441],{"alt":24,"src":24442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[171,24444,24445],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[259,24447,24448],{},[178,24449,24450],{},"方法一：reinforce算法",[171,24452,24453],{},[1638,24454],{"alt":24,"src":24455},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[171,24457,24458],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[259,24460,24461],{"start":43},[178,24462,24463],{},"方法二：actor-critic算法",[171,24465,24466],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[171,24468,24469],{},"两个网络的构建：",[171,24471,24472],{},[1638,24473],{"alt":24,"src":24474},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[171,24476,24477],{},"actor网路：",[171,24479,24480],{},[1638,24481],{"alt":24,"src":24482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[171,24484,24485],{},"critic网络",[171,24487,24488],{},[1638,24489],{"alt":24,"src":24490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[259,24492,24493],{"start":51},[178,24494,24495],{},"网络的训练",[171,24497,24498],{},"网络描述",[171,24500,24501],{},[1638,24502],{"alt":24,"src":24503},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[171,24505,24506],{},[1638,24507],{"alt":24,"src":24508},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[171,24510,24511],{},"TD算法更新梯度：",[171,24513,24514],{},[1638,24515],{"alt":24,"src":24516},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[171,24518,24519],{},"策略网络更新梯度：",[171,24521,24522],{},[1638,24523],{"alt":24,"src":24524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[171,24526,24527],{},"训练整个流程的具体描述：",[171,24529,24530,24533,24534],{},[1638,24531],{"alt":24,"src":24532},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1638,24535],{"alt":24,"src":24536},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":24,"searchDepth":43,"depth":43,"links":24538},[24539,24540],{"id":24315,"depth":43,"text":24316},{"id":24425,"depth":43,"text":24426},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24307,"description":24},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24547,"title":24548,"body":24549,"description":24556,"extension":231,"meta":24606,"navigation":233,"path":24607,"seo":24608,"stem":24609,"__hash__":24610},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24550,"toc":24602},[24551,24554,24557,24561,24564,24569,24573,24576,24581,24584,24589,24594,24597],[10,24552,24548],{"id":24553},"_5alphago算法",[171,24555,24556],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24558,24560],{"id":24559},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[171,24562,24563],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[171,24565,24566],{},[1638,24567],{"alt":24,"src":24568},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24570,24572],{"id":24571},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[171,24574,24575],{},"采用强化学习的方式训练策略网络",[171,24577,24578],{},[1638,24579],{"alt":24,"src":24580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[171,24582,24583],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[171,24585,24586],{},[1638,24587],{"alt":24,"src":24588},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[171,24590,24591],{},[1638,24592],{"alt":24,"src":24593},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[171,24595,24596],{},"强化学习训练策略网络的总结：",[171,24598,24599],{},[1638,24600],{"alt":24,"src":24601},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":24,"searchDepth":43,"depth":43,"links":24603},[24604,24605],{"id":24559,"depth":43,"text":24560},{"id":24571,"depth":43,"text":24572},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24548,"description":24556},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24612,"title":24613,"body":24614,"description":24621,"extension":231,"meta":24624,"navigation":233,"path":24625,"seo":24626,"stem":24627,"__hash__":24628},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24615,"toc":24622},[24616,24619],[10,24617,24613],{"id":24618},"_6价值网络",[171,24620,24621],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":24,"searchDepth":43,"depth":43,"links":24623},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24613,"description":24621},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24630,"title":24631,"body":24632,"description":24636,"extension":231,"meta":24637,"navigation":233,"path":24638,"seo":24639,"stem":24640,"__hash__":24641},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24633,"toc":24634},[],{"title":24,"searchDepth":43,"depth":43,"links":24635},[],"记录自己的强化学习笔记。",{"category":23553},"\u002Fwiki\u002F2025-12-04",{"title":24631,"description":24636},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24643,"title":24644,"body":24645,"description":230,"extension":231,"meta":24684,"navigation":233,"path":24685,"seo":24686,"stem":24687,"__hash__":24688},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24646,"toc":24682},[24647,24650,24653,24659,24662,24668,24671,24676,24679],[10,24648,24644],{"id":24649},"_1-项目概览与官方资源",[171,24651,24652],{},"官方文档：",[171,24654,24655],{},[546,24656,24657],{"href":24657,"rel":24658},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24038],[171,24660,24661],{},"官方代码仓库：",[171,24663,24664],{},[546,24665,24666],{"href":24666,"rel":24667},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24038],[171,24669,24670],{},"复现大体流程：",[171,24672,24673],{},[1638,24674],{"alt":24,"src":24675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[171,24677,24678],{},"本教程的目标是打通这条链路：",[171,24680,24681],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":24,"searchDepth":43,"depth":43,"links":24683},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24644,"description":230},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24690,"title":24691,"body":24692,"description":230,"extension":231,"meta":24807,"navigation":233,"path":24808,"seo":24809,"stem":24810,"__hash__":24811},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24693,"toc":24802},[24694,24697,24701,24704,24711,24715,24718,24727,24736,24740,24770,24773,24799],[10,24695,24691],{"id":24696},"_2-环境准备与设备连接",[14,24698,24700],{"id":24699},"_21-系统与环境","2.1 系统与环境",[171,24702,24703],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[171,24705,24706,24707,24710],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[26,24708,24709],{},"lerobot"," 依赖。",[14,24712,24714],{"id":24713},"_22-机械臂串口识别","2.2 机械臂串口识别",[171,24716,24717],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[19,24719,24721],{"className":21,"code":24720,"language":23,"meta":24,"style":24},"lerobot-find-out\n",[26,24722,24723],{"__ignoreMap":24},[29,24724,24725],{"class":31,"line":32},[29,24726,24720],{"class":35},[171,24728,24729,24730,520,24733,199],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[26,24731,24732],{},"\u002Fdev\u002FttyACM0",[26,24734,24735],{},"\u002Fdev\u002FttyACM1",[14,24737,24739],{"id":24738},"_23-串口授权","2.3 串口授权",[19,24741,24743],{"className":21,"code":24742,"language":23,"meta":24,"style":24},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[26,24744,24745,24759],{"__ignoreMap":24},[29,24746,24747,24750,24753,24756],{"class":31,"line":32},[29,24748,24749],{"class":35},"sudo",[29,24751,24752],{"class":103}," chmod",[29,24754,24755],{"class":39}," 666",[29,24757,24758],{"class":103}," \u002Fdev\u002FttyACM0\n",[29,24760,24761,24763,24765,24767],{"class":31,"line":43},[29,24762,24749],{"class":35},[29,24764,24752],{"class":103},[29,24766,24755],{"class":39},[29,24768,24769],{"class":103}," \u002Fdev\u002FttyACM1\n",[171,24771,24772],{},"说明：",[175,24774,24775,24780,24786,24796],{},[178,24776,24777,24779],{},[26,24778,24749],{},"：以 root 权限执行命令。",[178,24781,24782,24785],{},[26,24783,24784],{},"chmod","：修改设备节点权限。",[178,24787,24788,24791,24792,24795],{},[26,24789,24790],{},"666","：",[26,24793,24794],{},"rw-rw-rw-","，所有用户可读写。",[178,24797,24798],{},"串口号必须替换为你机器上的真实端口。",[223,24800,24801],{},"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":24,"searchDepth":43,"depth":43,"links":24803},[24804,24805,24806],{"id":24699,"depth":43,"text":24700},{"id":24713,"depth":43,"text":24714},{"id":24738,"depth":43,"text":24739},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24691,"description":230},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24813,"title":24814,"body":24815,"description":230,"extension":231,"meta":24970,"navigation":233,"path":24971,"seo":24972,"stem":24973,"__hash__":24974},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24816,"toc":24966},[24817,24821,24825,24831,24834,24888,24891,24895,24898,24963],[10,24818,24820],{"id":24819},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24822,24824],{"id":24823},"_31-配置电机-id","3.1 配置电机 ID",[171,24826,24827,24828,24830],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[26,24829,525],{},"，需要改成机械臂链路里不冲突的编号。",[171,24832,24833],{},"方式一：用 LeRobot 命令逐步写入。",[19,24835,24837],{"className":21,"code":24836,"language":23,"meta":24,"style":24},"# 主臂舵机配置 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",[26,24838,24839,24844,24851,24857,24862,24866,24871,24877,24883],{"__ignoreMap":24},[29,24840,24841],{"class":31,"line":32},[29,24842,24843],{"class":367},"# 主臂舵机配置 ID\n",[29,24845,24846,24849],{"class":31,"line":43},[29,24847,24848],{"class":35},"lerobot-setup-motors",[29,24850,40],{"class":39},[29,24852,24853,24855],{"class":31,"line":51},[29,24854,70],{"class":39},[29,24856,40],{"class":39},[29,24858,24859],{"class":31,"line":59},[29,24860,24861],{"class":39},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[29,24863,24864],{"class":31,"line":67},[29,24865,2575],{"emptyLinePlaceholder":233},[29,24867,24868],{"class":31,"line":75},[29,24869,24870],{"class":367},"# 从臂舵机配置 ID\n",[29,24872,24873,24875],{"class":31,"line":83},[29,24874,24848],{"class":35},[29,24876,40],{"class":39},[29,24878,24879,24881],{"class":31,"line":158},[29,24880,46],{"class":39},[29,24882,40],{"class":39},[29,24884,24885],{"class":31,"line":166},[29,24886,24887],{"class":39},"  --robot.port=\u002Fdev\u002FttyACM1\n",[171,24889,24890],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24892,24894],{"id":24893},"_32-机械臂校准","3.2 机械臂校准",[171,24896,24897],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[19,24899,24901],{"className":21,"code":24900,"language":23,"meta":24,"style":24},"# 主臂校准\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",[26,24902,24903,24908,24915,24921,24927,24931,24935,24940,24946,24952,24958],{"__ignoreMap":24},[29,24904,24905],{"class":31,"line":32},[29,24906,24907],{"class":367},"# 主臂校准\n",[29,24909,24910,24913],{"class":31,"line":43},[29,24911,24912],{"class":35},"lerobot-calibrate",[29,24914,40],{"class":39},[29,24916,24917,24919],{"class":31,"line":51},[29,24918,70],{"class":39},[29,24920,40],{"class":39},[29,24922,24923,24925],{"class":31,"line":59},[29,24924,78],{"class":39},[29,24926,40],{"class":39},[29,24928,24929],{"class":31,"line":67},[29,24930,86],{"class":39},[29,24932,24933],{"class":31,"line":75},[29,24934,2575],{"emptyLinePlaceholder":233},[29,24936,24937],{"class":31,"line":83},[29,24938,24939],{"class":367},"# 从臂校准\n",[29,24941,24942,24944],{"class":31,"line":158},[29,24943,24912],{"class":35},[29,24945,40],{"class":39},[29,24947,24948,24950],{"class":31,"line":166},[29,24949,46],{"class":39},[29,24951,40],{"class":39},[29,24953,24954,24956],{"class":31,"line":1505},[29,24955,54],{"class":39},[29,24957,40],{"class":39},[29,24959,24960],{"class":31,"line":1788},[29,24961,24962],{"class":39},"  --robot.id=my_awesome_follower_arm\n",[223,24964,24965],{},"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":24,"searchDepth":43,"depth":43,"links":24967},[24968,24969],{"id":24823,"depth":43,"text":24824},{"id":24893,"depth":43,"text":24894},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24814,"description":230},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":4,"title":5,"body":24976,"description":230,"extension":231,"meta":25134,"navigation":233,"path":234,"seo":25135,"stem":236,"__hash__":237},{"type":7,"value":24977,"toc":25130},[24978,24980,24982,25026,25028,25038,25096,25098,25128],[10,24979,5],{"id":12},[14,24981,17],{"id":16},[19,24983,24984],{"className":21,"code":22,"language":23,"meta":24,"style":24},[26,24985,24986,24992,24998,25004,25010,25016,25022],{"__ignoreMap":24},[29,24987,24988,24990],{"class":31,"line":32},[29,24989,36],{"class":35},[29,24991,40],{"class":39},[29,24993,24994,24996],{"class":31,"line":43},[29,24995,46],{"class":39},[29,24997,40],{"class":39},[29,24999,25000,25002],{"class":31,"line":51},[29,25001,54],{"class":39},[29,25003,40],{"class":39},[29,25005,25006,25008],{"class":31,"line":59},[29,25007,62],{"class":39},[29,25009,40],{"class":39},[29,25011,25012,25014],{"class":31,"line":67},[29,25013,70],{"class":39},[29,25015,40],{"class":39},[29,25017,25018,25020],{"class":31,"line":75},[29,25019,78],{"class":39},[29,25021,40],{"class":39},[29,25023,25024],{"class":31,"line":83},[29,25025,86],{"class":39},[14,25027,90],{"id":89},[19,25029,25030],{"className":21,"code":93,"language":23,"meta":24,"style":24},[26,25031,25032],{"__ignoreMap":24},[29,25033,25034,25036],{"class":31,"line":32},[29,25035,100],{"class":35},[29,25037,104],{"class":103},[19,25039,25040],{"className":21,"code":107,"language":23,"meta":24,"style":24},[26,25041,25042,25048,25054,25060,25066,25074,25080,25086,25092],{"__ignoreMap":24},[29,25043,25044,25046],{"class":31,"line":32},[29,25045,36],{"class":35},[29,25047,40],{"class":39},[29,25049,25050,25052],{"class":31,"line":43},[29,25051,46],{"class":39},[29,25053,40],{"class":39},[29,25055,25056,25058],{"class":31,"line":51},[29,25057,54],{"class":39},[29,25059,40],{"class":39},[29,25061,25062,25064],{"class":31,"line":59},[29,25063,62],{"class":39},[29,25065,40],{"class":39},[29,25067,25068,25070,25072],{"class":31,"line":67},[29,25069,138],{"class":39},[29,25071,141],{"class":103},[29,25073,40],{"class":39},[29,25075,25076,25078],{"class":31,"line":75},[29,25077,70],{"class":39},[29,25079,40],{"class":39},[29,25081,25082,25084],{"class":31,"line":83},[29,25083,78],{"class":39},[29,25085,40],{"class":39},[29,25087,25088,25090],{"class":31,"line":158},[29,25089,161],{"class":39},[29,25091,40],{"class":39},[29,25093,25094],{"class":31,"line":166},[29,25095,169],{"class":39},[171,25097,173],{},[175,25099,25100,25104,25108,25114,25120,25124],{},[178,25101,25102,183],{},[26,25103,182],{},[178,25105,25106,189],{},[26,25107,188],{},[178,25109,25110,195,25112,199],{},[26,25111,194],{},[26,25113,198],{},[178,25115,25116,205,25118,209],{},[26,25117,204],{},[26,25119,208],{},[178,25121,25122,215],{},[26,25123,214],{},[178,25125,25126,221],{},[26,25127,220],{},[223,25129,225],{},{"title":24,"searchDepth":43,"depth":43,"links":25131},[25132,25133],{"id":16,"depth":43,"text":17},{"id":89,"depth":43,"text":90},{},{"title":5,"description":230},{"id":25137,"title":25138,"body":25139,"description":230,"extension":231,"meta":25311,"navigation":233,"path":25312,"seo":25313,"stem":25314,"__hash__":25315},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25140,"toc":25306},[25141,25145,25149,25154,25159,25162,25204,25210,25214,25263,25268,25272,25275,25283,25288,25293,25298,25303],[10,25142,25144],{"id":25143},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25146,25148],{"id":25147},"_51-生成访问令牌","5.1 生成访问令牌",[171,25150,25151],{},[1638,25152],{"alt":24,"src":25153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[171,25155,25156],{},[1638,25157],{"alt":24,"src":25158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[171,25160,25161],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[19,25163,25165],{"className":21,"code":25164,"language":23,"meta":24,"style":24},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[26,25166,25167,25180],{"__ignoreMap":24},[29,25168,25169,25172,25175,25177],{"class":31,"line":32},[29,25170,25171],{"class":305},"export",[29,25173,25174],{"class":309}," HF_TOKEN",[29,25176,355],{"class":305},[29,25178,25179],{"class":103},"\"your_huggingface_token\"\n",[29,25181,25182,25185,25188,25191,25194,25196,25199,25201],{"class":31,"line":43},[29,25183,25184],{"class":35},"hf",[29,25186,25187],{"class":103}," auth",[29,25189,25190],{"class":103}," login",[29,25192,25193],{"class":39}," --token",[29,25195,9899],{"class":103},[29,25197,25198],{"class":309},"$HF_TOKEN",[29,25200,559],{"class":103},[29,25202,25203],{"class":39}," --add-to-git-credential\n",[171,25205,25206,25209],{},[26,25207,25208],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25211,25213],{"id":25212},"_52-验证登录","5.2 验证登录",[19,25215,25217],{"className":21,"code":25216,"language":23,"meta":24,"style":24},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[26,25218,25219,25250],{"__ignoreMap":24},[29,25220,25221,25224,25226,25229,25231,25233,25236,25239,25242,25245,25248],{"class":31,"line":32},[29,25222,25223],{"class":309},"HF_USER",[29,25225,355],{"class":305},[29,25227,25228],{"class":309},"$(",[29,25230,25184],{"class":35},[29,25232,25187],{"class":103},[29,25234,25235],{"class":103}," whoami",[29,25237,25238],{"class":305}," |",[29,25240,25241],{"class":35}," head",[29,25243,25244],{"class":39}," -n",[29,25246,25247],{"class":39}," 1",[29,25249,316],{"class":309},[29,25251,25252,25255,25257,25260],{"class":31,"line":43},[29,25253,25254],{"class":39},"echo",[29,25256,9899],{"class":103},[29,25258,25259],{"class":309},"$HF_USER",[29,25261,25262],{"class":103},"\"\n",[171,25264,25265],{},[1638,25266],{"alt":24,"src":25267},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25269,25271],{"id":25270},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[171,25273,25274],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[175,25276,25277,25280],{},[178,25278,25279],{},"Dataset Repo（用于上传演示数据）",[178,25281,25282],{},"Model Repo（用于上传训练后的 ACT 权重）",[171,25284,25285],{},[1638,25286],{"alt":24,"src":25287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[171,25289,25290],{},[1638,25291],{"alt":24,"src":25292},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[171,25294,25295],{},[1638,25296],{"alt":24,"src":25297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[171,25299,25300],{},[1638,25301],{"alt":24,"src":25302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[223,25304,25305],{},"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":24,"searchDepth":43,"depth":43,"links":25307},[25308,25309,25310],{"id":25147,"depth":43,"text":25148},{"id":25212,"depth":43,"text":25213},{"id":25270,"depth":43,"text":25271},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25138,"description":230},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25317,"title":25318,"body":25319,"description":230,"extension":231,"meta":25516,"navigation":233,"path":25517,"seo":25518,"stem":25519,"__hash__":25520},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25320,"toc":25511},[25321,25325,25329,25425,25433,25438,25442,25458,25461,25465,25508],[10,25322,25324],{"id":25323},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25326,25328],{"id":25327},"_61-录制示教数据","6.1 录制示教数据",[19,25330,25332],{"className":21,"code":25331,"language":23,"meta":24,"style":24},"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",[26,25333,25334,25341,25347,25353,25359,25368,25374,25380,25386,25393,25403,25410,25420],{"__ignoreMap":24},[29,25335,25336,25339],{"class":31,"line":32},[29,25337,25338],{"class":35},"lerobot-record",[29,25340,40],{"class":39},[29,25342,25343,25345],{"class":31,"line":43},[29,25344,46],{"class":39},[29,25346,40],{"class":39},[29,25348,25349,25351],{"class":31,"line":51},[29,25350,54],{"class":39},[29,25352,40],{"class":39},[29,25354,25355,25357],{"class":31,"line":59},[29,25356,62],{"class":39},[29,25358,40],{"class":39},[29,25360,25361,25363,25366],{"class":31,"line":67},[29,25362,138],{"class":39},[29,25364,25365],{"class":103},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[29,25367,40],{"class":39},[29,25369,25370,25372],{"class":31,"line":75},[29,25371,70],{"class":39},[29,25373,40],{"class":39},[29,25375,25376,25378],{"class":31,"line":83},[29,25377,78],{"class":39},[29,25379,40],{"class":39},[29,25381,25382,25384],{"class":31,"line":158},[29,25383,161],{"class":39},[29,25385,40],{"class":39},[29,25387,25388,25391],{"class":31,"line":166},[29,25389,25390],{"class":39},"  --display_data=true",[29,25392,40],{"class":39},[29,25394,25395,25398,25401],{"class":31,"line":1505},[29,25396,25397],{"class":39},"  --dataset.repo_id=",[29,25399,25400],{"class":103},"\"Embodied-AI-6\u002Fso101_test\"",[29,25402,40],{"class":39},[29,25404,25405,25408],{"class":31,"line":1788},[29,25406,25407],{"class":39},"  --dataset.num_episodes=10",[29,25409,40],{"class":39},[29,25411,25412,25415,25418],{"class":31,"line":1793},[29,25413,25414],{"class":39},"  --dataset.single_task=",[29,25416,25417],{"class":103},"\"Grab the green cube\"",[29,25419,40],{"class":39},[29,25421,25422],{"class":31,"line":1799},[29,25423,25424],{"class":39},"  --resume=true\n",[175,25426,25427],{},[178,25428,25429,25432],{},[26,25430,25431],{},"--resume=true","：已有同一数据集时继续追加 episode。",[171,25434,25435],{},[1638,25436],{"alt":24,"src":25437},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25439,25441],{"id":25440},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[19,25443,25445],{"className":21,"code":25444,"language":23,"meta":24,"style":24},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[26,25446,25447],{"__ignoreMap":24},[29,25448,25449,25452,25455],{"class":31,"line":32},[29,25450,25451],{"class":35},"rm",[29,25453,25454],{"class":39}," -rf",[29,25456,25457],{"class":103}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[171,25459,25460],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25462,25464],{"id":25463},"_63-回放指定-episode","6.3 回放指定 episode",[19,25466,25468],{"className":21,"code":25467,"language":23,"meta":24,"style":24},"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",[26,25469,25470,25477,25483,25489,25495,25503],{"__ignoreMap":24},[29,25471,25472,25475],{"class":31,"line":32},[29,25473,25474],{"class":35},"lerobot-replay",[29,25476,40],{"class":39},[29,25478,25479,25481],{"class":31,"line":43},[29,25480,46],{"class":39},[29,25482,40],{"class":39},[29,25484,25485,25487],{"class":31,"line":51},[29,25486,54],{"class":39},[29,25488,40],{"class":39},[29,25490,25491,25493],{"class":31,"line":59},[29,25492,62],{"class":39},[29,25494,40],{"class":39},[29,25496,25497,25499,25501],{"class":31,"line":67},[29,25498,25397],{"class":39},[29,25500,25400],{"class":103},[29,25502,40],{"class":39},[29,25504,25505],{"class":31,"line":75},[29,25506,25507],{"class":39},"  --dataset.episode=0\n",[223,25509,25510],{},"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":24,"searchDepth":43,"depth":43,"links":25512},[25513,25514,25515],{"id":25327,"depth":43,"text":25328},{"id":25440,"depth":43,"text":25441},{"id":25463,"depth":43,"text":25464},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25318,"description":230},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25522,"title":25523,"body":25524,"description":230,"extension":231,"meta":25652,"navigation":233,"path":25653,"seo":25654,"stem":25655,"__hash__":25656},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25525,"toc":25650},[25526,25530,25593,25596,25643,25648],[10,25527,25529],{"id":25528},"_7-act-模型训练","7. ACT 模型训练",[19,25531,25533],{"className":21,"code":25532,"language":23,"meta":24,"style":24},"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",[26,25534,25535,25542,25550,25557,25564,25571,25578,25585],{"__ignoreMap":24},[29,25536,25537,25540],{"class":31,"line":32},[29,25538,25539],{"class":35},"lerobot-train",[29,25541,40],{"class":39},[29,25543,25544,25546,25548],{"class":31,"line":43},[29,25545,25397],{"class":39},[29,25547,25400],{"class":103},[29,25549,40],{"class":39},[29,25551,25552,25555],{"class":31,"line":51},[29,25553,25554],{"class":39},"  --policy.type=act",[29,25556,40],{"class":39},[29,25558,25559,25562],{"class":31,"line":59},[29,25560,25561],{"class":39},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[29,25563,40],{"class":39},[29,25565,25566,25569],{"class":31,"line":67},[29,25567,25568],{"class":39},"  --job_name=act_so101_test",[29,25570,40],{"class":39},[29,25572,25573,25576],{"class":31,"line":75},[29,25574,25575],{"class":39},"  --policy.device=cuda",[29,25577,40],{"class":39},[29,25579,25580,25583],{"class":31,"line":83},[29,25581,25582],{"class":39},"  --wandb.enable=false",[29,25584,40],{"class":39},[29,25586,25587,25590],{"class":31,"line":158},[29,25588,25589],{"class":39},"  --policy.repo_id=",[29,25591,25592],{"class":103},"\"Embodied-AI-6\u002Flerobot_new\"\n",[171,25594,25595],{},"参数说明：",[175,25597,25598,25604,25610,25616,25622,25631,25637],{},[178,25599,25600,25603],{},[26,25601,25602],{},"--dataset.repo_id","：训练数据集仓库。",[178,25605,25606,25609],{},[26,25607,25608],{},"--policy.type=act","：策略模型类型为 ACT。",[178,25611,25612,25615],{},[26,25613,25614],{},"--output_dir","：本地训练输出目录。",[178,25617,25618,25621],{},[26,25619,25620],{},"--job_name","：训练任务名称。",[178,25623,25624,25627,25628,199],{},[26,25625,25626],{},"--policy.device","：训练设备（如 ",[26,25629,25630],{},"cuda",[178,25632,25633,25636],{},[26,25634,25635],{},"--wandb.enable","：是否启用 WandB 可视化。",[178,25638,25639,25642],{},[26,25640,25641],{},"--policy.repo_id","：训练后模型推送目标仓库。",[171,25644,25645],{},[1638,25646],{"alt":24,"src":25647},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[223,25649,25510],{},{"title":24,"searchDepth":43,"depth":43,"links":25651},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25523,"description":230},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25658,"title":25659,"body":25660,"description":230,"extension":231,"meta":25747,"navigation":233,"path":25748,"seo":25749,"stem":25750,"__hash__":25751},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25661,"toc":25745},[25662,25665,25668,25735,25743],[10,25663,25659],{"id":25664},"_8-策略部署与自动采集",[171,25666,25667],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[19,25669,25671],{"className":21,"code":25670,"language":23,"meta":24,"style":24},"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",[26,25672,25673,25679,25685,25691,25699,25705,25712,25720,25728],{"__ignoreMap":24},[29,25674,25675,25677],{"class":31,"line":32},[29,25676,25338],{"class":35},[29,25678,40],{"class":39},[29,25680,25681,25683],{"class":31,"line":43},[29,25682,46],{"class":39},[29,25684,40],{"class":39},[29,25686,25687,25689],{"class":31,"line":51},[29,25688,54],{"class":39},[29,25690,40],{"class":39},[29,25692,25693,25695,25697],{"class":31,"line":59},[29,25694,138],{"class":39},[29,25696,25365],{"class":103},[29,25698,40],{"class":39},[29,25700,25701,25703],{"class":31,"line":67},[29,25702,62],{"class":39},[29,25704,40],{"class":39},[29,25706,25707,25710],{"class":31,"line":75},[29,25708,25709],{"class":39},"  --display_data=false",[29,25711,40],{"class":39},[29,25713,25714,25716,25718],{"class":31,"line":83},[29,25715,25397],{"class":39},[29,25717,25400],{"class":103},[29,25719,40],{"class":39},[29,25721,25722,25724,25726],{"class":31,"line":158},[29,25723,25414],{"class":39},[29,25725,25417],{"class":103},[29,25727,40],{"class":39},[29,25729,25730,25733],{"class":31,"line":166},[29,25731,25732],{"class":39},"  --policy.path=",[29,25734,25592],{"class":103},[175,25736,25737],{},[178,25738,25739,25742],{},[26,25740,25741],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[223,25744,25510],{},{"title":24,"searchDepth":43,"depth":43,"links":25746},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25659,"description":230},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25753,"title":25754,"body":25755,"description":230,"extension":231,"meta":25784,"navigation":233,"path":25785,"seo":25786,"stem":25787,"__hash__":25788},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25756,"toc":25782},[25757,25761,25764,25770,25773,25779],[10,25758,25760],{"id":25759},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[171,25762,25763],{},"项目地址：",[171,25765,25766],{},[546,25767,25768],{"href":25768,"rel":25769},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24038],[171,25771,25772],{},"参考教程：",[171,25774,25775],{},[546,25776,25777],{"href":25777,"rel":25778},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24038],[171,25780,25781],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":24,"searchDepth":43,"depth":43,"links":25783},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25754,"description":230},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25790,"title":25791,"body":25792,"description":25796,"extension":231,"meta":25797,"navigation":233,"path":25798,"seo":25799,"stem":25800,"__hash__":25801},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25793,"toc":25794},[],{"title":24,"searchDepth":43,"depth":43,"links":25795},[],"act复现",{"category":23553},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25791,"description":25796},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25803,"title":25804,"body":25805,"description":24,"extension":231,"meta":26107,"navigation":233,"path":26108,"seo":26109,"stem":26110,"__hash__":26111},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25806,"toc":26099},[25807,25810,25814,25824,25831,25838,25841,25848,25851,25854,25858,25870,25874,25920,25923,25926,25929,25932,25935,25939,25977,25983,25987,26041,26046,26049,26052,26057,26060,26065,26068,26071,26075,26078,26081,26085],[10,25808,25804],{"id":25809},"_1简介",[275,25811,25813],{"id":25812},"_11什么是-docker","1.1什么是 Docker？",[171,25815,25816,25817,25820,25821],{},"Docker 是一个开源的 ",[457,25818,25819],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[457,25822,25823],{},"一次构建，到处运行。",[171,25825,25826,25827,25830],{},"“ ",[457,25828,25829],{},"一次构建，到处运行"," ”也就是说：",[259,25832,25833],{},[178,25834,25835],{},[457,25836,25837],{},"之前：",[171,25839,25840],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[259,25842,25843],{},[178,25844,25845],{},[457,25846,25847],{},"使用docker后：",[171,25849,25850],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[171,25852,25853],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[275,25855,25857],{"id":25856},"_12它是怎么工作的","1.2.它是怎么工作的？",[175,25859,25860,25863],{},[178,25861,25862],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[178,25864,25865,25866,25869],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[457,25867,25868],{},"无论在哪运行都一样稳定"," 。",[275,25871,25873],{"id":25872},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[445,25875,25876,25886],{},[448,25877,25878],{},[451,25879,25880,25883],{},[454,25881,25882],{"align":23911},"概念",[454,25884,25885],{"align":23911},"解释",[492,25887,25888,25896,25904,25912],{},[451,25889,25890,25893],{},[497,25891,25892],{"align":23911},"镜像",[497,25894,25895],{"align":23911},"Image，运行容器的模板，像是一个应用快照",[451,25897,25898,25901],{},[497,25899,25900],{"align":23911},"容器",[497,25902,25903],{"align":23911},"Container，运行中的镜像实例，有自己的文件系统、网络等",[451,25905,25906,25909],{},[497,25907,25908],{"align":23911},"Dockerfile",[497,25910,25911],{"align":23911},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[451,25913,25914,25917],{},[497,25915,25916],{"align":23911},"仓库",[497,25918,25919],{"align":23911},"Registry，存放镜像的地方，比如 Docker Hub",[171,25921,25922],{},"抽象化理解:",[171,25924,25925],{},"Docker镜像≈C++类",[171,25927,25928],{},"Docker容器≈C++类实例(即对象)",[171,25930,25931],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[171,25933,25934],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[275,25936,25938],{"id":25937},"_14类比理解","1.4.类比理解",[445,25940,25941,25951],{},[448,25942,25943],{},[451,25944,25945,25948],{},[454,25946,25947],{"align":23911},"传统部署",[454,25949,25950],{"align":23911},"Docker部署",[492,25952,25953,25961,25969],{},[451,25954,25955,25958],{},[497,25956,25957],{"align":23911},"手动安装依赖、调试版本不一致问题",[497,25959,25960],{"align":23911},"一次打包环境和代码",[451,25962,25963,25966],{},[497,25964,25965],{"align":23911},"程序“裸奔”跑在系统上",[497,25967,25968],{"align":23911},"程序“穿着容器”隔离运行",[451,25970,25971,25974],{},[497,25972,25973],{"align":23911},"容易“在我电脑上能跑”",[497,25975,25976],{"align":23911},"保证“无论在哪都能跑”",[171,25978,25979,25980],{},"就像快递包裹： ",[457,25981,25982],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[275,25984,25986],{"id":25985},"_15docker-的核心优势","1.5.Docker 的核心优势",[445,25988,25989,25999],{},[448,25990,25991],{},[451,25992,25993,25996],{},[454,25994,25995],{"align":23911},"优势",[454,25997,25998],{"align":23911},"说明",[492,26000,26001,26009,26017,26025,26033],{},[451,26002,26003,26006],{},[497,26004,26005],{"align":23911},"轻量级",[497,26007,26008],{"align":23911},"基于系统内核共享，启动速度快，占资源少",[451,26010,26011,26014],{},[497,26012,26013],{"align":23911},"跨平台",[497,26015,26016],{"align":23911},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[451,26018,26019,26022],{},[497,26020,26021],{"align":23911},"易于迁移部署",[497,26023,26024],{"align":23911},"应用和环境一起封装，不怕依赖不一致",[451,26026,26027,26030],{},[497,26028,26029],{"align":23911},"易于版本控制",[497,26031,26032],{"align":23911},"镜像版本可控，支持回滚",[451,26034,26035,26038],{},[497,26036,26037],{"align":23911},"生态丰富",[497,26039,26040],{"align":23911},"Docker Hub 上有成千上万的现成镜像可用",[259,26042,26043],{},[178,26044,26045],{},"在Linux上可以几乎实现无性能损失。",[171,26047,26048],{},"docker里的发行版和本机共用Linux内核。",[171,26050,26051],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[259,26053,26054],{},[178,26055,26056],{},"可以快速部署在绝大多数Linux发行版",[171,26058,26059],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[259,26061,26062],{},[178,26063,26064],{},"配置环境简单",[171,26066,26067],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[171,26069,26070],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[259,26072,26073],{},[178,26074,26037],{},[171,26076,26077],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[171,26079,26080],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[275,26082,26084],{"id":26083},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[175,26086,26087,26090,26093,26096],{},[178,26088,26089],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[178,26091,26092],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[178,26094,26095],{},"微服务架构：每个服务一个容器，灵活组合",[178,26097,26098],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":24,"searchDepth":43,"depth":43,"links":26100},[26101,26102,26103,26104,26105,26106],{"id":25812,"depth":51,"text":25813},{"id":25856,"depth":51,"text":25857},{"id":25872,"depth":51,"text":25873},{"id":25937,"depth":51,"text":25938},{"id":25985,"depth":51,"text":25986},{"id":26083,"depth":51,"text":26084},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25804,"description":24},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26113,"title":26114,"body":26115,"description":24,"extension":231,"meta":26848,"navigation":233,"path":26849,"seo":26850,"stem":26851,"__hash__":26852},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26116,"toc":26843},[26117,26120,26124,26127,26130,26136,26142,26146,26155,26158,26215,26218,26269,26272,26355,26358,26395,26399,26410,26423,26430,26433,26513,26516,26566,26569,26592,26596,26603,26606,26622,26628,26631,26647,26653,26656,26672,26686,26692,26712,26718,26721,26733,26739,26742,26756,26762,26765,26785,26790,26793,26796,26800,26803,26806,26809,26816,26819,26822,26825,26830,26835,26840],[10,26118,26114],{"id":26119},"_2安装docker",[275,26121,26123],{"id":26122},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[171,26125,26126],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[171,26128,26129],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[171,26131,26132],{},[546,26133,26134],{"href":26134,"rel":26135},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24038],[171,26137,26138],{},[546,26139,26140],{"href":26140,"rel":26141},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24038],[22173,26143,26145],{"id":26144},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[171,26147,26148,26149,26154],{},"以下内容根据 ",[546,26150,26153],{"href":26151,"rel":26152},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24038],"官方文档"," 修改而来。",[171,26156,26157],{},"如果你过去安装过 docker，先删掉：",[19,26159,26161],{"className":21,"code":26160,"language":23,"meta":24,"style":24},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[26,26162,26163],{"__ignoreMap":24},[29,26164,26165,26167,26170,26173,26176,26179,26182,26185,26188,26191,26194,26197,26200,26203,26206,26209,26212],{"class":31,"line":32},[29,26166,3200],{"class":305},[29,26168,26169],{"class":309}," pkg ",[29,26171,26172],{"class":305},"in",[29,26174,26175],{"class":103}," docker.io",[29,26177,26178],{"class":103}," docker-doc",[29,26180,26181],{"class":103}," docker-compose",[29,26183,26184],{"class":103}," docker-compose-v2",[29,26186,26187],{"class":103}," podman-docker",[29,26189,26190],{"class":103}," containerd",[29,26192,26193],{"class":103}," runc",[29,26195,26196],{"class":309},"; ",[29,26198,26199],{"class":305},"do",[29,26201,26202],{"class":35}," sudo",[29,26204,26205],{"class":103}," apt-get",[29,26207,26208],{"class":103}," remove",[29,26210,26211],{"class":309}," $pkg; ",[29,26213,26214],{"class":305},"done\n",[171,26216,26217],{},"首先安装依赖和GPG：",[19,26219,26223],{"className":26220,"code":26221,"language":26222,"meta":24,"style":24},"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",[26,26224,26225,26230,26235,26240,26245,26250,26255,26259,26264],{"__ignoreMap":24},[29,26226,26227],{"class":31,"line":32},[29,26228,26229],{},"# Add Docker's official GPG key:\n",[29,26231,26232],{"class":31,"line":43},[29,26233,26234],{},"sudo apt-get update\n",[29,26236,26237],{"class":31,"line":51},[29,26238,26239],{},"sudo apt-get install ca-certificates curl\n",[29,26241,26242],{"class":31,"line":59},[29,26243,26244],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[29,26246,26247],{"class":31,"line":67},[29,26248,26249],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[29,26251,26252],{"class":31,"line":75},[29,26253,26254],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[29,26256,26257],{"class":31,"line":83},[29,26258,2575],{"emptyLinePlaceholder":233},[29,26260,26261],{"class":31,"line":158},[29,26262,26263],{},"# 如果上面这行报错就弄下面这行\n",[29,26265,26266],{"class":31,"line":166},[29,26267,26268],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[171,26270,26271],{},"信任 Docker 的 GPG 公钥并添加仓库：",[19,26273,26275],{"className":21,"code":26274,"language":23,"meta":24,"style":24},"# 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",[26,26276,26277,26282,26288,26305,26338],{"__ignoreMap":24},[29,26278,26279],{"class":31,"line":32},[29,26280,26281],{"class":367},"# Add the repository to Apt sources:\n",[29,26283,26284,26286],{"class":31,"line":43},[29,26285,25254],{"class":39},[29,26287,40],{"class":39},[29,26289,26290,26293,26296,26299,26302],{"class":31,"line":51},[29,26291,26292],{"class":103},"  \"deb [arch=$(",[29,26294,26295],{"class":35},"dpkg",[29,26297,26298],{"class":39}," --print-architecture",[29,26300,26301],{"class":103},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[29,26303,26304],{"class":39},"\\\n",[29,26306,26307,26310,26312,26314,26317,26320,26322,26324,26327,26329,26331,26334,26336],{"class":31,"line":59},[29,26308,26309],{"class":103},"  \"",[29,26311,25228],{"class":309},[29,26313,866],{"class":39},[29,26315,26316],{"class":103}," \u002Fetc\u002Fos-release",[29,26318,26319],{"class":309}," && ",[29,26321,25254],{"class":39},[29,26323,9899],{"class":103},[29,26325,26326],{"class":309},"$VERSION_CODENAME",[29,26328,559],{"class":103},[29,26330,737],{"class":309},[29,26332,26333],{"class":103},"\" stable\"",[29,26335,25238],{"class":305},[29,26337,40],{"class":39},[29,26339,26340,26343,26346,26349,26352],{"class":31,"line":67},[29,26341,26342],{"class":35},"  sudo",[29,26344,26345],{"class":103}," tee",[29,26347,26348],{"class":103}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[29,26350,26351],{"class":305}," >",[29,26353,26354],{"class":103}," \u002Fdev\u002Fnull\n",[171,26356,26357],{},"最后安装",[19,26359,26361],{"className":21,"code":26360,"language":23,"meta":24,"style":24},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[26,26362,26363,26372],{"__ignoreMap":24},[29,26364,26365,26367,26369],{"class":31,"line":32},[29,26366,24749],{"class":35},[29,26368,26205],{"class":103},[29,26370,26371],{"class":103}," update\n",[29,26373,26374,26376,26378,26380,26383,26386,26389,26392],{"class":31,"line":43},[29,26375,24749],{"class":35},[29,26377,26205],{"class":103},[29,26379,24007],{"class":103},[29,26381,26382],{"class":103}," docker-ce",[29,26384,26385],{"class":103}," docker-ce-cli",[29,26387,26388],{"class":103}," containerd.io",[29,26390,26391],{"class":103}," docker-buildx-plugin",[29,26393,26394],{"class":103}," docker-compose-plugin\n",[22173,26396,26398],{"id":26397},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[171,26400,26401,26402,26405,26406,26409],{},"查看自己自己包管理工具版本（dnf是 ",[457,26403,26404],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[457,26407,26408],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[19,26411,26413],{"className":21,"code":26412,"language":23,"meta":24,"style":24},"dnf --version\n",[26,26414,26415],{"__ignoreMap":24},[29,26416,26417,26420],{"class":31,"line":32},[29,26418,26419],{"class":35},"dnf",[29,26421,26422],{"class":39}," --version\n",[171,26424,26148,26425,26429],{},[546,26426,26153],{"href":26427,"rel":26428},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24038]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[171,26431,26432],{},"如果你之前安装过 docker，请先删掉",[19,26434,26436],{"className":21,"code":26435,"language":23,"meta":24,"style":24},"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",[26,26437,26438,26452,26459,26466,26473,26480,26487,26494,26501,26508],{"__ignoreMap":24},[29,26439,26440,26442,26445,26447,26450],{"class":31,"line":32},[29,26441,24749],{"class":35},[29,26443,26444],{"class":103}," dnf",[29,26446,26208],{"class":103},[29,26448,26449],{"class":103}," docker",[29,26451,40],{"class":39},[29,26453,26454,26457],{"class":31,"line":43},[29,26455,26456],{"class":103},"                  docker-client",[29,26458,40],{"class":39},[29,26460,26461,26464],{"class":31,"line":51},[29,26462,26463],{"class":103},"                  docker-client-latest",[29,26465,40],{"class":39},[29,26467,26468,26471],{"class":31,"line":59},[29,26469,26470],{"class":103},"                  docker-common",[29,26472,40],{"class":39},[29,26474,26475,26478],{"class":31,"line":67},[29,26476,26477],{"class":103},"                  docker-latest",[29,26479,40],{"class":39},[29,26481,26482,26485],{"class":31,"line":75},[29,26483,26484],{"class":103},"                  docker-latest-logrotate",[29,26486,40],{"class":39},[29,26488,26489,26492],{"class":31,"line":83},[29,26490,26491],{"class":103},"                  docker-logrotate",[29,26493,40],{"class":39},[29,26495,26496,26499],{"class":31,"line":158},[29,26497,26498],{"class":103},"                  docker-selinux",[29,26500,40],{"class":39},[29,26502,26503,26506],{"class":31,"line":166},[29,26504,26505],{"class":103},"                  docker-engine-selinux",[29,26507,40],{"class":39},[29,26509,26510],{"class":31,"line":1505},[29,26511,26512],{"class":103},"                  docker-engine\n",[171,26514,26515],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[19,26517,26519],{"className":21,"code":26518,"language":23,"meta":24,"style":24},"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",[26,26520,26521,26535,26550],{"__ignoreMap":24},[29,26522,26523,26525,26527,26530,26532],{"class":31,"line":32},[29,26524,24749],{"class":35},[29,26526,26444],{"class":103},[29,26528,26529],{"class":39}," -y",[29,26531,24007],{"class":103},[29,26533,26534],{"class":103}," dnf-plugins-core\n",[29,26536,26537,26539,26541,26544,26547],{"class":31,"line":43},[29,26538,24749],{"class":35},[29,26540,26444],{"class":103},[29,26542,26543],{"class":103}," config-manager",[29,26545,26546],{"class":103}," addrepo",[29,26548,26549],{"class":39}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[29,26551,26552,26554,26557,26560,26563],{"class":31,"line":51},[29,26553,24749],{"class":35},[29,26555,26556],{"class":103}," sed",[29,26558,26559],{"class":39}," -i",[29,26561,26562],{"class":103}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[29,26564,26565],{"class":103}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[171,26567,26568],{},"最后安装：",[19,26570,26572],{"className":21,"code":26571,"language":23,"meta":24,"style":24},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[26,26573,26574],{"__ignoreMap":24},[29,26575,26576,26578,26580,26582,26584,26586,26588,26590],{"class":31,"line":32},[29,26577,24749],{"class":35},[29,26579,26444],{"class":103},[29,26581,24007],{"class":103},[29,26583,26382],{"class":103},[29,26585,26385],{"class":103},[29,26587,26388],{"class":103},[29,26589,26391],{"class":103},[29,26591,26394],{"class":103},[275,26593,26595],{"id":26594},"_22配置环境","2.2.配置环境",[22173,26597,26599,26602],{"id":26598},"_221检查-docker-服务状态",[457,26600,26601],{},"2.2.1.检查 Docker 服务状态"," ：",[171,26604,26605],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[19,26607,26609],{"className":21,"code":26608,"language":23,"meta":24,"style":24},"systemctl status docker\n",[26,26610,26611],{"__ignoreMap":24},[29,26612,26613,26616,26619],{"class":31,"line":32},[29,26614,26615],{"class":35},"systemctl",[29,26617,26618],{"class":103}," status",[29,26620,26621],{"class":103}," docker\n",[22173,26623,26625,26602],{"id":26624},"_222启动-docker-服务",[457,26626,26627],{},"2.2.2.启动 Docker 服务",[171,26629,26630],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[19,26632,26634],{"className":21,"code":26633,"language":23,"meta":24,"style":24},"sudo systemctl start docker\n",[26,26635,26636],{"__ignoreMap":24},[29,26637,26638,26640,26643,26645],{"class":31,"line":32},[29,26639,24749],{"class":35},[29,26641,26642],{"class":103}," systemctl",[29,26644,4359],{"class":103},[29,26646,26621],{"class":103},[22173,26648,26650,26602],{"id":26649},"_223设置-docker-开机自启",[457,26651,26652],{},"2.2.3.设置 Docker 开机自启",[171,26654,26655],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[19,26657,26659],{"className":21,"code":26658,"language":23,"meta":24,"style":24},"sudo systemctl enable docker\n",[26,26660,26661],{"__ignoreMap":24},[29,26662,26663,26665,26667,26670],{"class":31,"line":32},[29,26664,24749],{"class":35},[29,26666,26642],{"class":103},[29,26668,26669],{"class":103}," enable",[29,26671,26621],{"class":103},[22173,26673,26675,13970,26678,13970,26683,26602],{"id":26674},"_224将用户添加到-docker-组",[457,26676,26677],{},"2.2.4.将用户添加到",[457,26679,26680],{},[26,26681,26682],{},"docker",[457,26684,26685],{},"组",[171,26687,26688,26689,26691],{},"使用以下命令将当前用户添加到 ",[26,26690,26682],{}," 组：",[19,26693,26695],{"className":21,"code":26694,"language":23,"meta":24,"style":24},"sudo usermod -aG docker $USER\n",[26,26696,26697],{"__ignoreMap":24},[29,26698,26699,26701,26704,26707,26709],{"class":31,"line":32},[29,26700,24749],{"class":35},[29,26702,26703],{"class":103}," usermod",[29,26705,26706],{"class":39}," -aG",[29,26708,26449],{"class":103},[29,26710,26711],{"class":309}," $USER\n",[22173,26713,26715,26602],{"id":26714},"_225退出并重新登录",[457,26716,26717],{},"2.2.5.退出并重新登录",[171,26719,26720],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[19,26722,26724],{"className":21,"code":26723,"language":23,"meta":24,"style":24},"newgrp docker\n",[26,26725,26726],{"__ignoreMap":24},[29,26727,26728,26731],{"class":31,"line":32},[29,26729,26730],{"class":35},"newgrp",[29,26732,26621],{"class":103},[22173,26734,26736,26602],{"id":26735},"_226重新启动-docker-服务如果需要",[457,26737,26738],{},"2.2.6.重新启动 Docker 服务（如果需要）",[171,26740,26741],{},"确保 Docker 服务正在运行，可以使用以下命令：",[19,26743,26744],{"className":21,"code":26633,"language":23,"meta":24,"style":24},[26,26745,26746],{"__ignoreMap":24},[29,26747,26748,26750,26752,26754],{"class":31,"line":32},[29,26749,24749],{"class":35},[29,26751,26642],{"class":103},[29,26753,4359],{"class":103},[29,26755,26621],{"class":103},[22173,26757,26759,26602],{"id":26758},"_227重启电脑后检查-docker-服务状态",[457,26760,26761],{},"2.2.7.重启电脑后检查 Docker 服务状态",[171,26763,26764],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[19,26766,26768],{"className":21,"code":26767,"language":23,"meta":24,"style":24},"sudo reboot\nsystemctl status docker\n",[26,26769,26770,26777],{"__ignoreMap":24},[29,26771,26772,26774],{"class":31,"line":32},[29,26773,24749],{"class":35},[29,26775,26776],{"class":103}," reboot\n",[29,26778,26779,26781,26783],{"class":31,"line":43},[29,26780,26615],{"class":35},[29,26782,26618],{"class":103},[29,26784,26621],{"class":103},[171,26786,26787],{},[1638,26788],{"alt":24,"src":26789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[171,26791,26792],{},"第三行显示enabled说明开机自启动成功",[171,26794,26795],{},"按q退出",[275,26797,26799],{"id":26798},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[171,26801,26802],{},"优先使用linux来使用docker是比较好的",[171,26804,26805],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[171,26807,26808],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[171,26810,26811,26812],{},"官方下载安装:",[546,26813,26814],{"href":26814,"rel":26815},"https:\u002F\u002Fwww.docker.com\u002F",[24038],[171,26817,26818],{},"Windows的Docker显卡直通与USB直通:",[171,26820,26821],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[171,26823,26824],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[171,26826,26827],{},[1638,26828],{"alt":24,"src":26829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[171,26831,26832],{},[1638,26833],{"alt":24,"src":26834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[171,26836,26837],{},[1638,26838],{"alt":24,"src":26839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[223,26841,26842],{},"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":24,"searchDepth":43,"depth":43,"links":26844},[26845,26846,26847],{"id":26122,"depth":51,"text":26123},{"id":26594,"depth":51,"text":26595},{"id":26798,"depth":51,"text":26799},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26114,"description":24},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26854,"title":26855,"body":26856,"description":26863,"extension":231,"meta":27556,"navigation":233,"path":27557,"seo":27558,"stem":27559,"__hash__":27560},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26857,"toc":27550},[26858,26861,26864,26868,26873,26878,26881,26909,26914,26923,26926,26931,26935,26942,26947,26953,26957,26960,26964,26969,27061,27066,27084,27089,27110,27115,27131,27135,27140,27169,27174,27220,27225,27269,27277,27294,27299,27315,27320,27334,27337,27340,27343,27346,27375,27378,27383,27387,27390,27393,27399,27402,27405,27408,27470,27477,27482,27485,27503,27507,27510,27527,27530,27533,27547],[10,26859,26855],{"id":26860},"_3docker直通",[171,26862,26863],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[275,26865,26867],{"id":26866},"_31usb直通","3.1.USB直通",[171,26869,26870],{},[1638,26871],{"alt":24,"src":26872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[259,26874,26875],{},[178,26876,26877],{},"方法一(不是很推荐新手)：",[171,26879,26880],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[19,26882,26884],{"className":21,"code":26883,"language":23,"meta":24,"style":24},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[26,26885,26886,26894,26899],{"__ignoreMap":24},[29,26887,26888,26891],{"class":31,"line":32},[29,26889,26890],{"class":35},"ls",[29,26892,26893],{"class":103}," \u002Fdev\n",[29,26895,26896],{"class":31,"line":43},[29,26897,26898],{"class":367},"#例如\n",[29,26900,26901,26904,26906],{"class":31,"line":51},[29,26902,26903],{"class":309},"--device",[29,26905,355],{"class":305},[29,26907,26908],{"class":103},"\u002Fdev\u002Ftty_USB0\n",[259,26910,26911],{"start":43},[178,26912,26913],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[19,26915,26917],{"className":21,"code":26916,"language":23,"meta":24,"style":24},"--privileged\n",[26,26918,26919],{"__ignoreMap":24},[29,26920,26921],{"class":31,"line":32},[29,26922,26916],{"class":35},[171,26924,26925],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[171,26927,26928],{},[1638,26929],{"alt":24,"src":26930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[275,26932,26934],{"id":26933},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[171,26936,26937,26938,26941],{},"NVIDIA Container Toolkit使用户 ",[457,26939,26940],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[171,26943,26944],{},[1638,26945],{"alt":24,"src":26946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[171,26948,26949],{},[546,26950,26951],{"href":26951,"rel":26952},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24038],[22173,26954,26956],{"id":26955},"_321安装","3.2.1.安装",[171,26958,26959],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23085,26961,26963],{"id":26962},"_3211ubuntu","3.2.1.1.Ubuntu",[259,26965,26966],{},[178,26967,26968],{},"配置存储库 并更新",[19,26970,26972],{"className":21,"code":26971,"language":23,"meta":24,"style":24},"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",[26,26973,26974,27003,27023,27035,27047,27053],{"__ignoreMap":24},[29,26975,26976,26979,26982,26985,26987,26989,26992,26995,26998,27001],{"class":31,"line":32},[29,26977,26978],{"class":35},"curl",[29,26980,26981],{"class":39}," -fsSL",[29,26983,26984],{"class":103}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[29,26986,25238],{"class":305},[29,26988,26202],{"class":35},[29,26990,26991],{"class":103}," gpg",[29,26993,26994],{"class":39}," --dearmor",[29,26996,26997],{"class":39}," -o",[29,26999,27000],{"class":103}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[29,27002,40],{"class":39},[29,27004,27005,27008,27010,27013,27016,27019,27021],{"class":31,"line":43},[29,27006,27007],{"class":309},"  && ",[29,27009,26978],{"class":35},[29,27011,27012],{"class":39}," -s",[29,27014,27015],{"class":39}," -L",[29,27017,27018],{"class":103}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[29,27020,25238],{"class":305},[29,27022,40],{"class":39},[29,27024,27025,27028,27031,27033],{"class":31,"line":51},[29,27026,27027],{"class":35},"    sed",[29,27029,27030],{"class":103}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[29,27032,25238],{"class":305},[29,27034,40],{"class":39},[29,27036,27037,27040,27042,27045],{"class":31,"line":59},[29,27038,27039],{"class":35},"    sudo",[29,27041,26345],{"class":103},[29,27043,27044],{"class":103}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[29,27046,40],{"class":39},[29,27048,27049,27051],{"class":31,"line":67},[29,27050,27007],{"class":309},[29,27052,26304],{"class":39},[29,27054,27055,27057,27059],{"class":31,"line":75},[29,27056,27039],{"class":35},[29,27058,26205],{"class":103},[29,27060,26371],{"class":103},[259,27062,27063],{"start":43},[178,27064,27065],{},"安装nvidia-docker2",[19,27067,27069],{"className":21,"code":27068,"language":23,"meta":24,"style":24},"sudo apt-get install -y nvidia-docker2\n",[26,27070,27071],{"__ignoreMap":24},[29,27072,27073,27075,27077,27079,27081],{"class":31,"line":32},[29,27074,24749],{"class":35},[29,27076,26205],{"class":103},[29,27078,24007],{"class":103},[29,27080,26529],{"class":39},[29,27082,27083],{"class":103}," nvidia-docker2\n",[259,27085,27086],{"start":51},[178,27087,27088],{},"使用nvidia-ctk命令配置container runtime",[19,27090,27092],{"className":21,"code":27091,"language":23,"meta":24,"style":24},"sudo nvidia-ctk runtime configure --runtime=docker\n",[26,27093,27094],{"__ignoreMap":24},[29,27095,27096,27098,27101,27104,27107],{"class":31,"line":32},[29,27097,24749],{"class":35},[29,27099,27100],{"class":103}," nvidia-ctk",[29,27102,27103],{"class":103}," runtime",[29,27105,27106],{"class":103}," configure",[29,27108,27109],{"class":39}," --runtime=docker\n",[259,27111,27112],{"start":59},[178,27113,27114],{},"重启docker服务:",[19,27116,27118],{"className":21,"code":27117,"language":23,"meta":24,"style":24},"sudo systemctl restart docker\n",[26,27119,27120],{"__ignoreMap":24},[29,27121,27122,27124,27126,27129],{"class":31,"line":32},[29,27123,24749],{"class":35},[29,27125,26642],{"class":103},[29,27127,27128],{"class":103}," restart",[29,27130,26621],{"class":103},[23085,27132,27134],{"id":27133},"_3212fedora","3.2.1.2.Fedora",[259,27136,27137],{},[178,27138,27139],{},"配置存储库",[19,27141,27143],{"className":21,"code":27142,"language":23,"meta":24,"style":24},"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",[26,27144,27145,27160],{"__ignoreMap":24},[29,27146,27147,27149,27151,27153,27156,27158],{"class":31,"line":32},[29,27148,26978],{"class":35},[29,27150,27012],{"class":39},[29,27152,27015],{"class":39},[29,27154,27155],{"class":103}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[29,27157,25238],{"class":305},[29,27159,40],{"class":39},[29,27161,27162,27164,27166],{"class":31,"line":43},[29,27163,24749],{"class":35},[29,27165,26345],{"class":103},[29,27167,27168],{"class":103}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[259,27170,27171],{"start":43},[178,27172,27173],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[19,27175,27177],{"className":21,"code":27176,"language":23,"meta":24,"style":24},"# 如果是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",[26,27178,27179,27184,27198,27202,27207],{"__ignoreMap":24},[29,27180,27181],{"class":31,"line":32},[29,27182,27183],{"class":367},"# 如果是RHEL或者Rocky（DNF4）\n",[29,27185,27186,27188,27190,27192,27195],{"class":31,"line":43},[29,27187,24749],{"class":35},[29,27189,26444],{"class":103},[29,27191,26543],{"class":103},[29,27193,27194],{"class":39}," --add-repo",[29,27196,27197],{"class":103}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[29,27199,27200],{"class":31,"line":51},[29,27201,2575],{"emptyLinePlaceholder":233},[29,27203,27204],{"class":31,"line":59},[29,27205,27206],{"class":367},"# 如果是Feodra41+（DNF5）\n",[29,27208,27209,27211,27213,27215,27217],{"class":31,"line":67},[29,27210,24749],{"class":35},[29,27212,26444],{"class":103},[29,27214,26543],{"class":103},[29,27216,26546],{"class":103},[29,27218,27219],{"class":39}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[259,27221,27222],{"start":51},[178,27223,27224],{},"安装NVIDIA Container Toolki包",[19,27226,27228],{"className":21,"code":27227,"language":23,"meta":24,"style":24},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[26,27229,27230,27235,27248,27252,27257],{"__ignoreMap":24},[29,27231,27232],{"class":31,"line":32},[29,27233,27234],{"class":367},"# 如果是RHEL或者Rocky\n",[29,27236,27237,27239,27241,27243,27245],{"class":31,"line":43},[29,27238,24749],{"class":35},[29,27240,26444],{"class":103},[29,27242,24007],{"class":103},[29,27244,26529],{"class":39},[29,27246,27247],{"class":103}," nvidia-container-toolkit\n",[29,27249,27250],{"class":31,"line":51},[29,27251,2575],{"emptyLinePlaceholder":233},[29,27253,27254],{"class":31,"line":59},[29,27255,27256],{"class":367},"# 如果是Fedora\n",[29,27258,27259,27261,27263,27265,27267],{"class":31,"line":67},[29,27260,24749],{"class":35},[29,27262,26444],{"class":103},[29,27264,24007],{"class":103},[29,27266,26529],{"class":39},[29,27268,27247],{"class":103},[259,27270,27271],{"start":59},[178,27272,27273,27274,27276],{},"安装nvidia-docker2 ： 在Fedora上使用",[26,27275,26419],{},"进行安装",[19,27278,27280],{"className":21,"code":27279,"language":23,"meta":24,"style":24},"sudo dnf install -y nvidia-docker2\n",[26,27281,27282],{"__ignoreMap":24},[29,27283,27284,27286,27288,27290,27292],{"class":31,"line":32},[29,27285,24749],{"class":35},[29,27287,26444],{"class":103},[29,27289,24007],{"class":103},[29,27291,26529],{"class":39},[29,27293,27083],{"class":103},[259,27295,27296],{"start":67},[178,27297,27298],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[19,27300,27301],{"className":21,"code":27091,"language":23,"meta":24,"style":24},[26,27302,27303],{"__ignoreMap":24},[29,27304,27305,27307,27309,27311,27313],{"class":31,"line":32},[29,27306,24749],{"class":35},[29,27308,27100],{"class":103},[29,27310,27103],{"class":103},[29,27312,27106],{"class":103},[29,27314,27109],{"class":39},[259,27316,27317],{"start":75},[178,27318,27319],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[19,27321,27322],{"className":21,"code":27117,"language":23,"meta":24,"style":24},[26,27323,27324],{"__ignoreMap":24},[29,27325,27326,27328,27330,27332],{"class":31,"line":32},[29,27327,24749],{"class":35},[29,27329,26642],{"class":103},[29,27331,27128],{"class":103},[29,27333,26621],{"class":103},[171,27335,27336],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[171,27338,27339],{},"方法：",[171,27341,27342],{},"1️⃣nvidia-smi",[171,27344,27345],{},"2️⃣运行nvidia cuda 容器进行测试",[19,27347,27349],{"className":21,"code":27348,"language":23,"meta":24,"style":24},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[26,27350,27351],{"__ignoreMap":24},[29,27352,27353,27355,27357,27360,27363,27366,27369,27372],{"class":31,"line":32},[29,27354,24749],{"class":35},[29,27356,26449],{"class":103},[29,27358,27359],{"class":103}," run",[29,27361,27362],{"class":39}," --rm",[29,27364,27365],{"class":39}," --gpus",[29,27367,27368],{"class":103}," all",[29,27370,27371],{"class":103}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[29,27373,27374],{"class":103}," nvidia-smi\n",[171,27376,27377],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[171,27379,27380],{},[1638,27381],{"alt":24,"src":27382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[275,27384,27386],{"id":27385},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[171,27388,27389],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[171,27391,27392],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[171,27394,27395],{},[546,27396,27397],{"href":27397,"rel":27398},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24038],[171,27400,27401],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[171,27403,27404],{},"我们只需要找到对应的Docker镜像当底包即可。",[171,27406,27407],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[445,27409,27410,27426],{},[448,27411,27412],{},[451,27413,27414,27417,27420,27423],{},[454,27415,27416],{"align":23911},"镜像类型",[454,27418,27419],{"align":23911},"适用场景",[454,27421,27422],{"align":23911},"示例标签",[454,27424,27425],{"align":23911},"大小",[492,27427,27428,27442,27456],{},[451,27429,27430,27433,27436,27439],{},[497,27431,27432],{"align":23911},"base",[497,27434,27435],{"align":23911},"仅需 CUDA 运行时库",[497,27437,27438],{"align":23911},"12.4.0-base-ubuntu22.04",[497,27440,27441],{"align":23911},"~240MB",[451,27443,27444,27447,27450,27453],{},[497,27445,27446],{"align":23911},"runtime",[497,27448,27449],{"align":23911},"部署编译后的应用（含数学库）",[497,27451,27452],{"align":23911},"12.4.0-runtime-ubuntu22.04",[497,27454,27455],{"align":23911},"~2GB",[451,27457,27458,27461,27464,27467],{},[497,27459,27460],{"align":23911},"devel",[497,27462,27463],{"align":23911},"开发环境（含编译工具）",[497,27465,27466],{"align":23911},"12.4.0-devel-ubuntu22.04",[497,27468,27469],{"align":23911},"~3GB",[171,27471,27472,27473,27476],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[26,27474,27475],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[171,27478,27479],{},[1638,27480],{"alt":24,"src":27481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[171,27483,27484],{},"在dockerfile里就可以开头这么写：",[19,27486,27488],{"className":21,"code":27487,"language":23,"meta":24,"style":24},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[26,27489,27490,27495],{"__ignoreMap":24},[29,27491,27492],{"class":31,"line":32},[29,27493,27494],{"class":367},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[29,27496,27497,27500],{"class":31,"line":43},[29,27498,27499],{"class":35},"FROM",[29,27501,27502],{"class":103}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[275,27504,27506],{"id":27505},"_34配置以太网","3.4.配置以太网",[171,27508,27509],{},"指定网络模式",[19,27511,27513],{"className":21,"code":27512,"language":23,"meta":24,"style":24},"--net=host \\\n",[26,27514,27515],{"__ignoreMap":24},[29,27516,27517,27520,27522,27525],{"class":31,"line":32},[29,27518,27519],{"class":309},"--net",[29,27521,355],{"class":305},[29,27523,27524],{"class":103},"host",[29,27526,40],{"class":35},[171,27528,27529],{},"启动参数里加上这行即可。具体在下方",[171,27531,27532],{},"--net选项：指定网络模式，该选项有以下参数可选：",[175,27534,27535,27538,27541,27544],{},[178,27536,27537],{},"--net=bridge:默认选项，表示连接到默认的网桥",[178,27539,27540],{},"--net=host:容器使用宿主机的网络",[178,27542,27543],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[178,27545,27546],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[223,27548,27549],{},"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":24,"searchDepth":43,"depth":43,"links":27551},[27552,27553,27554,27555],{"id":26866,"depth":51,"text":26867},{"id":26933,"depth":51,"text":26934},{"id":27385,"depth":51,"text":27386},{"id":27505,"depth":51,"text":27506},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26855,"description":26863},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27562,"title":27563,"body":27564,"description":27571,"extension":231,"meta":27577,"navigation":233,"path":27578,"seo":27579,"stem":27580,"__hash__":27581},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27565,"toc":27575},[27566,27569,27572],[10,27567,27563],{"id":27568},"_4dockerhub换源",[171,27570,27571],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[171,27573,27574],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":24,"searchDepth":43,"depth":43,"links":27576},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27563,"description":27571},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27583,"title":27584,"body":27585,"description":24,"extension":231,"meta":28597,"navigation":233,"path":28598,"seo":28599,"stem":28600,"__hash__":28601},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27586,"toc":28592},[27587,27590,27594,27600,27604,27607,27947,27950,27953,27956,27961,27966,27969,27972,27975,27978,27997,28000,28011,28017,28199,28209,28225,28488,28490,28515,28530,28539,28589],[10,27588,27584],{"id":27589},"_5docker命令学习",[275,27591,27593],{"id":27592},"_51参考文档","5.1.参考文档",[171,27595,27596],{},[546,27597,27598],{"href":27598,"rel":27599},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24038],[275,27601,27603],{"id":27602},"_52常用命令","5.2.常用命令",[171,27605,27606],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[445,27608,27609,27622],{},[448,27610,27611],{},[451,27612,27613,27616,27619],{},[454,27614,27615],{"align":23911},"命令",[454,27617,27618],{"align":23911},"描述",[454,27620,27621],{"align":23911},"示例",[492,27623,27624,27635,27646,27657,27668,27679,27690,27701,27711,27722,27733,27744,27754,27765,27776,27787,27797,27807,27817,27827,27838,27849,27860,27871,27882,27893,27903,27914,27925,27936],{},[451,27625,27626,27629,27632],{},[497,27627,27628],{"align":23911},"docker run",[497,27630,27631],{"align":23911},"创建并启动一个新的容器。",[497,27633,27634],{"align":23911},"docker run -it ubuntu bash",[451,27636,27637,27640,27643],{},[497,27638,27639],{"align":23911},"docker build",[497,27641,27642],{"align":23911},"通过指定的 Dockerfile 创建一个新的镜像。",[497,27644,27645],{"align":23911},"docker build -t myimage .",[451,27647,27648,27651,27654],{},[497,27649,27650],{"align":23911},"docker pull",[497,27652,27653],{"align":23911},"从 Docker 仓库拉取镜像。",[497,27655,27656],{"align":23911},"docker pull ubuntu",[451,27658,27659,27662,27665],{},[497,27660,27661],{"align":23911},"docker push",[497,27663,27664],{"align":23911},"将本地镜像推送到 Docker 仓库。",[497,27666,27667],{"align":23911},"docker push myimage",[451,27669,27670,27673,27676],{},[497,27671,27672],{"align":23911},"docker stop",[497,27674,27675],{"align":23911},"停止一个正在运行的容器。",[497,27677,27678],{"align":23911},"docker stop container_id",[451,27680,27681,27684,27687],{},[497,27682,27683],{"align":23911},"docker start",[497,27685,27686],{"align":23911},"启动一个已经存在的容器。",[497,27688,27689],{"align":23911},"docker start container_id",[451,27691,27692,27695,27698],{},[497,27693,27694],{"align":23911},"docker restart",[497,27696,27697],{"align":23911},"重新启动容器。",[497,27699,27700],{"align":23911},"docker restart container_id",[451,27702,27703,27706,27709],{},[497,27704,27705],{"align":23911},"docker ps",[497,27707,27708],{"align":23911},"列出当前正在运行的容器。",[497,27710,27705],{"align":23911},[451,27712,27713,27716,27719],{},[497,27714,27715],{"align":23911},"docker rm",[497,27717,27718],{"align":23911},"删除一个或多个停止的容器。",[497,27720,27721],{"align":23911},"docker rm container_id",[451,27723,27724,27727,27730],{},[497,27725,27726],{"align":23911},"docker exec",[497,27728,27729],{"align":23911},"在一个正在运行的容器中执行命令。",[497,27731,27732],{"align":23911},"docker exec -it container_id bash",[451,27734,27735,27738,27741],{},[497,27736,27737],{"align":23911},"docker logs",[497,27739,27740],{"align":23911},"查看容器的日志输出。",[497,27742,27743],{"align":23911},"docker logs container_id",[451,27745,27746,27749,27752],{},[497,27747,27748],{"align":23911},"docker images",[497,27750,27751],{"align":23911},"列出本地所有镜像。",[497,27753,27748],{"align":23911},[451,27755,27756,27759,27762],{},[497,27757,27758],{"align":23911},"docker rmi",[497,27760,27761],{"align":23911},"删除一个或多个镜像。",[497,27763,27764],{"align":23911},"docker rmi myimage",[451,27766,27767,27770,27773],{},[497,27768,27769],{"align":23911},"docker network",[497,27771,27772],{"align":23911},"管理 Docker 网络。",[497,27774,27775],{"align":23911},"docker network ls",[451,27777,27778,27781,27784],{},[497,27779,27780],{"align":23911},"docker volume",[497,27782,27783],{"align":23911},"管理 Docker 数据卷。",[497,27785,27786],{"align":23911},"docker volume ls",[451,27788,27789,27792,27795],{},[497,27790,27791],{"align":23911},"docker-compose up",[497,27793,27794],{"align":23911},"启动 docker-compose.yml 中定义的所有服务。",[497,27796,27791],{"align":23911},[451,27798,27799,27802,27805],{},[497,27800,27801],{"align":23911},"docker-compose down",[497,27803,27804],{"align":23911},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[497,27806,27801],{"align":23911},[451,27808,27809,27812,27815],{},[497,27810,27811],{"align":23911},"docker info",[497,27813,27814],{"align":23911},"显示 Docker 系统的详细信息。",[497,27816,27811],{"align":23911},[451,27818,27819,27822,27825],{},[497,27820,27821],{"align":23911},"docker stats",[497,27823,27824],{"align":23911},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[497,27826,27821],{"align":23911},[451,27828,27829,27832,27835],{},[497,27830,27831],{"align":23911},"docker inspect",[497,27833,27834],{"align":23911},"查看容器或镜像的详细信息（JSON 格式）。",[497,27836,27837],{"align":23911},"docker inspect container_id",[451,27839,27840,27843,27846],{},[497,27841,27842],{"align":23911},"docker save",[497,27844,27845],{"align":23911},"将一个镜像保存为 tar 文件。",[497,27847,27848],{"align":23911},"docker save -o myimage.tar myimage",[451,27850,27851,27854,27857],{},[497,27852,27853],{"align":23911},"docker load",[497,27855,27856],{"align":23911},"从 tar 文件中加载镜像。",[497,27858,27859],{"align":23911},"docker load -i myimage.tar",[451,27861,27862,27865,27868],{},[497,27863,27864],{"align":23911},"docker tag",[497,27866,27867],{"align":23911},"为镜像添加标签（tag）。",[497,27869,27870],{"align":23911},"docker tag myimage myimage:v1",[451,27872,27873,27876,27879],{},[497,27874,27875],{"align":23911},"docker buildx build",[497,27877,27878],{"align":23911},"使用 Buildx 构建多架构镜像。",[497,27880,27881],{"align":23911},"docker buildx build -t myimage .",[451,27883,27884,27887,27890],{},[497,27885,27886],{"align":23911},"docker buildx create",[497,27888,27889],{"align":23911},"创建一个新的 Buildx 构建实例。",[497,27891,27892],{"align":23911},"docker buildx create –use",[451,27894,27895,27898,27901],{},[497,27896,27897],{"align":23911},"docker buildx ls",[497,27899,27900],{"align":23911},"列出所有可用的 Buildx 构建实例。",[497,27902,27897],{"align":23911},[451,27904,27905,27908,27911],{},[497,27906,27907],{"align":23911},"docker buildx use",[497,27909,27910],{"align":23911},"设置当前的 Buildx 构建实例。",[497,27912,27913],{"align":23911},"docker buildx use mybuilder",[451,27915,27916,27919,27922],{},[497,27917,27918],{"align":23911},"docker buildx bake",[497,27920,27921],{"align":23911},"使用 Bake 文件批量构建镜像。",[497,27923,27924],{"align":23911},"docker buildx bake -f bake.hcl",[451,27926,27927,27930,27933],{},[497,27928,27929],{"align":23911},"docker buildx build –push",[497,27931,27932],{"align":23911},"构建镜像并推送到镜像仓库。",[497,27934,27935],{"align":23911},"docker buildx build –push -t myimage .",[451,27937,27938,27941,27944],{},[497,27939,27940],{"align":23911},"docker buildx build –platform",[497,27942,27943],{"align":23911},"构建镜像并为多个平台生成支持。",[497,27945,27946],{"align":23911},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[171,27948,27949],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[171,27951,27952],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[171,27954,27955],{},"docker images 可以查看已经下载的镜像",[171,27957,27958],{},[1638,27959],{"alt":24,"src":27960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[171,27962,27963],{},[457,27964,27965],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[171,27967,27968],{},"docker rmi $(docker images -q) 删除所有的镜像",[171,27970,27971],{},"docker container logs 查看容器日志",[171,27973,27974],{},"docker top 查看容器里的进程",[171,27976,27977],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[19,27979,27981],{"className":21,"code":27980,"language":23,"meta":24,"style":24},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[26,27982,27983],{"__ignoreMap":24},[29,27984,27985,27988,27991,27994],{"class":31,"line":32},[29,27986,27987],{"class":35},"如：docker",[29,27989,27990],{"class":103}," cp",[29,27992,27993],{"class":103}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[29,27995,27996],{"class":103}," \u002Fmydata\u002Fnginx\n",[171,27998,27999],{},"docker run时在启动容器的时候会有几个常用的选项：",[175,28001,28002,28005,28008],{},[178,28003,28004],{},"-d选项：表示后台运行",[178,28006,28007],{},"-P选项：随机端口映射",[178,28009,28010],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[275,28012,28014],{"id":28013},"_53run命令的参数非常重要",[457,28015,28016],{},"5.3.run命令的参数（非常重要）",[445,28018,28019,28032],{},[448,28020,28021],{},[451,28022,28023,28026,28029],{},[454,28024,28025],{"align":23911},"参数\u002F配置",[454,28027,28028],{"align":23911},"功能说明",[454,28030,28031],{"align":23911},"重要性与参考依据",[492,28033,28034,28045,28056,28067,28078,28089,28100,28111,28122,28133,28144,28155,28166,28177,28188],{},[451,28035,28036,28039,28042],{},[497,28037,28038],{"align":23911},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[497,28040,28041],{"align":23911},"指定容器名称，便于后续管理",[497,28043,28044],{"align":23911},"替代随机生成的容器名。",[451,28046,28047,28050,28053],{},[497,28048,28049],{"align":23911},"–gpus all",[497,28051,28052],{"align":23911},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[497,28054,28055],{"align":23911},"用于CUDA加速等GPU依赖任务。",[451,28057,28058,28061,28064],{},[497,28059,28060],{"align":23911},"-e NVIDIA_DRIVER_CAPABILITIES=all",[497,28062,28063],{"align":23911},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[497,28065,28066],{"align":23911},"确保容器内GPU功能完整67。",[451,28068,28069,28072,28075],{},[497,28070,28071],{"align":23911},"-dit",[497,28073,28074],{"align":23911},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[497,28076,28077],{"align":23911},"允许容器在后台运行并支持交互操作。",[451,28079,28080,28083,28086],{},[497,28081,28082],{"align":23911},"–privileged",[497,28084,28085],{"align":23911},"赋予容器完全主机权限（可访问设备、内核模块等）",[497,28087,28088],{"align":23911},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[451,28090,28091,28094,28097],{},[497,28092,28093],{"align":23911},"–net=host",[497,28095,28096],{"align":23911},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[497,28098,28099],{"align":23911},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[451,28101,28102,28105,28108],{},[497,28103,28104],{"align":23911},"–group-add audio–group-add video–group-add dialout",[497,28106,28107],{"align":23911},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[497,28109,28110],{"align":23911},"避免权限问题（如避免无法调用摄像头、麦克风）。",[451,28112,28113,28116,28119],{},[497,28114,28115],{"align":23911},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[497,28117,28118],{"align":23911},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[497,28120,28121],{"align":23911},"支持容器内运行图形界面应用（如OpenCV可视化）。",[451,28123,28124,28127,28130],{},[497,28125,28126],{"align":23911},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[497,28128,28129],{"align":23911},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[497,28131,28132],{"align":23911},"实现容器内图形显示。",[451,28134,28135,28138,28141],{},[497,28136,28137],{"align":23911},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[497,28139,28140],{"align":23911},"挂载X11认证文件（只读）",[497,28142,28143],{"align":23911},"确保容器有权连接宿主机显示服务。",[451,28145,28146,28149,28152],{},[497,28147,28148],{"align":23911},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[497,28150,28151],{"align":23911},"挂载Wayland显示协议相关目录",[497,28153,28154],{"align":23911},"支持Wayland协议的图形显示。",[451,28156,28157,28160,28163],{},[497,28158,28159],{"align":23911},"–ulimit nofile=1024:524288",[497,28161,28162],{"align":23911},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[497,28164,28165],{"align":23911},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[451,28167,28168,28171,28174],{},[497,28169,28170],{"align":23911},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[497,28172,28173],{"align":23911},"挂载宿主机用户目录到容器内同名路径",[497,28175,28176],{"align":23911},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[451,28178,28179,28182,28185],{},[497,28180,28181],{"align":23911},"-w \u002Fhome\u002Ftungchiahui",[497,28183,28184],{"align":23911},"设置容器启动后的默认工作目录",[497,28186,28187],{"align":23911},"直接进入项目路径，方便执行命令2324。",[451,28189,28190,28193,28196],{},[497,28191,28192],{"align":23911},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[497,28194,28195],{"align":23911},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[497,28197,28198],{"align":23911},"提供预配置的深度学习与机器人开发环境。",[171,28200,28201,28202,28204,28205,28208],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[26,28203,24749],{},"加不加",[26,28206,28207],{},"sudo -E","都无所谓。",[171,28210,28211,28212,28214,28215,28217,28218,28221,28222,28224],{},"用户已经被加到docker组了，不用",[26,28213,24749],{},"也行跑，其次，",[26,28216,24749],{},"运行的话，你的",[26,28219,28220],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[26,28223,28220],{},"更不可能变了。",[19,28226,28228],{"className":21,"code":28227,"language":23,"meta":24,"style":24},"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",[26,28229,28230,28243,28253,28263,28275,28282,28289,28296,28306,28315,28324,28338,28350,28362,28371,28381,28390,28405,28438,28465,28476,28483],{"__ignoreMap":24},[29,28231,28232,28234,28236,28238,28241],{"class":31,"line":32},[29,28233,24749],{"class":35},[29,28235,26449],{"class":103},[29,28237,27359],{"class":103},[29,28239,28240],{"class":39}," --name=ros_opencv_cuda",[29,28242,40],{"class":39},[29,28244,28245,28248,28251],{"class":31,"line":43},[29,28246,28247],{"class":309},"--gpus ",[29,28249,28250],{"class":103},"all",[29,28252,40],{"class":39},[29,28254,28255,28258,28261],{"class":31,"line":51},[29,28256,28257],{"class":309},"-e ",[29,28259,28260],{"class":103},"NVIDIA_DRIVER_CAPABILITIES=all",[29,28262,40],{"class":39},[29,28264,28265,28267,28270,28273],{"class":31,"line":59},[29,28266,28257],{"class":309},[29,28268,28269],{"class":103},"DISPLAY=",[29,28271,28272],{"class":309},"$DISPLAY ",[29,28274,26304],{"class":39},[29,28276,28277,28280],{"class":31,"line":67},[29,28278,28279],{"class":309},"-dit ",[29,28281,26304],{"class":39},[29,28283,28284,28287],{"class":31,"line":75},[29,28285,28286],{"class":309},"--privileged ",[29,28288,26304],{"class":39},[29,28290,28291,28294],{"class":31,"line":83},[29,28292,28293],{"class":309},"--net=host ",[29,28295,26304],{"class":39},[29,28297,28298,28301,28304],{"class":31,"line":158},[29,28299,28300],{"class":309},"--group-add ",[29,28302,28303],{"class":103},"audio",[29,28305,40],{"class":39},[29,28307,28308,28310,28313],{"class":31,"line":166},[29,28309,28300],{"class":309},[29,28311,28312],{"class":103},"video",[29,28314,40],{"class":39},[29,28316,28317,28319,28322],{"class":31,"line":1505},[29,28318,28300],{"class":309},[29,28320,28321],{"class":103},"dialout",[29,28323,40],{"class":39},[29,28325,28326,28328,28331,28333,28336],{"class":31,"line":1788},[29,28327,28257],{"class":309},[29,28329,28330],{"class":103},"XAUTHORITY=",[29,28332,28220],{"class":309},[29,28334,28335],{"class":103},"\u002F.Xauthority",[29,28337,40],{"class":39},[29,28339,28340,28342,28345,28348],{"class":31,"line":1793},[29,28341,28257],{"class":309},[29,28343,28344],{"class":103},"WAYLAND_DISPLAY=",[29,28346,28347],{"class":309},"$WAYLAND_DISPLAY ",[29,28349,26304],{"class":39},[29,28351,28352,28354,28357,28360],{"class":31,"line":1799},[29,28353,28257],{"class":309},[29,28355,28356],{"class":103},"XDG_RUNTIME_DIR=",[29,28358,28359],{"class":309},"$XDG_RUNTIME_DIR ",[29,28361,26304],{"class":39},[29,28363,28364,28366,28369],{"class":31,"line":1804},[29,28365,28257],{"class":309},[29,28367,28368],{"class":103},"QT_QPA_PLATFORM=xcb",[29,28370,40],{"class":39},[29,28372,28373,28376,28379],{"class":31,"line":1818},[29,28374,28375],{"class":309},"-v ",[29,28377,28378],{"class":103},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[29,28380,40],{"class":39},[29,28382,28383,28385,28388],{"class":31,"line":1823},[29,28384,28375],{"class":309},[29,28386,28387],{"class":103},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[29,28389,40],{"class":39},[29,28391,28392,28395,28398,28400,28403],{"class":31,"line":1829},[29,28393,28394],{"class":309},"-v $HOME",[29,28396,28397],{"class":103},"\u002F.Xauthority:",[29,28399,28220],{"class":309},[29,28401,28402],{"class":103},"\u002F.Xauthority:ro",[29,28404,40],{"class":39},[29,28406,28407,28409,28412,28414,28417,28420,28422,28425,28427,28429,28431,28433,28436],{"class":31,"line":1850},[29,28408,28375],{"class":309},[29,28410,28411],{"class":103},"\u002Frun\u002Fuser\u002F",[29,28413,25228],{"class":309},[29,28415,28416],{"class":35},"id",[29,28418,28419],{"class":39}," -u",[29,28421,737],{"class":309},[29,28423,28424],{"class":103},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[29,28426,25228],{"class":309},[29,28428,28416],{"class":35},[29,28430,28419],{"class":39},[29,28432,737],{"class":309},[29,28434,28435],{"class":103},"\u002Fwayland-0",[29,28437,40],{"class":39},[29,28439,28440,28442,28444,28446,28448,28450,28452,28455,28457,28459,28461,28463],{"class":31,"line":1855},[29,28441,28375],{"class":309},[29,28443,28411],{"class":103},[29,28445,25228],{"class":309},[29,28447,28416],{"class":35},[29,28449,28419],{"class":39},[29,28451,737],{"class":309},[29,28453,28454],{"class":103},":\u002Frun\u002Fuser\u002F",[29,28456,25228],{"class":309},[29,28458,28416],{"class":35},[29,28460,28419],{"class":39},[29,28462,13889],{"class":309},[29,28464,26304],{"class":39},[29,28466,28467,28469,28471,28474],{"class":31,"line":1869},[29,28468,28394],{"class":309},[29,28470,1167],{"class":103},[29,28472,28473],{"class":309},"$HOME ",[29,28475,26304],{"class":39},[29,28477,28478,28481],{"class":31,"line":1874},[29,28479,28480],{"class":309},"-w $HOME ",[29,28482,26304],{"class":39},[29,28484,28485],{"class":31,"line":1903},[29,28486,28487],{"class":309},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[171,28489,9200],{},[259,28491,28492,28500,28503,28506],{},[178,28493,28494,13970,28496,28499],{},[26,28495,28260],{},[26,28497,28498],{},"--gpus all","没有英伟达显卡请注释。",[178,28501,28502],{},"--name后面请自己为容器起名。",[178,28504,28505],{},"最后一行仓库名称请你自己找对应的镜像填上。",[178,28507,28508,28509,28514],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23728,28510,28511],{},[457,28512,28513],{},"请不要加","。",[19,28516,28518],{"className":21,"code":28517,"language":23,"meta":24,"style":24},"--ulimit nofile=1024:524288 \\\n",[26,28519,28520],{"__ignoreMap":24},[29,28521,28522,28525,28528],{"class":31,"line":32},[29,28523,28524],{"class":35},"--ulimit",[29,28526,28527],{"class":103}," nofile=1024:524288",[29,28529,40],{"class":39},[171,28531,28532,28533,28538],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23728,28534,28535],{},[457,28536,28537],{},"不建议","**.**",[19,28540,28542],{"className":21,"code":28541,"language":23,"meta":24,"style":24},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[26,28543,28544,28571,28580],{"__ignoreMap":24},[29,28545,28546,28549,28552,28554,28556,28558,28560,28562,28564,28567,28569],{"class":31,"line":32},[29,28547,28548],{"class":35},"--user",[29,28550,28551],{"class":309}," $(",[29,28553,28416],{"class":35},[29,28555,28419],{"class":39},[29,28557,737],{"class":309},[29,28559,1167],{"class":103},[29,28561,25228],{"class":309},[29,28563,28416],{"class":35},[29,28565,28566],{"class":39}," -g",[29,28568,13889],{"class":309},[29,28570,26304],{"class":39},[29,28572,28573,28575,28578],{"class":31,"line":43},[29,28574,28375],{"class":309},[29,28576,28577],{"class":103},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[29,28579,40],{"class":39},[29,28581,28582,28584,28587],{"class":31,"line":51},[29,28583,28375],{"class":309},[29,28585,28586],{"class":103},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[29,28588,40],{"class":39},[223,28590,28591],{},"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":24,"searchDepth":43,"depth":43,"links":28593},[28594,28595,28596],{"id":27592,"depth":51,"text":27593},{"id":27602,"depth":51,"text":27603},{"id":28013,"depth":51,"text":28016},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27584,"description":24},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28603,"title":28604,"body":28605,"description":24,"extension":231,"meta":30228,"navigation":233,"path":30229,"seo":30230,"stem":30231,"__hash__":30232},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28606,"toc":30223},[28607,28610,28614,28617,28839,28843,28847,28850,28956,28961,28964,28969,28972,28977,28980,28985,28988,29000,29003,29008,29015,29043,29050,29126,29131,29134,29157,29159,29234,29239,29242,29246,29254,29259,29264,29268,29279,29285,29288,29291,29315,29318,29321,29349,29352,29355,29820,29823,29828,29833,29837,29860,29865,29869,29873,29876,29879,29882,29909,29912,29915,29933,29936,29939,29961,29969,29974,29979,29983,29986,29989,29992,29995,30040,30043,30061,30064,30069,30072,30093,30096,30152,30155,30160,30164,30167,30174,30177,30180,30185,30188,30204,30207,30220],[10,28608,28604],{"id":28609},"_6手动创建docker镜像",[275,28611,28613],{"id":28612},"_61dockerfile","6.1.DockerFile",[171,28615,28616],{},"常用命令：",[445,28618,28619,28630],{},[448,28620,28621],{},[451,28622,28623,28626,28628],{},[454,28624,28625],{"align":23911},"指令",[454,28627,25998],{"align":23911},[454,28629,27621],{"align":23911},[492,28631,28632,28642,28658,28669,28680,28691,28702,28713,28724,28738,28752,28763,28777,28788,28799,28813,28828],{},[451,28633,28634,28636,28639],{},[497,28635,27499],{"align":23911},[497,28637,28638],{"align":23911},"指定基础镜像，是 Dockerfile 的起点",[497,28640,28641],{"align":23911},"FROM ubuntu:22.04",[451,28643,28644,28647,28650],{},[497,28645,28646],{"align":23911},"LABEL",[497,28648,28649],{"align":23911},"添加元数据（如作者、版本等）",[497,28651,28652,28653,28657],{"align":23911},"LABEL maintainer=”",[546,28654,28656],{"href":28655},"mailto:you@example.com","you@example.com","”",[451,28659,28660,28663,28666],{},[497,28661,28662],{"align":23911},"ENV",[497,28664,28665],{"align":23911},"设置环境变量",[497,28667,28668],{"align":23911},"ENV PORT=8080",[451,28670,28671,28674,28677],{},[497,28672,28673],{"align":23911},"ARG",[497,28675,28676],{"align":23911},"构建参数，只在构建期间可用",[497,28678,28679],{"align":23911},"ARG VERSION=1.0",[451,28681,28682,28685,28688],{},[497,28683,28684],{"align":23911},"RUN",[497,28686,28687],{"align":23911},"构建镜像时运行命令",[497,28689,28690],{"align":23911},"RUN apt-get update && apt-get install -y curl",[451,28692,28693,28696,28699],{},[497,28694,28695],{"align":23911},"COPY",[497,28697,28698],{"align":23911},"复制文件到镜像中",[497,28700,28701],{"align":23911},"COPY . \u002Fapp",[451,28703,28704,28707,28710],{},[497,28705,28706],{"align":23911},"ADD",[497,28708,28709],{"align":23911},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[497,28711,28712],{"align":23911},"ADD archive.tar.gz \u002Fdata\u002F",[451,28714,28715,28718,28721],{},[497,28716,28717],{"align":23911},"WORKDIR",[497,28719,28720],{"align":23911},"设置工作目录",[497,28722,28723],{"align":23911},"WORKDIR \u002Fopt",[451,28725,28726,28729,28732],{},[497,28727,28728],{"align":23911},"CMD",[497,28730,28731],{"align":23911},"设置容器启动时默认命令（可被 docker run 覆盖）",[497,28733,28734,28735],{"align":23911},"CMD ",[29,28736,28737],{},"“node”, “index.js”",[451,28739,28740,28743,28746],{},[497,28741,28742],{"align":23911},"ENTRYPOINT",[497,28744,28745],{"align":23911},"设置容器启动时固定命令（通常用于 CLI 工具等）",[497,28747,28748,28749],{"align":23911},"ENTRYPOINT ",[29,28750,28751],{},"“python3”",[451,28753,28754,28757,28760],{},[497,28755,28756],{"align":23911},"EXPOSE",[497,28758,28759],{"align":23911},"声明镜像内服务监听的端口（不会自动映射）",[497,28761,28762],{"align":23911},"EXPOSE 80",[451,28764,28765,28768,28771],{},[497,28766,28767],{"align":23911},"VOLUME",[497,28769,28770],{"align":23911},"声明数据卷挂载点",[497,28772,28773,28774],{"align":23911},"VOLUME ",[29,28775,28776],{},"“\u002Fdata”",[451,28778,28779,28782,28785],{},[497,28780,28781],{"align":23911},"USER",[497,28783,28784],{"align":23911},"设置后续命令执行的用户",[497,28786,28787],{"align":23911},"USER appuser",[451,28789,28790,28793,28796],{},[497,28791,28792],{"align":23911},"ONBUILD",[497,28794,28795],{"align":23911},"当镜像作为其他镜像基础镜像时触发的构建指令",[497,28797,28798],{"align":23911},"ONBUILD COPY . \u002Fsrc",[451,28800,28801,28804,28807],{},[497,28802,28803],{"align":23911},"SHELL",[497,28805,28806],{"align":23911},"更改默认 shell，比如将 sh -c 改为 bash -c",[497,28808,28809,28810],{"align":23911},"SHELL ",[29,28811,28812],{},"“\u002Fbin\u002Fbash”, “-c”",[451,28814,28815,28818,28821],{},[497,28816,28817],{"align":23911},"HEALTHCHECK",[497,28819,28820],{"align":23911},"定义容器运行时的健康检查命令",[497,28822,28823,28824],{"align":23911},"`HEALTHCHECK CMD curl –fail ",[546,28825,28826],{"href":28826,"rel":28827},"http:\u002F\u002Flocalhost:8080",[24038],[451,28829,28830,28833,28836],{},[497,28831,28832],{"align":23911},"STOPSIGNAL",[497,28834,28835],{"align":23911},"容器停止时发送的信号",[497,28837,28838],{"align":23911},"STOPSIGNAL SIGKILL",[275,28840,28842],{"id":28841},"_62自己创建容器","6.2.自己创建容器",[22173,28844,28846],{"id":28845},"_621手动创建","6.2.1.手动创建",[171,28848,28849],{},"在x86电脑上编译x86的：",[19,28851,28853],{"className":21,"code":28852,"language":23,"meta":24,"style":24},"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",[26,28854,28855,28871,28875,28888,28892,28905,28909,28922,28926,28939,28943],{"__ignoreMap":24},[29,28856,28857,28859,28862,28865,28868],{"class":31,"line":32},[29,28858,26682],{"class":35},[29,28860,28861],{"class":103}," build",[29,28863,28864],{"class":39}," -t",[29,28866,28867],{"class":103}," ros-melodic-cuda118-cudnn8-bionic:latest",[29,28869,28870],{"class":103}," .\n",[29,28872,28873],{"class":31,"line":43},[29,28874,2575],{"emptyLinePlaceholder":233},[29,28876,28877,28879,28881,28883,28886],{"class":31,"line":51},[29,28878,26682],{"class":35},[29,28880,28861],{"class":103},[29,28882,28864],{"class":39},[29,28884,28885],{"class":103}," ros-noetic-focal:latest",[29,28887,28870],{"class":103},[29,28889,28890],{"class":31,"line":59},[29,28891,2575],{"emptyLinePlaceholder":233},[29,28893,28894,28896,28898,28900,28903],{"class":31,"line":67},[29,28895,26682],{"class":35},[29,28897,28861],{"class":103},[29,28899,28864],{"class":39},[29,28901,28902],{"class":103}," ros-humble-jammy:latest",[29,28904,28870],{"class":103},[29,28906,28907],{"class":31,"line":75},[29,28908,2575],{"emptyLinePlaceholder":233},[29,28910,28911,28913,28915,28917,28920],{"class":31,"line":83},[29,28912,26682],{"class":35},[29,28914,28861],{"class":103},[29,28916,28864],{"class":39},[29,28918,28919],{"class":103}," ros-jazzy-noble:latest",[29,28921,28870],{"class":103},[29,28923,28924],{"class":31,"line":158},[29,28925,2575],{"emptyLinePlaceholder":233},[29,28927,28928,28930,28932,28934,28937],{"class":31,"line":166},[29,28929,26682],{"class":35},[29,28931,28861],{"class":103},[29,28933,28864],{"class":39},[29,28935,28936],{"class":103}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[29,28938,28870],{"class":103},[29,28940,28941],{"class":31,"line":1505},[29,28942,2575],{"emptyLinePlaceholder":233},[29,28944,28945,28947,28949,28951,28954],{"class":31,"line":1788},[29,28946,26682],{"class":35},[29,28948,28861],{"class":103},[29,28950,28864],{"class":39},[29,28952,28953],{"class":103}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[29,28955,28870],{"class":103},[171,28957,28958],{},[1638,28959],{"alt":24,"src":28960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[171,28962,28963],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[171,28965,28966],{},[1638,28967],{"alt":24,"src":28968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[171,28970,28971],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[259,28973,28974],{},[178,28975,28976],{},"创建 Docker Hub 账户",[171,28978,28979],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[259,28981,28982],{"start":43},[178,28983,28984],{},"登录 Docker Hub",[171,28986,28987],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[19,28989,28991],{"className":21,"code":28990,"language":23,"meta":24,"style":24},"docker login\n",[26,28992,28993],{"__ignoreMap":24},[29,28994,28995,28997],{"class":31,"line":32},[29,28996,26682],{"class":35},[29,28998,28999],{"class":103}," login\n",[171,29001,29002],{},"输入你的 Docker Hub 用户名和密码进行验证。",[259,29004,29005],{},[178,29006,29007],{},"为你的镜像打标签",[171,29009,29010,29011,29014],{},"Docker Hub 使用 ",[26,29012,29013],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[19,29016,29018],{"className":21,"code":29017,"language":23,"meta":24,"style":24},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[26,29019,29020],{"__ignoreMap":24},[29,29021,29022,29024,29027,29029,29032,29035,29038,29040],{"class":31,"line":32},[29,29023,26682],{"class":35},[29,29025,29026],{"class":103}," tag",[29,29028,28919],{"class":103},[29,29030,29031],{"class":305}," \u003C",[29,29033,29034],{"class":103},"你的用户",[29,29036,29037],{"class":309},"名",[29,29039,1268],{"class":305},[29,29041,29042],{"class":103},"\u002Fros-jazzy-noble:latest\n",[171,29044,29045,29046,29049],{},"例如，如果你的 Docker Hub 用户名是 ",[26,29047,29048],{},"tungchiahui","，你应该执行：",[19,29051,29053],{"className":21,"code":29052,"language":23,"meta":24,"style":24},"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",[26,29054,29055,29066,29070,29081,29085,29096,29100,29111,29115],{"__ignoreMap":24},[29,29056,29057,29059,29061,29063],{"class":31,"line":32},[29,29058,26682],{"class":35},[29,29060,29026],{"class":103},[29,29062,28885],{"class":103},[29,29064,29065],{"class":103}," tungchiahui\u002Fros-noetic-focal:latest\n",[29,29067,29068],{"class":31,"line":43},[29,29069,2575],{"emptyLinePlaceholder":233},[29,29071,29072,29074,29076,29078],{"class":31,"line":51},[29,29073,26682],{"class":35},[29,29075,29026],{"class":103},[29,29077,28902],{"class":103},[29,29079,29080],{"class":103}," tungchiahui\u002Fros-humble-jammy:latest\n",[29,29082,29083],{"class":31,"line":59},[29,29084,2575],{"emptyLinePlaceholder":233},[29,29086,29087,29089,29091,29093],{"class":31,"line":67},[29,29088,26682],{"class":35},[29,29090,29026],{"class":103},[29,29092,28919],{"class":103},[29,29094,29095],{"class":103}," tungchiahui\u002Fros-jazzy-noble:latest\n",[29,29097,29098],{"class":31,"line":75},[29,29099,2575],{"emptyLinePlaceholder":233},[29,29101,29102,29104,29106,29108],{"class":31,"line":83},[29,29103,26682],{"class":35},[29,29105,29026],{"class":103},[29,29107,28936],{"class":103},[29,29109,29110],{"class":103}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[29,29112,29113],{"class":31,"line":158},[29,29114,2575],{"emptyLinePlaceholder":233},[29,29116,29117,29119,29121,29123],{"class":31,"line":166},[29,29118,26682],{"class":35},[29,29120,29026],{"class":103},[29,29122,28953],{"class":103},[29,29124,29125],{"class":103}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[259,29127,29128],{"start":43},[178,29129,29130],{},"推送镜像到 Docker Hub",[171,29132,29133],{},"使用以下命令将镜像推送到 Docker Hub：",[19,29135,29137],{"className":21,"code":29136,"language":23,"meta":24,"style":24},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[26,29138,29139],{"__ignoreMap":24},[29,29140,29141,29143,29146,29148,29150,29152,29154],{"class":31,"line":32},[29,29142,26682],{"class":35},[29,29144,29145],{"class":103}," push",[29,29147,29031],{"class":305},[29,29149,29034],{"class":103},[29,29151,29037],{"class":309},[29,29153,1268],{"class":305},[29,29155,29156],{"class":103},"\u002Fros-noetic-jazzy-noble:latest\n",[171,29158,14808],{},[19,29160,29162],{"className":21,"code":29161,"language":23,"meta":24,"style":24},"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",[26,29163,29164,29172,29176,29184,29188,29196,29200,29209,29213,29221,29225],{"__ignoreMap":24},[29,29165,29166,29168,29170],{"class":31,"line":32},[29,29167,26682],{"class":35},[29,29169,29145],{"class":103},[29,29171,29065],{"class":103},[29,29173,29174],{"class":31,"line":43},[29,29175,2575],{"emptyLinePlaceholder":233},[29,29177,29178,29180,29182],{"class":31,"line":51},[29,29179,26682],{"class":35},[29,29181,29145],{"class":103},[29,29183,29080],{"class":103},[29,29185,29186],{"class":31,"line":59},[29,29187,2575],{"emptyLinePlaceholder":233},[29,29189,29190,29192,29194],{"class":31,"line":67},[29,29191,26682],{"class":35},[29,29193,29145],{"class":103},[29,29195,29095],{"class":103},[29,29197,29198],{"class":31,"line":75},[29,29199,2575],{"emptyLinePlaceholder":233},[29,29201,29202,29204,29206],{"class":31,"line":83},[29,29203,26682],{"class":35},[29,29205,29145],{"class":103},[29,29207,29208],{"class":103}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[29,29210,29211],{"class":31,"line":158},[29,29212,2575],{"emptyLinePlaceholder":233},[29,29214,29215,29217,29219],{"class":31,"line":166},[29,29216,26682],{"class":35},[29,29218,29145],{"class":103},[29,29220,29125],{"class":103},[29,29222,29223],{"class":31,"line":1505},[29,29224,2575],{"emptyLinePlaceholder":233},[29,29226,29227,29229,29231],{"class":31,"line":1788},[29,29228,26682],{"class":35},[29,29230,29145],{"class":103},[29,29232,29233],{"class":103}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[259,29235,29236],{"start":51},[178,29237,29238],{},"验证推送成功",[171,29240,29241],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[171,29243,29244],{},[457,29245,3959],{},[175,29247,29248,29251],{},[178,29249,29250],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[178,29252,29253],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[171,29255,29256],{},[1638,29257],{"alt":24,"src":29258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[171,29260,29261],{},[1638,29262],{"alt":24,"src":29263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22173,29265,29267],{"id":29266},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[171,29269,29270,29271,29274,29275,29278],{},"如果您想在 ",[457,29272,29273],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[457,29276,29277],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[171,29280,29281,29282],{},"1. ",[457,29283,29284],{},"启用 Docker 跨平台构建",[171,29286,29287],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[171,29289,29290],{},"第一步：启用 buildx（只需执行一次）",[19,29292,29294],{"className":21,"code":29293,"language":23,"meta":24,"style":24},"docker buildx create --name multiarch_builder --use\n",[26,29295,29296],{"__ignoreMap":24},[29,29297,29298,29300,29303,29306,29309,29312],{"class":31,"line":32},[29,29299,26682],{"class":35},[29,29301,29302],{"class":103}," buildx",[29,29304,29305],{"class":103}," create",[29,29307,29308],{"class":39}," --name",[29,29310,29311],{"class":103}," multiarch_builder",[29,29313,29314],{"class":39}," --use\n",[171,29316,29317],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[171,29319,29320],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[19,29322,29324],{"className":21,"code":29323,"language":23,"meta":24,"style":24},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[26,29325,29326],{"__ignoreMap":24},[29,29327,29328,29330,29332,29334,29337,29340,29343,29346],{"class":31,"line":32},[29,29329,26682],{"class":35},[29,29331,27359],{"class":103},[29,29333,27362],{"class":39},[29,29335,29336],{"class":39}," --privileged",[29,29338,29339],{"class":103}," multiarch\u002Fqemu-user-static",[29,29341,29342],{"class":39}," --reset",[29,29344,29345],{"class":39}," -p",[29,29347,29348],{"class":103}," yes\n",[171,29350,29351],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[171,29353,29354],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[19,29356,29358],{"className":21,"code":29357,"language":23,"meta":24,"style":24},"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",[26,29359,29360,29402,29406,29411,29421,29431,29440,29446,29450,29454,29464,29472,29481,29487,29491,29495,29505,29513,29522,29528,29532,29536,29546,29554,29563,29569,29573,29577,29587,29595,29604,29610,29614,29618,29628,29636,29645,29651,29655,29659,29669,29677,29686,29692,29696,29700,29710,29718,29727,29733,29737,29741,29751,29759,29768,29774,29778,29782,29793,29801,29810,29816],{"__ignoreMap":24},[29,29361,29362,29364,29366,29368,29371,29374,29376,29378,29381,29383,29385,29387,29389,29392,29395,29397,29400],{"class":31,"line":32},[29,29363,26682],{"class":35},[29,29365,29302],{"class":103},[29,29367,28861],{"class":103},[29,29369,29370],{"class":39}," --platform",[29,29372,29373],{"class":103}," linux\u002Famd64,linux\u002Farm64",[29,29375,28864],{"class":39},[29,29377,29031],{"class":305},[29,29379,29380],{"class":103},"你的镜像",[29,29382,29037],{"class":309},[29,29384,1268],{"class":305},[29,29386,1167],{"class":103},[29,29388,1218],{"class":305},[29,29390,29391],{"class":103},"标",[29,29393,29394],{"class":309},"签",[29,29396,1268],{"class":305},[29,29398,29399],{"class":39}," --push",[29,29401,28870],{"class":103},[29,29403,29404],{"class":31,"line":43},[29,29405,2575],{"emptyLinePlaceholder":233},[29,29407,29408],{"class":31,"line":51},[29,29409,29410],{"class":367},"# 例子：\n",[29,29412,29413,29415,29417,29419],{"class":31,"line":59},[29,29414,26682],{"class":35},[29,29416,29302],{"class":103},[29,29418,28861],{"class":103},[29,29420,40],{"class":39},[29,29422,29423,29426,29429],{"class":31,"line":67},[29,29424,29425],{"class":309},"--platform ",[29,29427,29428],{"class":103},"linux\u002Famd64,linux\u002Farm64",[29,29430,40],{"class":39},[29,29432,29433,29435,29438],{"class":31,"line":75},[29,29434,28864],{"class":39},[29,29436,29437],{"class":103}," tungchiahui\u002Fros:noetic-focal",[29,29439,40],{"class":39},[29,29441,29442,29444],{"class":31,"line":83},[29,29443,29399],{"class":39},[29,29445,40],{"class":39},[29,29447,29448],{"class":31,"line":158},[29,29449,28870],{"class":103},[29,29451,29452],{"class":31,"line":166},[29,29453,2575],{"emptyLinePlaceholder":233},[29,29455,29456,29458,29460,29462],{"class":31,"line":1505},[29,29457,26682],{"class":35},[29,29459,29302],{"class":103},[29,29461,28861],{"class":103},[29,29463,40],{"class":39},[29,29465,29466,29468,29470],{"class":31,"line":1788},[29,29467,29425],{"class":309},[29,29469,29428],{"class":103},[29,29471,40],{"class":39},[29,29473,29474,29476,29479],{"class":31,"line":1793},[29,29475,28864],{"class":39},[29,29477,29478],{"class":103}," tungchiahui\u002Fros:humble-jammy",[29,29480,40],{"class":39},[29,29482,29483,29485],{"class":31,"line":1799},[29,29484,29399],{"class":39},[29,29486,40],{"class":39},[29,29488,29489],{"class":31,"line":1804},[29,29490,28870],{"class":103},[29,29492,29493],{"class":31,"line":1818},[29,29494,2575],{"emptyLinePlaceholder":233},[29,29496,29497,29499,29501,29503],{"class":31,"line":1823},[29,29498,26682],{"class":35},[29,29500,29302],{"class":103},[29,29502,28861],{"class":103},[29,29504,40],{"class":39},[29,29506,29507,29509,29511],{"class":31,"line":1829},[29,29508,29425],{"class":309},[29,29510,29428],{"class":103},[29,29512,40],{"class":39},[29,29514,29515,29517,29520],{"class":31,"line":1850},[29,29516,28864],{"class":39},[29,29518,29519],{"class":103}," tungchiahui\u002Fros:jazzy-noble",[29,29521,40],{"class":39},[29,29523,29524,29526],{"class":31,"line":1855},[29,29525,29399],{"class":39},[29,29527,40],{"class":39},[29,29529,29530],{"class":31,"line":1869},[29,29531,28870],{"class":103},[29,29533,29534],{"class":31,"line":1874},[29,29535,2575],{"emptyLinePlaceholder":233},[29,29537,29538,29540,29542,29544],{"class":31,"line":1903},[29,29539,26449],{"class":35},[29,29541,29302],{"class":103},[29,29543,28861],{"class":103},[29,29545,40],{"class":39},[29,29547,29548,29550,29552],{"class":31,"line":1908},[29,29549,29425],{"class":309},[29,29551,29428],{"class":103},[29,29553,40],{"class":39},[29,29555,29556,29558,29561],{"class":31,"line":1925},[29,29557,28864],{"class":39},[29,29559,29560],{"class":103}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[29,29562,40],{"class":39},[29,29564,29565,29567],{"class":31,"line":1930},[29,29566,29399],{"class":39},[29,29568,40],{"class":39},[29,29570,29571],{"class":31,"line":1935},[29,29572,28870],{"class":103},[29,29574,29575],{"class":31,"line":1940},[29,29576,2575],{"emptyLinePlaceholder":233},[29,29578,29579,29581,29583,29585],{"class":31,"line":1954},[29,29580,26682],{"class":35},[29,29582,29302],{"class":103},[29,29584,28861],{"class":103},[29,29586,40],{"class":39},[29,29588,29589,29591,29593],{"class":31,"line":1959},[29,29590,29425],{"class":309},[29,29592,29428],{"class":103},[29,29594,40],{"class":39},[29,29596,29597,29599,29602],{"class":31,"line":2752},[29,29598,28864],{"class":39},[29,29600,29601],{"class":103}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[29,29603,40],{"class":39},[29,29605,29606,29608],{"class":31,"line":2766},[29,29607,29399],{"class":39},[29,29609,40],{"class":39},[29,29611,29612],{"class":31,"line":2774},[29,29613,28870],{"class":103},[29,29615,29616],{"class":31,"line":2779},[29,29617,2575],{"emptyLinePlaceholder":233},[29,29619,29620,29622,29624,29626],{"class":31,"line":2785},[29,29621,26449],{"class":35},[29,29623,29302],{"class":103},[29,29625,28861],{"class":103},[29,29627,40],{"class":39},[29,29629,29630,29632,29634],{"class":31,"line":2791},[29,29631,29425],{"class":309},[29,29633,29428],{"class":103},[29,29635,40],{"class":39},[29,29637,29638,29640,29643],{"class":31,"line":2796},[29,29639,28864],{"class":39},[29,29641,29642],{"class":103}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[29,29644,40],{"class":39},[29,29646,29647,29649],{"class":31,"line":8123},[29,29648,29399],{"class":39},[29,29650,40],{"class":39},[29,29652,29653],{"class":31,"line":8147},[29,29654,28870],{"class":103},[29,29656,29657],{"class":31,"line":8152},[29,29658,2575],{"emptyLinePlaceholder":233},[29,29660,29661,29663,29665,29667],{"class":31,"line":8158},[29,29662,26682],{"class":35},[29,29664,29302],{"class":103},[29,29666,28861],{"class":103},[29,29668,40],{"class":39},[29,29670,29671,29673,29675],{"class":31,"line":8185},[29,29672,29425],{"class":309},[29,29674,29428],{"class":103},[29,29676,40],{"class":39},[29,29678,29679,29681,29684],{"class":31,"line":8190},[29,29680,28864],{"class":39},[29,29682,29683],{"class":103}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[29,29685,40],{"class":39},[29,29687,29688,29690],{"class":31,"line":8196},[29,29689,29399],{"class":39},[29,29691,40],{"class":39},[29,29693,29694],{"class":31,"line":8208},[29,29695,28870],{"class":103},[29,29697,29698],{"class":31,"line":8220},[29,29699,2575],{"emptyLinePlaceholder":233},[29,29701,29702,29704,29706,29708],{"class":31,"line":8232},[29,29703,26682],{"class":35},[29,29705,29302],{"class":103},[29,29707,28861],{"class":103},[29,29709,40],{"class":39},[29,29711,29712,29714,29716],{"class":31,"line":9891},[29,29713,29425],{"class":309},[29,29715,29428],{"class":103},[29,29717,40],{"class":39},[29,29719,29720,29722,29725],{"class":31,"line":9916},[29,29721,28864],{"class":39},[29,29723,29724],{"class":103}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[29,29726,40],{"class":39},[29,29728,29729,29731],{"class":31,"line":9939},[29,29730,29399],{"class":39},[29,29732,40],{"class":39},[29,29734,29735],{"class":31,"line":9963},[29,29736,28870],{"class":103},[29,29738,29739],{"class":31,"line":9968},[29,29740,2575],{"emptyLinePlaceholder":233},[29,29742,29743,29745,29747,29749],{"class":31,"line":9973},[29,29744,26449],{"class":35},[29,29746,29302],{"class":103},[29,29748,28861],{"class":103},[29,29750,40],{"class":39},[29,29752,29753,29755,29757],{"class":31,"line":9978},[29,29754,29425],{"class":309},[29,29756,29428],{"class":103},[29,29758,40],{"class":39},[29,29760,29761,29763,29766],{"class":31,"line":9987},[29,29762,28864],{"class":39},[29,29764,29765],{"class":103}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[29,29767,40],{"class":39},[29,29769,29770,29772],{"class":31,"line":9992},[29,29771,29399],{"class":39},[29,29773,40],{"class":39},[29,29775,29776],{"class":31,"line":9998},[29,29777,28870],{"class":103},[29,29779,29780],{"class":31,"line":10019},[29,29781,2575],{"emptyLinePlaceholder":233},[29,29783,29784,29787,29789,29791],{"class":31,"line":10025},[29,29785,29786],{"class":35},"  docker",[29,29788,29302],{"class":103},[29,29790,28861],{"class":103},[29,29792,40],{"class":39},[29,29794,29795,29797,29799],{"class":31,"line":10039},[29,29796,29425],{"class":309},[29,29798,29428],{"class":103},[29,29800,40],{"class":39},[29,29802,29803,29805,29808],{"class":31,"line":10045},[29,29804,28864],{"class":39},[29,29806,29807],{"class":103}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[29,29809,40],{"class":39},[29,29811,29812,29814],{"class":31,"line":10072},[29,29813,29399],{"class":39},[29,29815,40],{"class":39},[29,29817,29818],{"class":31,"line":10081},[29,29819,28870],{"class":103},[171,29821,29822],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[171,29824,29825],{},[1638,29826],{"alt":24,"src":29827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[171,29829,29830],{},[1638,29831],{"alt":24,"src":29832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22173,29834,29836],{"id":29835},"_623清除构建缓存","6.2.3.清除构建缓存",[19,29838,29840],{"className":21,"code":29839,"language":23,"meta":24,"style":24},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[26,29841,29842,29847],{"__ignoreMap":24},[29,29843,29844],{"class":31,"line":32},[29,29845,29846],{"class":367},"# 清理BuildKit构建缓存\n",[29,29848,29849,29851,29854,29857],{"class":31,"line":43},[29,29850,26682],{"class":35},[29,29852,29853],{"class":103}," builder",[29,29855,29856],{"class":103}," prune",[29,29858,29859],{"class":39}," -f\n",[171,29861,29862],{},[1638,29863],{"alt":24,"src":29864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[275,29866,29868],{"id":29867},"_63补充","6.3.补充",[22173,29870,29872],{"id":29871},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[171,29874,29875],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[171,29877,29878],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[171,29880,29881],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[19,29883,29885],{"className":21,"code":29884,"language":23,"meta":24,"style":24},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[26,29886,29887,29894],{"__ignoreMap":24},[29,29888,29889,29891],{"class":31,"line":32},[29,29890,27499],{"class":35},[29,29892,29893],{"class":103}," nginx\n",[29,29895,29896,29898,29901,29904,29906],{"class":31,"line":43},[29,29897,28684],{"class":35},[29,29899,29900],{"class":103}," echo",[29,29902,29903],{"class":103}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[29,29905,26351],{"class":305},[29,29907,29908],{"class":103}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[171,29910,29911],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[171,29913,29914],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[19,29916,29918],{"className":21,"code":29917,"language":23,"meta":24,"style":24},"docker build -t nginx:tuling .\n",[26,29919,29920],{"__ignoreMap":24},[29,29921,29922,29924,29926,29928,29931],{"class":31,"line":32},[29,29923,26682],{"class":35},[29,29925,28861],{"class":103},[29,29927,28864],{"class":39},[29,29929,29930],{"class":103}," nginx:tuling",[29,29932,28870],{"class":103},[171,29934,29935],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[171,29937,29938],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[19,29940,29942],{"className":21,"code":29941,"language":23,"meta":24,"style":24},"docker run -d -p 92:80 nginx:tuling\n",[26,29943,29944],{"__ignoreMap":24},[29,29945,29946,29948,29950,29953,29955,29958],{"class":31,"line":32},[29,29947,26682],{"class":35},[29,29949,27359],{"class":103},[29,29951,29952],{"class":39}," -d",[29,29954,29345],{"class":39},[29,29956,29957],{"class":103}," 92:80",[29,29959,29960],{"class":103}," nginx:tuling\n",[171,29962,29963,29964],{},"4、访问 ",[546,29965,29968],{"href":29966,"rel":29967},"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",[24038],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[171,29970,29971],{},[1638,29972],{"alt":24,"src":29973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[171,29975,29976],{},[1638,29977],{"alt":24,"src":29978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22173,29980,29982],{"id":29981},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[171,29984,29985],{},"只需要知道大体流程即可",[171,29987,29988],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[171,29990,29991],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[171,29993,29994],{},"2、在Dockerfile中添加以下内容",[19,29996,29998],{"className":26220,"code":29997,"language":26222,"meta":24,"style":24},"# 基于哪个镜像\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",[26,29999,30000,30005,30010,30015,30020,30025,30030,30035],{"__ignoreMap":24},[29,30001,30002],{"class":31,"line":32},[29,30003,30004],{},"# 基于哪个镜像\n",[29,30006,30007],{"class":31,"line":43},[29,30008,30009],{},"From java:8\n",[29,30011,30012],{"class":31,"line":51},[29,30013,30014],{},"# 复制文件到容器\n",[29,30016,30017],{"class":31,"line":59},[29,30018,30019],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[29,30021,30022],{"class":31,"line":67},[29,30023,30024],{},"# 声明需要暴露的端口\n",[29,30026,30027],{"class":31,"line":75},[29,30028,30029],{},"EXPOSE 8877\n",[29,30031,30032],{"class":31,"line":83},[29,30033,30034],{},"# 配置容器启动后执行的命令\n",[29,30036,30037],{"class":31,"line":158},[29,30038,30039],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[171,30041,30042],{},"3、使用docker build命令构建镜像",[19,30044,30046],{"className":21,"code":30045,"language":23,"meta":24,"style":24},"docker build -t tulingmall-member:0.0.5 .\n",[26,30047,30048],{"__ignoreMap":24},[29,30049,30050,30052,30054,30056,30059],{"class":31,"line":32},[29,30051,26682],{"class":35},[29,30053,28861],{"class":103},[29,30055,28864],{"class":39},[29,30057,30058],{"class":103}," tulingmall-member:0.0.5",[29,30060,28870],{"class":103},[171,30062,30063],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[171,30065,30066],{},[1638,30067],{"alt":24,"src":30068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[171,30070,30071],{},"4、启动镜像，加-d可在后台启动",[19,30073,30075],{"className":21,"code":30074,"language":23,"meta":24,"style":24},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[26,30076,30077],{"__ignoreMap":24},[29,30078,30079,30081,30083,30085,30087,30090],{"class":31,"line":32},[29,30080,26682],{"class":35},[29,30082,27359],{"class":103},[29,30084,29952],{"class":39},[29,30086,29345],{"class":39},[29,30088,30089],{"class":103}," 8877:8877",[29,30091,30092],{"class":103}," tulingmall-member:0.0.5\n",[171,30094,30095],{},"加上JVM参数：",[19,30097,30099],{"className":21,"code":30098,"language":23,"meta":24,"style":24},"# --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",[26,30100,30101,30106,30121,30131,30140,30147],{"__ignoreMap":24},[29,30102,30103],{"class":31,"line":32},[29,30104,30105],{"class":367},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[29,30107,30108,30110,30112,30115,30117,30119],{"class":31,"line":43},[29,30109,26682],{"class":35},[29,30111,27359],{"class":103},[29,30113,30114],{"class":39},"  -d",[29,30116,29345],{"class":39},[29,30118,30089],{"class":103},[29,30120,40],{"class":39},[29,30122,30123,30125,30128],{"class":31,"line":51},[29,30124,28257],{"class":309},[29,30126,30127],{"class":103},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[29,30129,30130],{"class":39},"  \\\n",[29,30132,30133,30135,30138],{"class":31,"line":59},[29,30134,28257],{"class":309},[29,30136,30137],{"class":103},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[29,30139,30130],{"class":39},[29,30141,30142,30145],{"class":31,"line":67},[29,30143,30144],{"class":309},"--cap-add=SYS_PTRACE  ",[29,30146,26304],{"class":39},[29,30148,30149],{"class":31,"line":75},[29,30150,30151],{"class":309},"tulingmall-member:0.0.5\n",[171,30153,30154],{},"5、访问会员服务接口",[171,30156,30157],{},[1638,30158],{"alt":24,"src":30159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22173,30161,30163],{"id":30162},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[171,30165,30166],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[171,30168,30169,30170],{},"阿里云docker镜像仓库：",[546,30171,30172],{"href":30172,"rel":30173},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24038],[171,30175,30176],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[171,30178,30179],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[171,30181,30182],{},[1638,30183],{"alt":24,"src":30184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[171,30186,30187],{},"要把镜像推送到镜像仓库",[19,30189,30191],{"className":21,"code":30190,"language":23,"meta":24,"style":24},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[26,30192,30193],{"__ignoreMap":24},[29,30194,30195,30197,30199,30201],{"class":31,"line":32},[29,30196,26682],{"class":35},[29,30198,29026],{"class":103},[29,30200,30058],{"class":103},[29,30202,30203],{"class":103}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[171,30205,30206],{},"最后将镜像推送到远程仓库",[19,30208,30210],{"className":21,"code":30209,"language":23,"meta":24,"style":24},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[26,30211,30212],{"__ignoreMap":24},[29,30213,30214,30216,30218],{"class":31,"line":32},[29,30215,26682],{"class":35},[29,30217,29145],{"class":103},[29,30219,30203],{"class":103},[223,30221,30222],{},"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":24,"searchDepth":43,"depth":43,"links":30224},[30225,30226,30227],{"id":28612,"depth":51,"text":28613},{"id":28841,"depth":51,"text":28842},{"id":29867,"depth":51,"text":29868},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28604,"description":24},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30234,"title":30235,"body":30236,"description":24,"extension":231,"meta":30379,"navigation":233,"path":30380,"seo":30381,"stem":30382,"__hash__":30383},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30237,"toc":30377},[30238,30241,30246,30251,30254,30259,30264,30267,30272,30277,30280,30285,30288,30291,30294,30297,30300,30303,30323,30345,30348,30351,30371,30374],[10,30239,30235],{"id":30240},"_7vscode远程开发",[259,30242,30243],{},[178,30244,30245],{},"插件1：微软Docker工具",[171,30247,30248],{},[1638,30249],{"alt":24,"src":30250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[171,30252,30253],{},"docker扩展插件已经进化为container tools了，请安装container tools",[171,30255,30256],{},[1638,30257],{"alt":24,"src":30258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[259,30260,30261],{"start":43},[178,30262,30263],{},"插件2：微软Docker远程开发工具",[171,30265,30266],{},"下面这是远程开发的插件。",[171,30268,30269],{},[1638,30270],{"alt":24,"src":30271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[171,30273,30274],{},[1638,30275],{"alt":24,"src":30276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[171,30278,30279],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[171,30281,30282],{},[1638,30283],{"alt":24,"src":30284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[171,30286,30287],{},"安装完拓展之后，vscode进行链接：",[171,30289,30290],{},"1.按ctrl+shift+p",[171,30292,30293],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[171,30295,30296],{},"3.选择目前运行的容器",[171,30298,30299],{},"4.VS Code 会在新窗口中打开并连接到容器",[171,30301,30302],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[19,30304,30306],{"className":21,"code":30305,"language":23,"meta":24,"style":24},"docker run -v 主机目录:容器目录 image-name\n",[26,30307,30308],{"__ignoreMap":24},[29,30309,30310,30312,30314,30317,30320],{"class":31,"line":32},[29,30311,26682],{"class":35},[29,30313,27359],{"class":103},[29,30315,30316],{"class":39}," -v",[29,30318,30319],{"class":103}," 主机目录:容器目录",[29,30321,30322],{"class":103}," image-name\n",[19,30324,30326],{"className":21,"code":30325,"language":23,"meta":24,"style":24},"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",[26,30327,30328],{"__ignoreMap":24},[29,30329,30330,30332,30334,30337,30339,30342],{"class":31,"line":32},[29,30331,26682],{"class":35},[29,30333,27359],{"class":103},[29,30335,30336],{"class":39}," -it",[29,30338,30316],{"class":39},[29,30340,30341],{"class":103}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[29,30343,30344],{"class":103}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[171,30346,30347],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[171,30349,30350],{},"查看挂载情况：",[19,30352,30354],{"className":21,"code":30353,"language":23,"meta":24,"style":24},"mount | grep -i project\n",[26,30355,30356],{"__ignoreMap":24},[29,30357,30358,30361,30363,30366,30368],{"class":31,"line":32},[29,30359,30360],{"class":35},"mount",[29,30362,25238],{"class":305},[29,30364,30365],{"class":35}," grep",[29,30367,26559],{"class":39},[29,30369,30370],{"class":103}," project\n",[171,30372,30373],{},"也可以通过ls来进行查看",[223,30375,30376],{},"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":24,"searchDepth":43,"depth":43,"links":30378},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30235,"description":24},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30385,"title":30386,"body":30387,"description":230,"extension":231,"meta":30391,"navigation":233,"path":30393,"seo":30394,"stem":30395,"__hash__":30396},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30388,"toc":30389},[],{"title":24,"searchDepth":43,"depth":43,"links":30390},[],{"category":30392},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30386,"description":230},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30398,"title":30399,"body":30400,"description":230,"extension":231,"meta":30404,"navigation":233,"path":30405,"seo":30406,"stem":30407,"__hash__":30408},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30401,"toc":30402},[],{"title":24,"searchDepth":43,"depth":43,"links":30403},[],{"category":30392},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30399,"description":230},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30410,"title":30411,"body":30412,"description":230,"extension":231,"meta":30705,"navigation":233,"path":30706,"seo":30707,"stem":30708,"__hash__":30709},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30413,"toc":30703},[30414,30417,30425,30440,30445,30496,30499,30505,30692,30697,30700],[10,30415,30411],{"id":30416},"_1验证深度学习环境",[171,30418,30419,30420],{},"关于环境的安装，看",[546,30421,30424],{"href":30422,"rel":30423},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24038],"Pytorch-->深度学习",[171,30426,30427,30428,30431,30432,30435,30436,30439],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[26,30429,30430],{},"pytorch-cuda=12.4"," 是一个“ ",[457,30433,30434],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[457,30437,30438],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[171,30441,30442],{},[1638,30443],{"alt":24,"src":30444},"\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",[19,30446,30448],{"className":21,"code":30447,"language":23,"meta":24,"style":24},"# 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",[26,30449,30450,30455],{"__ignoreMap":24},[29,30451,30452],{"class":31,"line":32},[29,30453,30454],{"class":367},"# CUDA 12.4\n",[29,30456,30457,30460,30462,30465,30468,30471,30474,30477,30479,30482,30485,30488,30491,30493],{"class":31,"line":43},[29,30458,30459],{"class":35},"conda",[29,30461,24007],{"class":103},[29,30463,30464],{"class":103}," pytorch==",[29,30466,30467],{"class":39},"2.5.1",[29,30469,30470],{"class":103}," torchvision==",[29,30472,30473],{"class":39},"0.20.1",[29,30475,30476],{"class":103}," torchaudio==",[29,30478,30467],{"class":39},[29,30480,30481],{"class":103}," pytorch-cuda=",[29,30483,30484],{"class":39},"12.4",[29,30486,30487],{"class":39}," -c",[29,30489,30490],{"class":103}," pytorch",[29,30492,30487],{"class":39},[29,30494,30495],{"class":103}," nvidia\n",[171,30497,30498],{},"）：",[171,30500,30501],{},[546,30502,30503],{"href":30503,"rel":30504},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24038],[19,30506,30510],{"className":30507,"code":30508,"language":30509,"meta":24,"style":24},"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",[26,30511,30512,30517,30525,30530,30540,30556,30561,30571,30608,30615,30627,30643,30648,30658,30670,30680],{"__ignoreMap":24},[29,30513,30514],{"class":31,"line":32},[29,30515,30516],{"class":367},"# 对深度学习环境进行测试\n",[29,30518,30519,30522],{"class":31,"line":43},[29,30520,30521],{"class":305},"import",[29,30523,30524],{"class":309}," torch\n",[29,30526,30527],{"class":31,"line":51},[29,30528,30529],{"class":367},"# 查看cuda是否被激活\n",[29,30531,30532,30535,30537],{"class":31,"line":59},[29,30533,30534],{"class":309},"flag",[29,30536,355],{"class":305},[29,30538,30539],{"class":309},"torch.cuda.is_available()\n",[29,30541,30542,30545,30547,30550,30553],{"class":31,"line":67},[29,30543,30544],{"class":39},"print",[29,30546,310],{"class":309},[29,30548,30549],{"class":103},"\"cuda:\"",[29,30551,30552],{"class":309},", flag)   ",[29,30554,30555],{"class":367},"#返回true的话说明被激活\n",[29,30557,30558],{"class":31,"line":75},[29,30559,30560],{"class":367},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[29,30562,30563,30566,30568],{"class":31,"line":83},[29,30564,30565],{"class":309},"ngpu",[29,30567,355],{"class":305},[29,30569,30570],{"class":39},"1\n",[29,30572,30573,30576,30578,30581,30584,30586,30589,30592,30595,30597,30599,30601,30603,30606],{"class":31,"line":158},[29,30574,30575],{"class":309},"device",[29,30577,355],{"class":305},[29,30579,30580],{"class":309},"torch.device(",[29,30582,30583],{"class":103},"\"cuda:0\"",[29,30585,1880],{"class":305},[29,30587,30588],{"class":309},"(torch.cuda.is_available() ",[29,30590,30591],{"class":305},"and",[29,30593,30594],{"class":309}," ngpu",[29,30596,1268],{"class":305},[29,30598,499],{"class":39},[29,30600,13889],{"class":309},[29,30602,1877],{"class":305},[29,30604,30605],{"class":103}," \"cpu\"",[29,30607,316],{"class":309},[29,30609,30610,30612],{"class":31,"line":166},[29,30611,30544],{"class":39},[29,30613,30614],{"class":309},"(device)\n",[29,30616,30617,30619,30622,30624],{"class":31,"line":1505},[29,30618,30544],{"class":39},[29,30620,30621],{"class":309},"(torch.cuda.get_device_name(",[29,30623,499],{"class":39},[29,30625,30626],{"class":309},"))\n",[29,30628,30629,30631,30634,30636,30638,30640],{"class":31,"line":1788},[29,30630,30544],{"class":39},[29,30632,30633],{"class":309},"(torch.rand(",[29,30635,380],{"class":39},[29,30637,686],{"class":309},[29,30639,380],{"class":39},[29,30641,30642],{"class":309},").cuda())\n",[29,30644,30645],{"class":31,"line":1793},[29,30646,30647],{"class":367},"# 查看cuda和cudnn的版本\n",[29,30649,30650,30653,30655],{"class":31,"line":1799},[29,30651,30652],{"class":309},"cuda_version",[29,30654,355],{"class":305},[29,30656,30657],{"class":309},"torch.version.cuda\n",[29,30659,30660,30662,30664,30667],{"class":31,"line":1804},[29,30661,30544],{"class":39},[29,30663,310],{"class":309},[29,30665,30666],{"class":103},"\"cuda version\"",[29,30668,30669],{"class":309},",cuda_version)\n",[29,30671,30672,30675,30677],{"class":31,"line":1818},[29,30673,30674],{"class":309},"cudnn_version",[29,30676,355],{"class":305},[29,30678,30679],{"class":309},"torch.backends.cudnn.version()\n",[29,30681,30682,30684,30686,30689],{"class":31,"line":1823},[29,30683,30544],{"class":39},[29,30685,310],{"class":309},[29,30687,30688],{"class":103},"\"cudnn version\"",[29,30690,30691],{"class":309},",cudnn_version)\n",[171,30693,30694],{},[1638,30695],{"alt":24,"src":30696},"\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",[171,30698,30699],{},"cuda:0 指的是一块显卡",[223,30701,30702],{},"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":24,"searchDepth":43,"depth":43,"links":30704},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30411,"description":230},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30711,"title":30712,"body":30713,"description":230,"extension":231,"meta":50517,"navigation":233,"path":50518,"seo":50519,"stem":50520,"__hash__":50521},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30714,"toc":50511},[30715,30718,30722,30726,30729,30734,30739,30742,30747,30752,30757,30760,30764,30769,30773,30778,30781,30786,30789,30792,30795,30798,30803,30806,30811,30816,30821,30826,30829,30833,30836,30841,31445,31450,31453,31458,31461,31464,31928,31931,31934,31937,31940,33991,33994,33999,34004,34799,34802,34807,35585,35589,37248,37252,37966,37970,37974,37979,37984,37989,37992,37997,38002,38007,38012,38017,38021,38026,39308,39313,39316,39319,39322,39477,39480,39483,40699,40704,41399,41403,41407,41412,41417,41420,41425,41430,41435,41440,41445,41450,41455,41460,41465,41470,41475,41480,41485,41490,41495,41500,41505,41510,41515,41520,41525,41530,41535,41540,41545,41550,41555,41560,41565,41570,41574,41578,41581,43059,43063,44710,44714,45408,45412,45415,45418,45962,45965,45969,45972,47369,47373,47376,47954,49741,49745,49748,50508],[10,30716,30712],{"id":30717},"_2经典神经网络",[275,30719,30721],{"id":30720},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22173,30723,30725],{"id":30724},"_211原理介绍","2.1.1.原理介绍",[171,30727,30728],{},"LeNet-5",[259,30730,30731],{},[178,30732,30733],{},"原理",[171,30735,30736],{},[1638,30737],{"alt":24,"src":30738},"\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",[171,30740,30741],{},"B是batch批次；C是channel通道",[259,30743,30744],{"start":43},[178,30745,30746],{},"网络参数详细",[171,30748,30749],{},[1638,30750],{"alt":24,"src":30751},"\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",[171,30753,30754],{},[1638,30755],{"alt":24,"src":30756},"\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",[171,30758,30759],{},"AlexNet",[259,30761,30762],{},[178,30763,30733],{},[171,30765,30766],{},[1638,30767],{"alt":24,"src":30768},"\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",[259,30770,30771],{"start":43},[178,30772,30746],{},[171,30774,30775],{},[1638,30776],{"alt":24,"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-007.png",[171,30779,30780],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[171,30782,30783],{},[1638,30784],{"alt":24,"src":30785},"\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",[171,30787,30788],{},"数据处理中的图像增强操作:",[171,30790,30791],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[171,30793,30794],{},"①增加数据量，保证训练数据充足；②防止过拟合",[171,30796,30797],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[171,30799,30800],{},[1638,30801],{"alt":24,"src":30802},"\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",[171,30804,30805],{},"提升网络精确度的方法：LRN正则化",[171,30807,30808],{},[1638,30809],{"alt":24,"src":30810},"\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",[171,30812,30813],{},[1638,30814],{"alt":24,"src":30815},"\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",[259,30817,30818],{"start":51},[178,30819,30820],{},"AlexNet的总结",[171,30822,30823],{},[1638,30824],{"alt":24,"src":30825},"\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",[171,30827,30828],{},"比LeNet模型要深一丢丢",[22173,30830,30832],{"id":30831},"_212代码实现","2.1.2.代码实现",[171,30834,30835],{},"（1）LeNet",[259,30837,30838],{},[178,30839,30840],{},"模型搭建",[19,30842,30844],{"className":30507,"code":30843,"language":30509,"meta":24,"style":24},"# 导入库\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",[26,30845,30846,30851,30857,30862,30875,30880,30892,30896,30916,30921,30926,30937,30942,30961,30965,30970,31019,31031,31036,31065,31100,31127,31132,31144,31149,31169,31188,31207,31211,31216,31226,31243,31254,31269,31280,31291,31306,31321,31332,31339,31343,31357,31362,31385,31390,31395,31400,31404,31409,31414,31424],{"__ignoreMap":24},[29,30847,30848],{"class":31,"line":32},[29,30849,30850],{"class":367},"# 导入库\n",[29,30852,30853,30855],{"class":31,"line":43},[29,30854,30521],{"class":305},[29,30856,30524],{"class":309},[29,30858,30859],{"class":31,"line":51},[29,30860,30861],{"class":367},"# 导入神经网络层\n",[29,30863,30864,30867,30870,30872],{"class":31,"line":59},[29,30865,30866],{"class":305},"from",[29,30868,30869],{"class":309}," torch ",[29,30871,30521],{"class":305},[29,30873,30874],{"class":309}," nn\n",[29,30876,30877],{"class":31,"line":67},[29,30878,30879],{"class":367},"# 导入展示神经网络参数的包\n",[29,30881,30882,30884,30887,30889],{"class":31,"line":75},[29,30883,30866],{"class":305},[29,30885,30886],{"class":309}," torchsummary ",[29,30888,30521],{"class":305},[29,30890,30891],{"class":309}," summary\n",[29,30893,30894],{"class":31,"line":83},[29,30895,2575],{"emptyLinePlaceholder":233},[29,30897,30898,30900,30903,30905,30908,30910,30913],{"class":31,"line":158},[29,30899,14869],{"class":305},[29,30901,30902],{"class":35}," LeNet",[29,30904,310],{"class":309},[29,30906,30907],{"class":35},"nn",[29,30909,866],{"class":309},[29,30911,30912],{"class":35},"Module",[29,30914,30915],{"class":309},"):\n",[29,30917,30918],{"class":31,"line":166},[29,30919,30920],{"class":367},"    # 模型初始化:\n",[29,30922,30923],{"class":31,"line":1505},[29,30924,30925],{"class":367},"    # 定义一些网络层和激活函数\n",[29,30927,30928,30931,30934],{"class":31,"line":1788},[29,30929,30930],{"class":305},"    def",[29,30932,30933],{"class":39}," __init__",[29,30935,30936],{"class":309},"(self):\n",[29,30938,30939],{"class":31,"line":1793},[29,30940,30941],{"class":367},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[29,30943,30944,30947,30950,30953,30956,30959],{"class":31,"line":1799},[29,30945,30946],{"class":39},"        super",[29,30948,30949],{"class":309},"(LeNet,",[29,30951,30952],{"class":39},"self",[29,30954,30955],{"class":309},").",[29,30957,30958],{"class":39},"__init__",[29,30960,2151],{"class":309},[29,30962,30963],{"class":31,"line":1804},[29,30964,2575],{"emptyLinePlaceholder":233},[29,30966,30967],{"class":31,"line":1818},[29,30968,30969],{"class":367},"        # 定义网络层\n",[29,30971,30972,30975,30978,30980,30983,30986,30988,30990,30992,30995,30997,30999,31001,31004,31006,31008,31010,31013,31015,31017],{"class":31,"line":1823},[29,30973,30974],{"class":39},"        self",[29,30976,30977],{"class":309},".c1",[29,30979,355],{"class":305},[29,30981,30982],{"class":309},"nn.Conv2d(",[29,30984,30985],{"class":5391},"in_channels",[29,30987,355],{"class":305},[29,30989,525],{"class":39},[29,30991,686],{"class":309},[29,30993,30994],{"class":5391},"out_channels",[29,30996,355],{"class":305},[29,30998,652],{"class":39},[29,31000,686],{"class":309},[29,31002,31003],{"class":5391},"kernel_size",[29,31005,355],{"class":305},[29,31007,627],{"class":39},[29,31009,686],{"class":309},[29,31011,31012],{"class":5391},"padding",[29,31014,355],{"class":305},[29,31016,386],{"class":39},[29,31018,316],{"class":309},[29,31020,31021,31023,31026,31028],{"class":31,"line":1829},[29,31022,30974],{"class":39},[29,31024,31025],{"class":309},".sig",[29,31027,355],{"class":305},[29,31029,31030],{"class":309},"nn.Sigmoid()\n",[29,31032,31033],{"class":31,"line":1850},[29,31034,31035],{"class":367},"        # 定义池化\n",[29,31037,31038,31040,31043,31045,31048,31050,31052,31054,31056,31059,31061,31063],{"class":31,"line":1855},[29,31039,30974],{"class":39},[29,31041,31042],{"class":309},".s2",[29,31044,355],{"class":305},[29,31046,31047],{"class":309},"nn.AvgPool2d(",[29,31049,31003],{"class":5391},[29,31051,355],{"class":305},[29,31053,386],{"class":39},[29,31055,686],{"class":309},[29,31057,31058],{"class":5391},"stride",[29,31060,355],{"class":305},[29,31062,386],{"class":39},[29,31064,316],{"class":309},[29,31066,31067,31069,31072,31074,31076,31078,31080,31082,31084,31086,31088,31090,31092,31094,31096,31098],{"class":31,"line":1869},[29,31068,30974],{"class":39},[29,31070,31071],{"class":309},".c3",[29,31073,355],{"class":305},[29,31075,30982],{"class":309},[29,31077,30985],{"class":5391},[29,31079,355],{"class":305},[29,31081,652],{"class":39},[29,31083,686],{"class":309},[29,31085,30994],{"class":5391},[29,31087,355],{"class":305},[29,31089,909],{"class":39},[29,31091,686],{"class":309},[29,31093,31003],{"class":5391},[29,31095,355],{"class":305},[29,31097,627],{"class":39},[29,31099,316],{"class":309},[29,31101,31102,31104,31107,31109,31111,31113,31115,31117,31119,31121,31123,31125],{"class":31,"line":1874},[29,31103,30974],{"class":39},[29,31105,31106],{"class":309},".s4",[29,31108,355],{"class":305},[29,31110,31047],{"class":309},[29,31112,31003],{"class":5391},[29,31114,355],{"class":305},[29,31116,386],{"class":39},[29,31118,686],{"class":309},[29,31120,31058],{"class":5391},[29,31122,355],{"class":305},[29,31124,386],{"class":39},[29,31126,316],{"class":309},[29,31128,31129],{"class":31,"line":1903},[29,31130,31131],{"class":367},"        # 定义平展层\n",[29,31133,31134,31136,31139,31141],{"class":31,"line":1908},[29,31135,30974],{"class":39},[29,31137,31138],{"class":309},".flatten",[29,31140,355],{"class":305},[29,31142,31143],{"class":309},"nn.Flatten()\n",[29,31145,31146],{"class":31,"line":1925},[29,31147,31148],{"class":367},"        # 定义全连接层\n",[29,31150,31151,31153,31156,31158,31161,31163,31165,31167],{"class":31,"line":1930},[29,31152,30974],{"class":39},[29,31154,31155],{"class":309},".f5",[29,31157,355],{"class":305},[29,31159,31160],{"class":309},"nn.Linear(",[29,31162,4162],{"class":39},[29,31164,686],{"class":309},[29,31166,1125],{"class":39},[29,31168,316],{"class":309},[29,31170,31171,31173,31176,31178,31180,31182,31184,31186],{"class":31,"line":1935},[29,31172,30974],{"class":39},[29,31174,31175],{"class":309},".f6",[29,31177,355],{"class":305},[29,31179,31160],{"class":309},[29,31181,1125],{"class":39},[29,31183,686],{"class":309},[29,31185,1019],{"class":39},[29,31187,316],{"class":309},[29,31189,31190,31192,31195,31197,31199,31201,31203,31205],{"class":31,"line":1940},[29,31191,30974],{"class":39},[29,31193,31194],{"class":309},".f7",[29,31196,355],{"class":305},[29,31198,31160],{"class":309},[29,31200,1019],{"class":39},[29,31202,686],{"class":309},[29,31204,754],{"class":39},[29,31206,316],{"class":309},[29,31208,31209],{"class":31,"line":1954},[29,31210,2575],{"emptyLinePlaceholder":233},[29,31212,31213],{"class":31,"line":1959},[29,31214,31215],{"class":367},"    # 写工具->写前向传播\n",[29,31217,31218,31220,31223],{"class":31,"line":2752},[29,31219,30930],{"class":305},[29,31221,31222],{"class":35}," forward",[29,31224,31225],{"class":309},"(self,x):\n",[29,31227,31228,31231,31233,31235,31238,31240],{"class":31,"line":2766},[29,31229,31230],{"class":309},"        x",[29,31232,355],{"class":305},[29,31234,30952],{"class":39},[29,31236,31237],{"class":309},".sig(",[29,31239,30952],{"class":39},[29,31241,31242],{"class":309},".c1(x))\n",[29,31244,31245,31247,31249,31251],{"class":31,"line":2774},[29,31246,31230],{"class":309},[29,31248,355],{"class":305},[29,31250,30952],{"class":39},[29,31252,31253],{"class":309},".s2(x)\n",[29,31255,31256,31258,31260,31262,31264,31266],{"class":31,"line":2779},[29,31257,31230],{"class":309},[29,31259,355],{"class":305},[29,31261,30952],{"class":39},[29,31263,31237],{"class":309},[29,31265,30952],{"class":39},[29,31267,31268],{"class":309},".c3(x))\n",[29,31270,31271,31273,31275,31277],{"class":31,"line":2785},[29,31272,31230],{"class":309},[29,31274,355],{"class":305},[29,31276,30952],{"class":39},[29,31278,31279],{"class":309},".s4(x)\n",[29,31281,31282,31284,31286,31288],{"class":31,"line":2791},[29,31283,31230],{"class":309},[29,31285,355],{"class":305},[29,31287,30952],{"class":39},[29,31289,31290],{"class":309},".flatten(x)\n",[29,31292,31293,31295,31297,31299,31301,31303],{"class":31,"line":2796},[29,31294,31230],{"class":309},[29,31296,355],{"class":305},[29,31298,30952],{"class":39},[29,31300,31237],{"class":309},[29,31302,30952],{"class":39},[29,31304,31305],{"class":309},".f5(x))\n",[29,31307,31308,31310,31312,31314,31316,31318],{"class":31,"line":8123},[29,31309,31230],{"class":309},[29,31311,355],{"class":305},[29,31313,30952],{"class":39},[29,31315,31237],{"class":309},[29,31317,30952],{"class":39},[29,31319,31320],{"class":309},".f6(x))\n",[29,31322,31323,31325,31327,31329],{"class":31,"line":8147},[29,31324,31230],{"class":309},[29,31326,355],{"class":305},[29,31328,30952],{"class":39},[29,31330,31331],{"class":309},".f7(x)\n",[29,31333,31334,31336],{"class":31,"line":8152},[29,31335,14927],{"class":305},[29,31337,31338],{"class":309}," x\n",[29,31340,31341],{"class":31,"line":8158},[29,31342,2575],{"emptyLinePlaceholder":233},[29,31344,31345,31347,31350,31352,31355],{"class":31,"line":8185},[29,31346,1707],{"class":305},[29,31348,31349],{"class":39}," __name__",[29,31351,3124],{"class":305},[29,31353,31354],{"class":103},"\"__main__\"",[29,31356,3914],{"class":309},[29,31358,31359],{"class":31,"line":8190},[29,31360,31361],{"class":367},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[29,31363,31364,31367,31369,31371,31374,31376,31379,31381,31383],{"class":31,"line":8196},[29,31365,31366],{"class":309},"    device",[29,31368,355],{"class":305},[29,31370,30580],{"class":309},[29,31372,31373],{"class":103},"\"cuda\"",[29,31375,1880],{"class":305},[29,31377,31378],{"class":309}," torch.cuda.is_available() ",[29,31380,1877],{"class":305},[29,31382,30605],{"class":103},[29,31384,316],{"class":309},[29,31386,31387],{"class":31,"line":8208},[29,31388,31389],{"class":367},"    # 如果就是想指定用cpu用下方代码:\n",[29,31391,31392],{"class":31,"line":8220},[29,31393,31394],{"class":367},"    # device=\"cpu\"\n",[29,31396,31397],{"class":31,"line":8232},[29,31398,31399],{"class":367},"    # print(device)\n",[29,31401,31402],{"class":31,"line":9891},[29,31403,2575],{"emptyLinePlaceholder":233},[29,31405,31406],{"class":31,"line":9916},[29,31407,31408],{"class":367},"    # 实例化模型\n",[29,31410,31411],{"class":31,"line":9939},[29,31412,31413],{"class":367},"    # 将模型放到设备中去运行\n",[29,31415,31416,31419,31421],{"class":31,"line":9963},[29,31417,31418],{"class":309},"    model",[29,31420,355],{"class":305},[29,31422,31423],{"class":309},"LeNet().to(device)\n",[29,31425,31426,31429,31432,31434,31436,31438,31440,31442],{"class":31,"line":9968},[29,31427,31428],{"class":39},"    print",[29,31430,31431],{"class":309},"(summary(model,(",[29,31433,525],{"class":39},[29,31435,686],{"class":309},[29,31437,1209],{"class":39},[29,31439,686],{"class":309},[29,31441,1209],{"class":39},[29,31443,31444],{"class":309},")))\n",[171,31446,31447],{},[1638,31448],{"alt":24,"src":31449},"\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",[171,31451,31452],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[259,31454,31455],{"start":43},[178,31456,31457],{},"训练",[171,31459,31460],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[171,31462,31463],{},"在训练之前可以将数据展示看一下",[19,31465,31467],{"className":30507,"code":31466,"language":30509,"meta":24,"style":24},"# 建立画图的函数，用于展示数据\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",[26,31468,31469,31474,31479,31491,31503,31516,31521,31533,31538,31550,31555,31567,31571,31575,31596,31608,31613,31634,31645,31649,31654,31672,31683,31688,31699,31704,31715,31719,31724,31739,31752,31757,31762,31775,31788,31801,31806,31810,31815,31835,31852,31872,31885,31898,31908,31923],{"__ignoreMap":24},[29,31470,31471],{"class":31,"line":32},[29,31472,31473],{"class":367},"# 建立画图的函数，用于展示数据\n",[29,31475,31476],{"class":31,"line":43},[29,31477,31478],{"class":367},"# torchvision中包含很多内置的数据集\n",[29,31480,31481,31483,31486,31488],{"class":31,"line":51},[29,31482,30866],{"class":305},[29,31484,31485],{"class":309}," sklearn.externals.array_api_compat.torch ",[29,31487,30521],{"class":305},[29,31489,31490],{"class":309}," squeeze\n",[29,31492,31493,31495,31498,31500],{"class":31,"line":59},[29,31494,30866],{"class":305},[29,31496,31497],{"class":309}," torchvision.datasets ",[29,31499,30521],{"class":305},[29,31501,31502],{"class":309}," FashionMNIST\n",[29,31504,31505,31507,31510,31513],{"class":31,"line":67},[29,31506,30521],{"class":305},[29,31508,31509],{"class":309}," numpy ",[29,31511,31512],{"class":305},"as",[29,31514,31515],{"class":309}," np\n",[29,31517,31518],{"class":31,"line":75},[29,31519,31520],{"class":367},"# 引入处理数据集的包\n",[29,31522,31523,31525,31528,31530],{"class":31,"line":83},[29,31524,30866],{"class":305},[29,31526,31527],{"class":309}," torchvision ",[29,31529,30521],{"class":305},[29,31531,31532],{"class":309}," transforms\n",[29,31534,31535],{"class":31,"line":158},[29,31536,31537],{"class":367},"# 从torch库中引入数据处理的包\n",[29,31539,31540,31542,31545,31547],{"class":31,"line":166},[29,31541,30521],{"class":305},[29,31543,31544],{"class":309}," torch.utils.data ",[29,31546,31512],{"class":305},[29,31548,31549],{"class":309}," Data\n",[29,31551,31552],{"class":31,"line":1505},[29,31553,31554],{"class":367},"# 导入画图的库\n",[29,31556,31557,31559,31562,31564],{"class":31,"line":1788},[29,31558,30521],{"class":305},[29,31560,31561],{"class":309}," matplotlib.pyplot ",[29,31563,31512],{"class":305},[29,31565,31566],{"class":309}," plt\n",[29,31568,31569],{"class":31,"line":1793},[29,31570,2575],{"emptyLinePlaceholder":233},[29,31572,31573],{"class":31,"line":1799},[29,31574,2575],{"emptyLinePlaceholder":233},[29,31576,31577,31580,31582,31585,31588,31590,31593],{"class":31,"line":1804},[29,31578,31579],{"class":309},"train_data",[29,31581,355],{"class":305},[29,31583,31584],{"class":309},"FashionMNIST(",[29,31586,31587],{"class":5391},"root",[29,31589,355],{"class":305},[29,31591,31592],{"class":103},"'.\u002Fdata'",[29,31594,31595],{"class":309},",\n",[29,31597,31598,31601,31603,31606],{"class":31,"line":1818},[29,31599,31600],{"class":5391},"                        train",[29,31602,355],{"class":305},[29,31604,31605],{"class":39},"True",[29,31607,31595],{"class":309},[29,31609,31610],{"class":31,"line":1823},[29,31611,31612],{"class":367},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[29,31614,31615,31618,31620,31623,31626,31628,31631],{"class":31,"line":1829},[29,31616,31617],{"class":5391},"                        transform",[29,31619,355],{"class":305},[29,31621,31622],{"class":309},"transforms.Compose([transforms.Resize(",[29,31624,31625],{"class":5391},"size",[29,31627,355],{"class":305},[29,31629,31630],{"class":39},"224",[29,31632,31633],{"class":309},"),transforms.ToTensor()]),\n",[29,31635,31636,31639,31641,31643],{"class":31,"line":1850},[29,31637,31638],{"class":5391},"                        download",[29,31640,355],{"class":305},[29,31642,31605],{"class":39},[29,31644,316],{"class":309},[29,31646,31647],{"class":31,"line":1855},[29,31648,2575],{"emptyLinePlaceholder":233},[29,31650,31651],{"class":31,"line":1869},[29,31652,31653],{"class":367},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[29,31655,31656,31659,31661,31664,31667,31669],{"class":31,"line":1874},[29,31657,31658],{"class":309},"train_loader",[29,31660,355],{"class":305},[29,31662,31663],{"class":309},"Data.DataLoader(",[29,31665,31666],{"class":5391},"dataset",[29,31668,355],{"class":305},[29,31670,31671],{"class":309},"train_data,\n",[29,31673,31674,31677,31679,31681],{"class":31,"line":1903},[29,31675,31676],{"class":5391},"                             batch_size",[29,31678,355],{"class":305},[29,31680,511],{"class":39},[29,31682,31595],{"class":309},[29,31684,31685],{"class":31,"line":1908},[29,31686,31687],{"class":367},"                             # 数据是否打乱\n",[29,31689,31690,31693,31695,31697],{"class":31,"line":1925},[29,31691,31692],{"class":5391},"                             shuffle",[29,31694,355],{"class":305},[29,31696,31605],{"class":39},[29,31698,31595],{"class":309},[29,31700,31701],{"class":31,"line":1930},[29,31702,31703],{"class":367},"                             # 规定加载数据的进程\n",[29,31705,31706,31709,31711,31713],{"class":31,"line":1935},[29,31707,31708],{"class":5391},"                             num_workers",[29,31710,355],{"class":305},[29,31712,499],{"class":39},[29,31714,316],{"class":309},[29,31716,31717],{"class":31,"line":1940},[29,31718,2575],{"emptyLinePlaceholder":233},[29,31720,31721],{"class":31,"line":1954},[29,31722,31723],{"class":367},"# 获得一个batch的数据\n",[29,31725,31726,31728,31731,31733,31736],{"class":31,"line":1959},[29,31727,3200],{"class":305},[29,31729,31730],{"class":309}," step,(b_x,b_y) ",[29,31732,26172],{"class":305},[29,31734,31735],{"class":39}," enumerate",[29,31737,31738],{"class":309},"(train_loader):\n",[29,31740,31741,31743,31746,31748,31750],{"class":31,"line":2752},[29,31742,3276],{"class":305},[29,31744,31745],{"class":309}," step ",[29,31747,1268],{"class":305},[29,31749,4268],{"class":39},[29,31751,3914],{"class":309},[29,31753,31754],{"class":31,"line":2766},[29,31755,31756],{"class":305},"        break\n",[29,31758,31759],{"class":31,"line":2774},[29,31760,31761],{"class":367},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[29,31763,31764,31767,31769,31772],{"class":31,"line":2779},[29,31765,31766],{"class":309},"batch_x",[29,31768,355],{"class":305},[29,31770,31771],{"class":309},"b_x.squeeze().numpy()  ",[29,31773,31774],{"class":367},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[29,31776,31777,31780,31782,31785],{"class":31,"line":2785},[29,31778,31779],{"class":309},"batch_y",[29,31781,355],{"class":305},[29,31783,31784],{"class":309},"b_y.numpy()   ",[29,31786,31787],{"class":367},"#将张量转换成功numpy数组\n",[29,31789,31790,31793,31795,31798],{"class":31,"line":2791},[29,31791,31792],{"class":309},"class_label",[29,31794,355],{"class":305},[29,31796,31797],{"class":309},"train_data.classes  ",[29,31799,31800],{"class":367},"#训练集标签\n",[29,31802,31803],{"class":31,"line":2796},[29,31804,31805],{"class":367},"# print(class_label)\n",[29,31807,31808],{"class":31,"line":8123},[29,31809,2575],{"emptyLinePlaceholder":233},[29,31811,31812],{"class":31,"line":8147},[29,31813,31814],{"class":367},"# 可视化一个batch的图像\n",[29,31816,31817,31820,31823,31825,31827,31829,31831,31833],{"class":31,"line":8152},[29,31818,31819],{"class":309},"plt.figure(",[29,31821,31822],{"class":5391},"figsize",[29,31824,355],{"class":305},[29,31826,310],{"class":309},[29,31828,806],{"class":39},[29,31830,686],{"class":309},[29,31832,627],{"class":39},[29,31834,30626],{"class":309},[29,31836,31837,31839,31842,31844,31847,31849],{"class":31,"line":8158},[29,31838,3200],{"class":305},[29,31840,31841],{"class":309}," ii ",[29,31843,26172],{"class":305},[29,31845,31846],{"class":309}," np.arange(",[29,31848,7533],{"class":39},[29,31850,31851],{"class":309},"(batch_y)):\n",[29,31853,31854,31857,31859,31861,31863,31866,31868,31870],{"class":31,"line":8185},[29,31855,31856],{"class":309},"    plt.subplot(",[29,31858,601],{"class":39},[29,31860,686],{"class":309},[29,31862,909],{"class":39},[29,31864,31865],{"class":309},",ii ",[29,31867,789],{"class":305},[29,31869,25247],{"class":39},[29,31871,316],{"class":309},[29,31873,31874,31877,31880,31882],{"class":31,"line":8190},[29,31875,31876],{"class":309},"    plt.imshow(batch_x[ii,:,:],",[29,31878,31879],{"class":5391},"cmap",[29,31881,355],{"class":305},[29,31883,31884],{"class":309},"plt.cm.gray)\n",[29,31886,31887,31890,31892,31894,31896],{"class":31,"line":8196},[29,31888,31889],{"class":309},"    plt.title(class_label[batch_y[ii]],",[29,31891,31625],{"class":5391},[29,31893,355],{"class":305},[29,31895,754],{"class":39},[29,31897,316],{"class":309},[29,31899,31900,31903,31906],{"class":31,"line":8208},[29,31901,31902],{"class":309},"    plt.axis(",[29,31904,31905],{"class":103},"\"off\"",[29,31907,316],{"class":309},[29,31909,31910,31913,31916,31918,31921],{"class":31,"line":8220},[29,31911,31912],{"class":309},"    plt.subplots_adjust(",[29,31914,31915],{"class":5391},"wspace",[29,31917,355],{"class":305},[29,31919,31920],{"class":39},"0.05",[29,31922,316],{"class":309},[29,31924,31925],{"class":31,"line":8232},[29,31926,31927],{"class":309},"plt.show()\n",[171,31929,31930],{},"用matplotlib进行展示的过程可以后续再补",[171,31932,31933],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[171,31935,31936],{},"训练次数就是按照批次过整个训练集数据的次数",[171,31938,31939],{},"模型训练：",[19,31941,31943],{"className":30507,"code":31942,"language":30509,"meta":24,"style":24},"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",[26,31944,31945,31952,31959,31963,31975,31981,31992,32002,32012,32022,32032,32037,32049,32059,32063,32067,32072,32083,32096,32107,32124,32135,32174,32190,32202,32213,32218,32229,32245,32256,32267,32278,32285,32289,32294,32299,32303,32308,32318,32339,32343,32347,32352,32357,32362,32382,32386,32391,32401,32405,32410,32419,32424,32429,32434,32444,32448,32452,32457,32462,32472,32477,32487,32492,32501,32506,32515,32520,32529,32533,32538,32548,32552,32556,32561,32576,32604,32619,32623,32628,32633,32642,32647,32656,32661,32670,32675,32684,32689,32698,32703,32712,32717,32730,32735,32745,32750,32760,32766,32772,32778,32784,32795,32801,32821,32827,32838,32844,32850,32856,32862,32868,32874,32880,32900,32906,32922,32928,32942,32948,32963,32969,32978,32984,32993,32999,33005,33014,33020,33031,33037,33056,33062,33073,33079,33099,33115,33121,33135,33141,33147,33158,33164,33170,33180,33186,33197,33203,33213,33218,33224,33273,33320,33325,33331,33350,33356,33376,33382,33388,33398,33403,33409,33425,33470,33476,33482,33488,33499,33505,33511,33517,33535,33549,33558,33567,33576,33585,33591,33597,33605,33610,33616,33627,33633,33653,33659,33665,33671,33688,33694,33700,33706,33712,33718,33745,33769,33775,33781,33787,33798,33809,33815,33832,33855,33878,33884,33889,33898,33908,33914,33919,33925,33938,33944,33955,33966,33985],{"__ignoreMap":24},[29,31946,31947,31949],{"class":31,"line":32},[29,31948,30521],{"class":305},[29,31950,31951],{"class":309}," copy\n",[29,31953,31954,31956],{"class":31,"line":43},[29,31955,30521],{"class":305},[29,31957,31958],{"class":309}," time\n",[29,31960,31961],{"class":31,"line":51},[29,31962,2575],{"emptyLinePlaceholder":233},[29,31964,31965,31967,31970,31972],{"class":31,"line":59},[29,31966,30521],{"class":305},[29,31968,31969],{"class":309}," pandas ",[29,31971,31512],{"class":305},[29,31973,31974],{"class":309}," pd\n",[29,31976,31977,31979],{"class":31,"line":67},[29,31978,30521],{"class":305},[29,31980,30524],{"class":309},[29,31982,31983,31985,31987,31989],{"class":31,"line":75},[29,31984,30866],{"class":305},[29,31986,31544],{"class":309},[29,31988,30521],{"class":305},[29,31990,31991],{"class":309}," Dataset\n",[29,31993,31994,31996,31998,32000],{"class":31,"line":83},[29,31995,30866],{"class":305},[29,31997,31497],{"class":309},[29,31999,30521],{"class":305},[29,32001,31502],{"class":309},[29,32003,32004,32006,32008,32010],{"class":31,"line":158},[29,32005,30866],{"class":305},[29,32007,31527],{"class":309},[29,32009,30521],{"class":305},[29,32011,31532],{"class":309},[29,32013,32014,32016,32018,32020],{"class":31,"line":166},[29,32015,30521],{"class":305},[29,32017,31544],{"class":309},[29,32019,31512],{"class":305},[29,32021,31549],{"class":309},[29,32023,32024,32026,32028,32030],{"class":31,"line":1505},[29,32025,30521],{"class":305},[29,32027,31561],{"class":309},[29,32029,31512],{"class":305},[29,32031,31566],{"class":309},[29,32033,32034],{"class":31,"line":1788},[29,32035,32036],{"class":367},"# 导入模型\n",[29,32038,32039,32041,32044,32046],{"class":31,"line":1793},[29,32040,30866],{"class":305},[29,32042,32043],{"class":309}," model ",[29,32045,30521],{"class":305},[29,32047,32048],{"class":309}," LeNet\n",[29,32050,32051,32053,32055,32057],{"class":31,"line":1799},[29,32052,30866],{"class":305},[29,32054,30869],{"class":309},[29,32056,30521],{"class":305},[29,32058,30874],{"class":309},[29,32060,32061],{"class":31,"line":1804},[29,32062,2575],{"emptyLinePlaceholder":233},[29,32064,32065],{"class":31,"line":1818},[29,32066,2575],{"emptyLinePlaceholder":233},[29,32068,32069],{"class":31,"line":1823},[29,32070,32071],{"class":367},"# 处理训练集与验证集函数--->划分数据集\n",[29,32073,32074,32077,32080],{"class":31,"line":1829},[29,32075,32076],{"class":305},"def",[29,32078,32079],{"class":35}," train_val_data_process",[29,32081,32082],{"class":309},"():\n",[29,32084,32085,32088,32090,32092,32094],{"class":31,"line":1850},[29,32086,32087],{"class":309},"    train_data",[29,32089,355],{"class":305},[29,32091,31584],{"class":309},[29,32093,31592],{"class":103},[29,32095,31595],{"class":309},[29,32097,32098,32101,32103,32105],{"class":31,"line":1855},[29,32099,32100],{"class":5391},"                            train",[29,32102,355],{"class":305},[29,32104,31605],{"class":39},[29,32106,31595],{"class":309},[29,32108,32109,32112,32114,32116,32118,32120,32122],{"class":31,"line":1869},[29,32110,32111],{"class":5391},"                            transform",[29,32113,355],{"class":305},[29,32115,31622],{"class":309},[29,32117,31625],{"class":5391},[29,32119,355],{"class":305},[29,32121,1209],{"class":39},[29,32123,31633],{"class":309},[29,32125,32126,32129,32131,32133],{"class":31,"line":1874},[29,32127,32128],{"class":5391},"                            download",[29,32130,355],{"class":305},[29,32132,31605],{"class":39},[29,32134,316],{"class":309},[29,32136,32137,32140,32142,32145,32148,32150,32153,32155,32157,32160,32162,32164,32167,32169,32171],{"class":31,"line":1903},[29,32138,32139],{"class":309},"    train_data,val_data",[29,32141,355],{"class":305},[29,32143,32144],{"class":309},"Data.random_split(train_data,[",[29,32146,32147],{"class":39},"round",[29,32149,310],{"class":309},[29,32151,32152],{"class":39},"0.8",[29,32154,763],{"class":305},[29,32156,7533],{"class":39},[29,32158,32159],{"class":309},"(train_data)),",[29,32161,32147],{"class":39},[29,32163,310],{"class":309},[29,32165,32166],{"class":39},"0.2",[29,32168,763],{"class":305},[29,32170,7533],{"class":39},[29,32172,32173],{"class":309},"(train_data))])\n",[29,32175,32176,32179,32181,32184,32186,32188],{"class":31,"line":1908},[29,32177,32178],{"class":309},"    train_dataloader ",[29,32180,355],{"class":305},[29,32182,32183],{"class":309}," Data.DataLoader(",[29,32185,31666],{"class":5391},[29,32187,355],{"class":305},[29,32189,31671],{"class":309},[29,32191,32192,32195,32197,32200],{"class":31,"line":1925},[29,32193,32194],{"class":5391},"                                       batch_size",[29,32196,355],{"class":305},[29,32198,32199],{"class":39},"128",[29,32201,31595],{"class":309},[29,32203,32204,32207,32209,32211],{"class":31,"line":1930},[29,32205,32206],{"class":5391},"                                       shuffle",[29,32208,355],{"class":305},[29,32210,31605],{"class":39},[29,32212,31595],{"class":309},[29,32214,32215],{"class":31,"line":1935},[29,32216,32217],{"class":367},"                                       # 规定8个进程\n",[29,32219,32220,32223,32225,32227],{"class":31,"line":1940},[29,32221,32222],{"class":5391},"                                       num_workers",[29,32224,355],{"class":305},[29,32226,703],{"class":39},[29,32228,316],{"class":309},[29,32230,32231,32234,32236,32238,32240,32242],{"class":31,"line":1954},[29,32232,32233],{"class":309},"    val_dataloader",[29,32235,355],{"class":305},[29,32237,31663],{"class":309},[29,32239,31666],{"class":5391},[29,32241,355],{"class":305},[29,32243,32244],{"class":309},"val_data,\n",[29,32246,32247,32250,32252,32254],{"class":31,"line":1959},[29,32248,32249],{"class":5391},"                                   batch_size",[29,32251,355],{"class":305},[29,32253,32199],{"class":39},[29,32255,31595],{"class":309},[29,32257,32258,32261,32263,32265],{"class":31,"line":2752},[29,32259,32260],{"class":5391},"                                   shuffle",[29,32262,355],{"class":305},[29,32264,31605],{"class":39},[29,32266,31595],{"class":309},[29,32268,32269,32272,32274,32276],{"class":31,"line":2766},[29,32270,32271],{"class":5391},"                                   num_workers",[29,32273,355],{"class":305},[29,32275,703],{"class":39},[29,32277,316],{"class":309},[29,32279,32280,32282],{"class":31,"line":2774},[29,32281,4265],{"class":305},[29,32283,32284],{"class":309}," train_dataloader,val_dataloader\n",[29,32286,32287],{"class":31,"line":2779},[29,32288,2575],{"emptyLinePlaceholder":233},[29,32290,32291],{"class":31,"line":2785},[29,32292,32293],{"class":367},"# 验证是否出错\n",[29,32295,32296],{"class":31,"line":2791},[29,32297,32298],{"class":367},"# train_val_data_process()\n",[29,32300,32301],{"class":31,"line":2796},[29,32302,2575],{"emptyLinePlaceholder":233},[29,32304,32305],{"class":31,"line":8123},[29,32306,32307],{"class":367},"# 定义模型训练函数\n",[29,32309,32310,32312,32315],{"class":31,"line":8147},[29,32311,32076],{"class":305},[29,32313,32314],{"class":35}," train_model_process",[29,32316,32317],{"class":309},"(model,train_dataloader,val_dataloader,num_epochs):\n",[29,32319,32320,32322,32324,32326,32328,32330,32332,32334,32337],{"class":31,"line":8152},[29,32321,31366],{"class":309},[29,32323,355],{"class":305},[29,32325,30580],{"class":309},[29,32327,31373],{"class":103},[29,32329,1880],{"class":305},[29,32331,31378],{"class":309},[29,32333,1877],{"class":305},[29,32335,32336],{"class":103}," 'cpu'",[29,32338,316],{"class":309},[29,32340,32341],{"class":31,"line":8158},[29,32342,2575],{"emptyLinePlaceholder":233},[29,32344,32345],{"class":31,"line":8185},[29,32346,2575],{"emptyLinePlaceholder":233},[29,32348,32349],{"class":31,"line":8190},[29,32350,32351],{"class":367},"    # 定义优化器\n",[29,32353,32354],{"class":31,"line":8196},[29,32355,32356],{"class":367},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[29,32358,32359],{"class":31,"line":8208},[29,32360,32361],{"class":367},"    # lr为学习率\n",[29,32363,32364,32367,32369,32372,32375,32377,32380],{"class":31,"line":8220},[29,32365,32366],{"class":309},"    optimizer",[29,32368,355],{"class":305},[29,32370,32371],{"class":309},"torch.optim.Adam(model.parameters(),",[29,32373,32374],{"class":5391},"lr",[29,32376,355],{"class":305},[29,32378,32379],{"class":39},"0.001",[29,32381,316],{"class":309},[29,32383,32384],{"class":31,"line":8232},[29,32385,2575],{"emptyLinePlaceholder":233},[29,32387,32388],{"class":31,"line":9891},[29,32389,32390],{"class":367},"    # 定义损失函数使用交叉熵损失函数\n",[29,32392,32393,32396,32398],{"class":31,"line":9916},[29,32394,32395],{"class":309},"    criterion",[29,32397,355],{"class":305},[29,32399,32400],{"class":309},"nn.CrossEntropyLoss()\n",[29,32402,32403],{"class":31,"line":9939},[29,32404,2575],{"emptyLinePlaceholder":233},[29,32406,32407],{"class":31,"line":9963},[29,32408,32409],{"class":367},"    # 将模型放到GPU中进行训练\n",[29,32411,32412,32414,32416],{"class":31,"line":9968},[29,32413,31418],{"class":309},[29,32415,355],{"class":305},[29,32417,32418],{"class":309},"model.to(device)\n",[29,32420,32421],{"class":31,"line":9973},[29,32422,32423],{"class":367},"    # 复制当前模型的参数\n",[29,32425,32426],{"class":31,"line":9978},[29,32427,32428],{"class":367},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[29,32430,32431],{"class":31,"line":9987},[29,32432,32433],{"class":367},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[29,32435,32436,32439,32441],{"class":31,"line":9992},[29,32437,32438],{"class":309},"    best_model_wts",[29,32440,355],{"class":305},[29,32442,32443],{"class":309},"copy.deepcopy(model.state_dict())\n",[29,32445,32446],{"class":31,"line":9998},[29,32447,2575],{"emptyLinePlaceholder":233},[29,32449,32450],{"class":31,"line":10019},[29,32451,2575],{"emptyLinePlaceholder":233},[29,32453,32454],{"class":31,"line":10025},[29,32455,32456],{"class":367},"    # 初始化参数\n",[29,32458,32459],{"class":31,"line":10039},[29,32460,32461],{"class":367},"    # 最高准确度\n",[29,32463,32464,32467,32469],{"class":31,"line":10045},[29,32465,32466],{"class":309},"    best_acc",[29,32468,355],{"class":305},[29,32470,32471],{"class":39},"0.0\n",[29,32473,32474],{"class":31,"line":10072},[29,32475,32476],{"class":367},"    # 训练集损失列表\n",[29,32478,32479,32482,32484],{"class":31,"line":10081},[29,32480,32481],{"class":309},"    train_loss_all",[29,32483,355],{"class":305},[29,32485,32486],{"class":309},"[]\n",[29,32488,32489],{"class":31,"line":10087},[29,32490,32491],{"class":367},"    # 验证集函数列表\n",[29,32493,32494,32497,32499],{"class":31,"line":10095},[29,32495,32496],{"class":309},"    val_loss_all",[29,32498,355],{"class":305},[29,32500,32486],{"class":309},[29,32502,32503],{"class":31,"line":10100},[29,32504,32505],{"class":367},"    # 训练集准确度列表\n",[29,32507,32508,32511,32513],{"class":31,"line":16779},[29,32509,32510],{"class":309},"    train_acc_all",[29,32512,355],{"class":305},[29,32514,32486],{"class":309},[29,32516,32517],{"class":31,"line":16785},[29,32518,32519],{"class":367},"    # 验证集准确度列表\n",[29,32521,32522,32525,32527],{"class":31,"line":16808},[29,32523,32524],{"class":309},"    val_acc_all",[29,32526,355],{"class":305},[29,32528,32486],{"class":309},[29,32530,32531],{"class":31,"line":16814},[29,32532,2575],{"emptyLinePlaceholder":233},[29,32534,32535],{"class":31,"line":16837},[29,32536,32537],{"class":367},"    # 保存当前时间--->方便看每轮训练的时间\n",[29,32539,32540,32543,32545],{"class":31,"line":16851},[29,32541,32542],{"class":309},"    since",[29,32544,355],{"class":305},[29,32546,32547],{"class":309},"time.time()\n",[29,32549,32550],{"class":31,"line":16871},[29,32551,2575],{"emptyLinePlaceholder":233},[29,32553,32554],{"class":31,"line":16877},[29,32555,2575],{"emptyLinePlaceholder":233},[29,32557,32558],{"class":31,"line":16888},[29,32559,32560],{"class":367},"    # 准备工作完成--->开始训练模型\n",[29,32562,32563,32565,32568,32570,32573],{"class":31,"line":16911},[29,32564,3376],{"class":305},[29,32566,32567],{"class":309}," epoch ",[29,32569,26172],{"class":305},[29,32571,32572],{"class":39}," range",[29,32574,32575],{"class":309},"(num_epochs):\n",[29,32577,32578,32581,32583,32586,32589,32591,32593,32595,32598,32600,32602],{"class":31,"line":16933},[29,32579,32580],{"class":39},"        print",[29,32582,310],{"class":309},[29,32584,32585],{"class":103},"\"Epoch ",[29,32587,32588],{"class":39},"{}",[29,32590,892],{"class":103},[29,32592,32588],{"class":39},[29,32594,559],{"class":103},[29,32596,32597],{"class":309},".format(epoch,num_epochs",[29,32599,840],{"class":305},[29,32601,525],{"class":39},[29,32603,30626],{"class":309},[29,32605,32606,32608,32610,32613,32615,32617],{"class":31,"line":16938},[29,32607,32580],{"class":39},[29,32609,310],{"class":309},[29,32611,32612],{"class":103},"\"-\"",[29,32614,763],{"class":305},[29,32616,754],{"class":39},[29,32618,316],{"class":309},[29,32620,32621],{"class":31,"line":16944},[29,32622,2575],{"emptyLinePlaceholder":233},[29,32624,32625],{"class":31,"line":16958},[29,32626,32627],{"class":367},"        # 初始化参数\n",[29,32629,32630],{"class":31,"line":16971},[29,32631,32632],{"class":367},"        # 训练集损失函数\n",[29,32634,32635,32638,32640],{"class":31,"line":16976},[29,32636,32637],{"class":309},"        train_loss",[29,32639,355],{"class":305},[29,32641,32471],{"class":39},[29,32643,32644],{"class":31,"line":16990},[29,32645,32646],{"class":367},"        # 训练集准确度\n",[29,32648,32649,32652,32654],{"class":31,"line":16995},[29,32650,32651],{"class":309},"        train_corrects",[29,32653,355],{"class":305},[29,32655,3260],{"class":39},[29,32657,32658],{"class":31,"line":17001},[29,32659,32660],{"class":367},"        # 验证集损失函数\n",[29,32662,32663,32666,32668],{"class":31,"line":17006},[29,32664,32665],{"class":309},"        val_loss",[29,32667,355],{"class":305},[29,32669,32471],{"class":39},[29,32671,32672],{"class":31,"line":17020},[29,32673,32674],{"class":367},"        # 验证集准确度\n",[29,32676,32677,32680,32682],{"class":31,"line":17025},[29,32678,32679],{"class":309},"        val_corrects",[29,32681,355],{"class":305},[29,32683,3260],{"class":39},[29,32685,32686],{"class":31,"line":17030},[29,32687,32688],{"class":367},"        # 训练集样本数量\n",[29,32690,32691,32694,32696],{"class":31,"line":17044},[29,32692,32693],{"class":309},"        train_num",[29,32695,355],{"class":305},[29,32697,3260],{"class":39},[29,32699,32700],{"class":31,"line":17056},[29,32701,32702],{"class":367},"        # 验证集样本数量\n",[29,32704,32705,32708,32710],{"class":31,"line":17061},[29,32706,32707],{"class":309},"        val_num",[29,32709,355],{"class":305},[29,32711,3260],{"class":39},[29,32713,32714],{"class":31,"line":17074},[29,32715,32716],{"class":367},"        # 将数据放到设备,并开始训练\n",[29,32718,32719,32721,32723,32725,32727],{"class":31,"line":17079},[29,32720,3578],{"class":305},[29,32722,31730],{"class":309},[29,32724,26172],{"class":305},[29,32726,31735],{"class":39},[29,32728,32729],{"class":309},"(train_dataloader):\n",[29,32731,32732],{"class":31,"line":17084},[29,32733,32734],{"class":367},"            # 将特征放入到训练设备\n",[29,32736,32737,32740,32742],{"class":31,"line":17089},[29,32738,32739],{"class":309},"            b_x",[29,32741,355],{"class":305},[29,32743,32744],{"class":309},"b_x.to(device)\n",[29,32746,32747],{"class":31,"line":17102},[29,32748,32749],{"class":367},"            # 将标签放入到训练设备当中\n",[29,32751,32752,32755,32757],{"class":31,"line":17107},[29,32753,32754],{"class":309},"            b_y",[29,32756,355],{"class":305},[29,32758,32759],{"class":309},"b_y.to(device)\n",[29,32761,32763],{"class":31,"line":32762},98,[29,32764,32765],{"class":367},"            # 设置模型为训练模式\n",[29,32767,32769],{"class":31,"line":32768},99,[29,32770,32771],{"class":309},"            model.train()\n",[29,32773,32775],{"class":31,"line":32774},100,[29,32776,32777],{"class":367},"            # 将数据放到模型当中,开始前向传播\n",[29,32779,32781],{"class":31,"line":32780},101,[29,32782,32783],{"class":367},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[29,32785,32787,32790,32792],{"class":31,"line":32786},102,[29,32788,32789],{"class":309},"            output",[29,32791,355],{"class":305},[29,32793,32794],{"class":309},"model(b_x)\n",[29,32796,32798],{"class":31,"line":32797},103,[29,32799,32800],{"class":367},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[29,32802,32804,32807,32809,32812,32815,32817,32819],{"class":31,"line":32803},104,[29,32805,32806],{"class":309},"            pre_lab",[29,32808,355],{"class":305},[29,32810,32811],{"class":309},"torch.argmax(output,",[29,32813,32814],{"class":5391},"dim",[29,32816,355],{"class":305},[29,32818,525],{"class":39},[29,32820,316],{"class":309},[29,32822,32824],{"class":31,"line":32823},105,[29,32825,32826],{"class":367},"            # 计算每一个batch的损失函数\n",[29,32828,32830,32833,32835],{"class":31,"line":32829},106,[29,32831,32832],{"class":309},"            loss",[29,32834,355],{"class":305},[29,32836,32837],{"class":309},"criterion(output,b_y)\n",[29,32839,32841],{"class":31,"line":32840},107,[29,32842,32843],{"class":367},"            # 将梯度初始化为0\n",[29,32845,32847],{"class":31,"line":32846},108,[29,32848,32849],{"class":309},"            optimizer.zero_grad()\n",[29,32851,32853],{"class":31,"line":32852},109,[29,32854,32855],{"class":367},"            # 梯度置为0后再进行反向传播\n",[29,32857,32859],{"class":31,"line":32858},110,[29,32860,32861],{"class":309},"            loss.backward()\n",[29,32863,32865],{"class":31,"line":32864},111,[29,32866,32867],{"class":367},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[29,32869,32871],{"class":31,"line":32870},112,[29,32872,32873],{"class":309},"            optimizer.step()\n",[29,32875,32877],{"class":31,"line":32876},113,[29,32878,32879],{"class":367},"            # loss.item()指的是batch的平均损失\n",[29,32881,32883,32886,32888,32891,32893,32896,32898],{"class":31,"line":32882},114,[29,32884,32885],{"class":309},"            train_loss",[29,32887,9652],{"class":305},[29,32889,32890],{"class":309},"loss.item()",[29,32892,763],{"class":305},[29,32894,32895],{"class":309},"b_x.size(",[29,32897,499],{"class":39},[29,32899,316],{"class":309},[29,32901,32903],{"class":31,"line":32902},115,[29,32904,32905],{"class":367},"            # 计算每个批次中正确预测的数量\n",[29,32907,32909,32912,32914,32917,32919],{"class":31,"line":32908},116,[29,32910,32911],{"class":309},"            train_corrects",[29,32913,9652],{"class":305},[29,32915,32916],{"class":309},"torch.sum(pre_lab",[29,32918,3124],{"class":305},[29,32920,32921],{"class":309},"b_y.data)\n",[29,32923,32925],{"class":31,"line":32924},117,[29,32926,32927],{"class":367},"            # 计算目前为止一共处理了多少样本\n",[29,32929,32931,32934,32936,32938,32940],{"class":31,"line":32930},118,[29,32932,32933],{"class":309},"            train_num",[29,32935,9652],{"class":305},[29,32937,32895],{"class":309},[29,32939,499],{"class":39},[29,32941,316],{"class":309},[29,32943,32945],{"class":31,"line":32944},119,[29,32946,32947],{"class":367},"        # 验证数据\n",[29,32949,32951,32953,32956,32958,32960],{"class":31,"line":32950},120,[29,32952,3578],{"class":305},[29,32954,32955],{"class":309}," step ,(b_x,b_y) ",[29,32957,26172],{"class":305},[29,32959,31735],{"class":39},[29,32961,32962],{"class":309},"(val_dataloader):\n",[29,32964,32966],{"class":31,"line":32965},121,[29,32967,32968],{"class":367},"            # 将特征放到验证设备当中\n",[29,32970,32972,32974,32976],{"class":31,"line":32971},122,[29,32973,32739],{"class":309},[29,32975,355],{"class":305},[29,32977,32744],{"class":309},[29,32979,32981],{"class":31,"line":32980},123,[29,32982,32983],{"class":367},"            # 将标签放到放到训练设备当中\n",[29,32985,32987,32989,32991],{"class":31,"line":32986},124,[29,32988,32754],{"class":309},[29,32990,355],{"class":305},[29,32992,32759],{"class":309},[29,32994,32996],{"class":31,"line":32995},125,[29,32997,32998],{"class":367},"            # 开启验证模式，设置模型为评估模式\n",[29,33000,33002],{"class":31,"line":33001},126,[29,33003,33004],{"class":309},"            model.eval()\n",[29,33006,33008,33011],{"class":31,"line":33007},127,[29,33009,33010],{"class":305},"            with",[29,33012,33013],{"class":309}," torch.no_grad():\n",[29,33015,33017],{"class":31,"line":33016},128,[29,33018,33019],{"class":367},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[29,33021,33023,33026,33028],{"class":31,"line":33022},129,[29,33024,33025],{"class":309},"                output ",[29,33027,355],{"class":305},[29,33029,33030],{"class":309}," model(b_x)\n",[29,33032,33034],{"class":31,"line":33033},130,[29,33035,33036],{"class":367},"                # 查找每一行中最大值对应的下标\n",[29,33038,33040,33043,33045,33048,33050,33052,33054],{"class":31,"line":33039},131,[29,33041,33042],{"class":309},"                pre_lab ",[29,33044,355],{"class":305},[29,33046,33047],{"class":309}," torch.argmax(output, ",[29,33049,32814],{"class":5391},[29,33051,355],{"class":305},[29,33053,525],{"class":39},[29,33055,316],{"class":309},[29,33057,33059],{"class":31,"line":33058},132,[29,33060,33061],{"class":367},"                # 计算验证集上的当前 batch 损失\n",[29,33063,33065,33068,33070],{"class":31,"line":33064},133,[29,33066,33067],{"class":309},"                val_batch_loss ",[29,33069,355],{"class":305},[29,33071,33072],{"class":309}," criterion(output, b_y)\n",[29,33074,33076],{"class":31,"line":33075},134,[29,33077,33078],{"class":367},"                # 对损失函数进行累加（按样本数加权）\n",[29,33080,33082,33085,33087,33090,33092,33095,33097],{"class":31,"line":33081},135,[29,33083,33084],{"class":309},"                val_loss ",[29,33086,9652],{"class":305},[29,33088,33089],{"class":309}," val_batch_loss.item() ",[29,33091,763],{"class":305},[29,33093,33094],{"class":309}," b_x.size(",[29,33096,499],{"class":39},[29,33098,316],{"class":309},[29,33100,33102,33105,33107,33110,33112],{"class":31,"line":33101},136,[29,33103,33104],{"class":309},"                val_corrects ",[29,33106,9652],{"class":305},[29,33108,33109],{"class":309}," torch.sum(pre_lab ",[29,33111,3124],{"class":305},[29,33113,33114],{"class":309}," b_y.data)\n",[29,33116,33118],{"class":31,"line":33117},137,[29,33119,33120],{"class":367},"                # 当前用于验证的样本数量\n",[29,33122,33124,33127,33129,33131,33133],{"class":31,"line":33123},138,[29,33125,33126],{"class":309},"            val_num ",[29,33128,9652],{"class":305},[29,33130,33094],{"class":309},[29,33132,499],{"class":39},[29,33134,316],{"class":309},[29,33136,33138],{"class":31,"line":33137},139,[29,33139,33140],{"class":367},"        # 计算并保存每一次迭代的loss值和准确率\n",[29,33142,33144],{"class":31,"line":33143},140,[29,33145,33146],{"class":367},"        # 计算并保存训练集的loss值\n",[29,33148,33150,33153,33155],{"class":31,"line":33149},141,[29,33151,33152],{"class":309},"        train_loss_all.append(train_loss",[29,33154,892],{"class":305},[29,33156,33157],{"class":309},"train_num)\n",[29,33159,33161],{"class":31,"line":33160},142,[29,33162,33163],{"class":367},"        # 取双精度\n",[29,33165,33167],{"class":31,"line":33166},143,[29,33168,33169],{"class":367},"        # 计算并保存训练集的准确率\n",[29,33171,33173,33176,33178],{"class":31,"line":33172},144,[29,33174,33175],{"class":309},"        train_acc_all.append(train_corrects.double().item()",[29,33177,892],{"class":305},[29,33179,33157],{"class":309},[29,33181,33183],{"class":31,"line":33182},145,[29,33184,33185],{"class":367},"        # 计算并保存验证集的loss值\n",[29,33187,33189,33192,33194],{"class":31,"line":33188},146,[29,33190,33191],{"class":309},"        val_loss_all.append(val_loss",[29,33193,892],{"class":305},[29,33195,33196],{"class":309},"val_num)\n",[29,33198,33200],{"class":31,"line":33199},147,[29,33201,33202],{"class":367},"        # 计算并保存验证集的准确率\n",[29,33204,33206,33209,33211],{"class":31,"line":33205},148,[29,33207,33208],{"class":309},"        val_acc_all.append(val_corrects.double().item()",[29,33210,892],{"class":305},[29,33212,33196],{"class":309},[29,33214,33216],{"class":31,"line":33215},149,[29,33217,2575],{"emptyLinePlaceholder":233},[29,33219,33221],{"class":31,"line":33220},150,[29,33222,33223],{"class":367},"        # 打印训练一轮的loss值和准确率\n",[29,33225,33227,33229,33231,33233,33235,33238,33240,33243,33245,33248,33250,33252,33254,33256,33259,33261,33263,33266,33268,33270],{"class":31,"line":33226},151,[29,33228,32580],{"class":39},[29,33230,310],{"class":309},[29,33232,3767],{"class":103},[29,33234,32588],{"class":39},[29,33236,33237],{"class":103},"train loss:",[29,33239,1204],{"class":39},[29,33241,33242],{"class":305},":.4f",[29,33244,1254],{"class":39},[29,33246,33247],{"class":103}," train acc:",[29,33249,1204],{"class":39},[29,33251,33242],{"class":305},[29,33253,1254],{"class":39},[29,33255,3767],{"class":103},[29,33257,33258],{"class":309},".format(epoch,train_loss_all[",[29,33260,840],{"class":305},[29,33262,525],{"class":39},[29,33264,33265],{"class":309},"],train_acc_all[",[29,33267,840],{"class":305},[29,33269,525],{"class":39},[29,33271,33272],{"class":309},"]))\n",[29,33274,33276,33278,33280,33282,33284,33287,33289,33291,33293,33296,33298,33300,33302,33304,33307,33309,33311,33314,33316,33318],{"class":31,"line":33275},152,[29,33277,32580],{"class":39},[29,33279,310],{"class":309},[29,33281,3767],{"class":103},[29,33283,32588],{"class":39},[29,33285,33286],{"class":103},"val loss:",[29,33288,1204],{"class":39},[29,33290,33242],{"class":305},[29,33292,1254],{"class":39},[29,33294,33295],{"class":103}," val acc:",[29,33297,1204],{"class":39},[29,33299,33242],{"class":305},[29,33301,1254],{"class":39},[29,33303,3767],{"class":103},[29,33305,33306],{"class":309},".format(epoch,val_loss_all[",[29,33308,840],{"class":305},[29,33310,525],{"class":39},[29,33312,33313],{"class":309},"],val_acc_all[",[29,33315,840],{"class":305},[29,33317,525],{"class":39},[29,33319,33272],{"class":309},[29,33321,33323],{"class":31,"line":33322},153,[29,33324,2575],{"emptyLinePlaceholder":233},[29,33326,33328],{"class":31,"line":33327},154,[29,33329,33330],{"class":367},"        # 判断准确度--->保存最优模型\n",[29,33332,33334,33336,33339,33341,33343,33345,33347],{"class":31,"line":33333},155,[29,33335,2672],{"class":305},[29,33337,33338],{"class":309}," val_acc_all[",[29,33340,840],{"class":305},[29,33342,525],{"class":39},[29,33344,1248],{"class":309},[29,33346,1268],{"class":305},[29,33348,33349],{"class":309},"best_acc:\n",[29,33351,33353],{"class":31,"line":33352},156,[29,33354,33355],{"class":367},"            # 保存当前模型准确度\n",[29,33357,33359,33362,33364,33366,33369,33371,33373],{"class":31,"line":33358},157,[29,33360,33361],{"class":309},"            best_acc:",[29,33363,349],{"class":39},[29,33365,355],{"class":305},[29,33367,33368],{"class":309},"val_acc_all[",[29,33370,840],{"class":305},[29,33372,525],{"class":39},[29,33374,33375],{"class":309},"]\n",[29,33377,33379],{"class":31,"line":33378},158,[29,33380,33381],{"class":367},"            # 保存当前的准确度\n",[29,33383,33385],{"class":31,"line":33384},159,[29,33386,33387],{"class":367},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[29,33389,33391,33394,33396],{"class":31,"line":33390},160,[29,33392,33393],{"class":309},"            best_model_wts",[29,33395,355],{"class":305},[29,33397,32443],{"class":309},[29,33399,33401],{"class":31,"line":33400},161,[29,33402,2575],{"emptyLinePlaceholder":233},[29,33404,33406],{"class":31,"line":33405},162,[29,33407,33408],{"class":367},"        # 计算耗时\n",[29,33410,33412,33415,33417,33420,33422],{"class":31,"line":33411},163,[29,33413,33414],{"class":309},"        time_use",[29,33416,355],{"class":305},[29,33418,33419],{"class":309},"time.time()",[29,33421,840],{"class":305},[29,33423,33424],{"class":309},"since\n",[29,33426,33428,33430,33432,33435,33437,33440,33442,33444,33446,33448,33450,33453,33456,33459,33461,33464,33466,33468],{"class":31,"line":33427},164,[29,33429,32580],{"class":39},[29,33431,310],{"class":309},[29,33433,33434],{"class":103},"'训练和验证耗费的时间",[29,33436,1204],{"class":39},[29,33438,33439],{"class":305},":.0f",[29,33441,1254],{"class":39},[29,33443,852],{"class":103},[29,33445,1204],{"class":39},[29,33447,33439],{"class":305},[29,33449,1254],{"class":39},[29,33451,33452],{"class":103},"s'",[29,33454,33455],{"class":309},".format(time_use",[29,33457,33458],{"class":305},"\u002F\u002F",[29,33460,1215],{"class":39},[29,33462,33463],{"class":309},",time_use",[29,33465,636],{"class":305},[29,33467,1215],{"class":39},[29,33469,30626],{"class":309},[29,33471,33473],{"class":31,"line":33472},165,[29,33474,33475],{"class":367},"    # 选择最优参数\n",[29,33477,33479],{"class":31,"line":33478},166,[29,33480,33481],{"class":367},"    # 加载最高准确率下的模型参数\n",[29,33483,33485],{"class":31,"line":33484},167,[29,33486,33487],{"class":367},"    # model.load_state_dict(best_model_wts)\n",[29,33489,33491,33494,33497],{"class":31,"line":33490},168,[29,33492,33493],{"class":309},"    torch.save(model.state_dict(best_model_wts), ",[29,33495,33496],{"class":103},"'.\u002Fbest_model.pth'",[29,33498,316],{"class":309},[29,33500,33502],{"class":31,"line":33501},169,[29,33503,33504],{"class":367},"    # 或者写成\n",[29,33506,33508],{"class":31,"line":33507},170,[29,33509,33510],{"class":367},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[29,33512,33514],{"class":31,"line":33513},171,[29,33515,33516],{"class":367},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[29,33518,33520,33523,33525,33528,33531,33533],{"class":31,"line":33519},172,[29,33521,33522],{"class":309},"    train_process",[29,33524,355],{"class":305},[29,33526,33527],{"class":309},"pd.DataFrame(",[29,33529,33530],{"class":5391},"data",[29,33532,355],{"class":305},[29,33534,1722],{"class":309},[29,33536,33538,33541,33543,33546],{"class":31,"line":33537},173,[29,33539,33540],{"class":103},"        \"epoch\"",[29,33542,1167],{"class":309},[29,33544,33545],{"class":39},"range",[29,33547,33548],{"class":309},"(num_epochs),\n",[29,33550,33552,33555],{"class":31,"line":33551},174,[29,33553,33554],{"class":103},"        \"train_loss_all\"",[29,33556,33557],{"class":309},":train_loss_all,\n",[29,33559,33561,33564],{"class":31,"line":33560},175,[29,33562,33563],{"class":103},"        \"val_loss_all\"",[29,33565,33566],{"class":309},":val_loss_all,\n",[29,33568,33570,33573],{"class":31,"line":33569},176,[29,33571,33572],{"class":103},"        \"train_acc_all\"",[29,33574,33575],{"class":309},":train_acc_all,\n",[29,33577,33579,33582],{"class":31,"line":33578},177,[29,33580,33581],{"class":103},"        \"val_acc_all\"",[29,33583,33584],{"class":309},":val_acc_all\n",[29,33586,33588],{"class":31,"line":33587},178,[29,33589,33590],{"class":309},"    })\n",[29,33592,33594],{"class":31,"line":33593},179,[29,33595,33596],{"class":367},"    # 返回训练保存的过程\n",[29,33598,33600,33602],{"class":31,"line":33599},180,[29,33601,4265],{"class":305},[29,33603,33604],{"class":309}," train_process\n",[29,33606,33608],{"class":31,"line":33607},181,[29,33609,2575],{"emptyLinePlaceholder":233},[29,33611,33613],{"class":31,"line":33612},182,[29,33614,33615],{"class":367},"# 将loss值和精度按照图片的形式展示出来\n",[29,33617,33619,33621,33624],{"class":31,"line":33618},183,[29,33620,32076],{"class":305},[29,33622,33623],{"class":35}," matplot_acc_loss",[29,33625,33626],{"class":309},"(train_process):\n",[29,33628,33630],{"class":31,"line":33629},184,[29,33631,33632],{"class":367},"    # 设置图的大小\n",[29,33634,33636,33639,33641,33643,33645,33647,33649,33651],{"class":31,"line":33635},185,[29,33637,33638],{"class":309},"    plt.figure(",[29,33640,31822],{"class":5391},[29,33642,355],{"class":305},[29,33644,310],{"class":309},[29,33646,806],{"class":39},[29,33648,686],{"class":309},[29,33650,601],{"class":39},[29,33652,30626],{"class":309},[29,33654,33656],{"class":31,"line":33655},186,[29,33657,33658],{"class":367},"    # 设置图中有几张图\n",[29,33660,33662],{"class":31,"line":33661},187,[29,33663,33664],{"class":367},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[29,33666,33668],{"class":31,"line":33667},188,[29,33669,33670],{"class":367},"    # ①loss图\n",[29,33672,33674,33676,33678,33680,33682,33684,33686],{"class":31,"line":33673},189,[29,33675,31856],{"class":309},[29,33677,525],{"class":39},[29,33679,686],{"class":309},[29,33681,386],{"class":39},[29,33683,686],{"class":309},[29,33685,525],{"class":39},[29,33687,316],{"class":309},[29,33689,33691],{"class":31,"line":33690},190,[29,33692,33693],{"class":367},"    # 补充:\n",[29,33695,33697],{"class":31,"line":33696},191,[29,33698,33699],{"class":367},"    # plt.subplot(nrows, ncols, index)\n",[29,33701,33703],{"class":31,"line":33702},192,[29,33704,33705],{"class":367},"    # nrows：行数\n",[29,33707,33709],{"class":31,"line":33708},193,[29,33710,33711],{"class":367},"    # ncols：列数\n",[29,33713,33715],{"class":31,"line":33714},194,[29,33716,33717],{"class":367},"    # index：目前选中第几个子图（从1开始）\n",[29,33719,33721,33724,33727,33730,33733,33735,33738,33740,33743],{"class":31,"line":33720},195,[29,33722,33723],{"class":309},"    plt.plot(train_process[",[29,33725,33726],{"class":103},"\"epoch\"",[29,33728,33729],{"class":309},"],train_process.train_loss_all,",[29,33731,33732],{"class":103},"'ro-'",[29,33734,686],{"class":309},[29,33736,33737],{"class":5391},"label",[29,33739,355],{"class":305},[29,33741,33742],{"class":103},"'train loss'",[29,33744,316],{"class":309},[29,33746,33748,33750,33752,33755,33758,33760,33762,33764,33767],{"class":31,"line":33747},196,[29,33749,33723],{"class":309},[29,33751,33726],{"class":103},[29,33753,33754],{"class":309},"],train_process.val_loss_all,",[29,33756,33757],{"class":103},"'bs--'",[29,33759,686],{"class":309},[29,33761,33737],{"class":5391},[29,33763,355],{"class":305},[29,33765,33766],{"class":103},"'val loss'",[29,33768,316],{"class":309},[29,33770,33772],{"class":31,"line":33771},197,[29,33773,33774],{"class":367},"    # 添加一个图例\n",[29,33776,33778],{"class":31,"line":33777},198,[29,33779,33780],{"class":309},"    plt.legend()\n",[29,33782,33784],{"class":31,"line":33783},199,[29,33785,33786],{"class":367},"    # 给轴添加标签\n",[29,33788,33790,33793,33796],{"class":31,"line":33789},200,[29,33791,33792],{"class":309},"    plt.xlabel(",[29,33794,33795],{"class":103},"'epoch'",[29,33797,316],{"class":309},[29,33799,33801,33804,33807],{"class":31,"line":33800},201,[29,33802,33803],{"class":309},"    plt.ylabel(",[29,33805,33806],{"class":103},"'loss'",[29,33808,316],{"class":309},[29,33810,33812],{"class":31,"line":33811},202,[29,33813,33814],{"class":367},"    # ②准确度图\n",[29,33816,33818,33820,33822,33824,33826,33828,33830],{"class":31,"line":33817},203,[29,33819,31856],{"class":309},[29,33821,525],{"class":39},[29,33823,686],{"class":309},[29,33825,386],{"class":39},[29,33827,686],{"class":309},[29,33829,386],{"class":39},[29,33831,316],{"class":309},[29,33833,33835,33837,33839,33842,33844,33846,33848,33850,33853],{"class":31,"line":33834},204,[29,33836,33723],{"class":309},[29,33838,33726],{"class":103},[29,33840,33841],{"class":309},"],train_process.train_acc_all,",[29,33843,33732],{"class":103},[29,33845,686],{"class":309},[29,33847,33737],{"class":5391},[29,33849,355],{"class":305},[29,33851,33852],{"class":103},"'train acc'",[29,33854,316],{"class":309},[29,33856,33858,33860,33862,33865,33867,33869,33871,33873,33876],{"class":31,"line":33857},205,[29,33859,33723],{"class":309},[29,33861,33726],{"class":103},[29,33863,33864],{"class":309},"],train_process.val_acc_all,",[29,33866,33757],{"class":103},[29,33868,686],{"class":309},[29,33870,33737],{"class":5391},[29,33872,355],{"class":305},[29,33874,33875],{"class":103},"'val acc'",[29,33877,316],{"class":309},[29,33879,33881],{"class":31,"line":33880},206,[29,33882,33883],{"class":367},"    # 添加图例\n",[29,33885,33887],{"class":31,"line":33886},207,[29,33888,33780],{"class":309},[29,33890,33892,33894,33896],{"class":31,"line":33891},208,[29,33893,33792],{"class":309},[29,33895,33726],{"class":103},[29,33897,316],{"class":309},[29,33899,33901,33903,33906],{"class":31,"line":33900},209,[29,33902,33803],{"class":309},[29,33904,33905],{"class":103},"\"acc\"",[29,33907,316],{"class":309},[29,33909,33911],{"class":31,"line":33910},210,[29,33912,33913],{"class":309},"    plt.show()\n",[29,33915,33917],{"class":31,"line":33916},211,[29,33918,2575],{"emptyLinePlaceholder":233},[29,33920,33922],{"class":31,"line":33921},212,[29,33923,33924],{"class":367},"# 正式开始训练:\n",[29,33926,33928,33930,33932,33934,33936],{"class":31,"line":33927},213,[29,33929,1707],{"class":305},[29,33931,31349],{"class":39},[29,33933,3124],{"class":305},[29,33935,31354],{"class":103},[29,33937,3914],{"class":309},[29,33939,33941],{"class":31,"line":33940},214,[29,33942,33943],{"class":367},"    # 将模型实例化\n",[29,33945,33947,33950,33952],{"class":31,"line":33946},215,[29,33948,33949],{"class":309},"    LeNet",[29,33951,355],{"class":305},[29,33953,33954],{"class":309},"LeNet()\n",[29,33956,33958,33961,33963],{"class":31,"line":33957},216,[29,33959,33960],{"class":309},"    train_dataloader,val_dataloader",[29,33962,355],{"class":305},[29,33964,33965],{"class":309},"train_val_data_process()\n",[29,33967,33969,33971,33973,33976,33979,33981,33983],{"class":31,"line":33968},217,[29,33970,33522],{"class":309},[29,33972,355],{"class":305},[29,33974,33975],{"class":309},"train_model_process(LeNet,train_dataloader,val_dataloader,",[29,33977,33978],{"class":5391},"num_epochs",[29,33980,355],{"class":305},[29,33982,1008],{"class":39},[29,33984,316],{"class":309},[29,33986,33988],{"class":31,"line":33987},218,[29,33989,33990],{"class":309},"    matplot_acc_loss(train_process)\n",[171,33992,33993],{},"画图的补充点学习：",[171,33995,33996],{},[1638,33997],{"alt":24,"src":33998},"\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",[259,34000,34001],{"start":51},[178,34002,34003],{},"测试",[19,34005,34007],{"className":30507,"code":34006,"language":30509,"meta":24,"style":24},"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",[26,34008,34009,34015,34025,34037,34047,34052,34062,34072,34076,34081,34090,34107,34119,34136,34147,34163,34168,34179,34190,34201,34208,34212,34217,34227,34232,34249,34257,34261,34266,34275,34284,34288,34293,34298,34303,34310,34315,34327,34337,34347,34352,34356,34361,34370,34375,34391,34396,34401,34406,34420,34425,34439,34443,34448,34463,34468,34480,34484,34489,34501,34506,34514,34519,34524,34534,34539,34548,34553,34558,34562,34567,34572,34588,34596,34601,34606,34665,34671,34676,34687,34695,34703,34707,34712,34716,34721,34729,34734,34750,34755,34765,34775],{"__ignoreMap":24},[29,34010,34011,34013],{"class":31,"line":32},[29,34012,30521],{"class":305},[29,34014,30524],{"class":309},[29,34016,34017,34019,34021,34023],{"class":31,"line":43},[29,34018,30521],{"class":305},[29,34020,31544],{"class":309},[29,34022,31512],{"class":305},[29,34024,31549],{"class":309},[29,34026,34027,34029,34032,34034],{"class":31,"line":51},[29,34028,30866],{"class":305},[29,34030,34031],{"class":309}," jupyter_client.consoleapp ",[29,34033,30521],{"class":305},[29,34035,34036],{"class":309}," classes\n",[29,34038,34039,34041,34043,34045],{"class":31,"line":59},[29,34040,30866],{"class":305},[29,34042,31527],{"class":309},[29,34044,30521],{"class":305},[29,34046,31532],{"class":309},[29,34048,34049],{"class":31,"line":67},[29,34050,34051],{"class":367},"# 导入数据集\n",[29,34053,34054,34056,34058,34060],{"class":31,"line":75},[29,34055,30866],{"class":305},[29,34057,31497],{"class":309},[29,34059,30521],{"class":305},[29,34061,31502],{"class":309},[29,34063,34064,34066,34068,34070],{"class":31,"line":83},[29,34065,30866],{"class":305},[29,34067,32043],{"class":309},[29,34069,30521],{"class":305},[29,34071,32048],{"class":309},[29,34073,34074],{"class":31,"line":158},[29,34075,2575],{"emptyLinePlaceholder":233},[29,34077,34078],{"class":31,"line":166},[29,34079,34080],{"class":367},"# 测试数据处理\n",[29,34082,34083,34085,34088],{"class":31,"line":1505},[29,34084,32076],{"class":305},[29,34086,34087],{"class":35}," test_data_process",[29,34089,32082],{"class":309},[29,34091,34092,34095,34097,34099,34101,34103,34105],{"class":31,"line":1788},[29,34093,34094],{"class":309},"    test_data",[29,34096,355],{"class":305},[29,34098,31584],{"class":309},[29,34100,31587],{"class":5391},[29,34102,355],{"class":305},[29,34104,31592],{"class":103},[29,34106,31595],{"class":309},[29,34108,34109,34112,34114,34117],{"class":31,"line":1793},[29,34110,34111],{"class":5391},"                           train",[29,34113,355],{"class":305},[29,34115,34116],{"class":39},"False",[29,34118,31595],{"class":309},[29,34120,34121,34124,34126,34128,34130,34132,34134],{"class":31,"line":1799},[29,34122,34123],{"class":5391},"                           transform",[29,34125,355],{"class":305},[29,34127,31622],{"class":309},[29,34129,31625],{"class":5391},[29,34131,355],{"class":305},[29,34133,1209],{"class":39},[29,34135,31633],{"class":309},[29,34137,34138,34141,34143,34145],{"class":31,"line":1804},[29,34139,34140],{"class":5391},"                           download",[29,34142,355],{"class":305},[29,34144,31605],{"class":39},[29,34146,316],{"class":309},[29,34148,34149,34152,34154,34156,34158,34160],{"class":31,"line":1818},[29,34150,34151],{"class":309},"    test_dataloader",[29,34153,355],{"class":305},[29,34155,31663],{"class":309},[29,34157,31666],{"class":5391},[29,34159,355],{"class":305},[29,34161,34162],{"class":309},"test_data,\n",[29,34164,34165],{"class":31,"line":1823},[29,34166,34167],{"class":367},"                                    # 这里是一张一张进行测试\n",[29,34169,34170,34173,34175,34177],{"class":31,"line":1829},[29,34171,34172],{"class":5391},"                                    batch_size",[29,34174,355],{"class":305},[29,34176,525],{"class":39},[29,34178,31595],{"class":309},[29,34180,34181,34184,34186,34188],{"class":31,"line":1850},[29,34182,34183],{"class":5391},"                                    shuffle",[29,34185,355],{"class":305},[29,34187,31605],{"class":39},[29,34189,31595],{"class":309},[29,34191,34192,34195,34197,34199],{"class":31,"line":1855},[29,34193,34194],{"class":5391},"                                    num_workers",[29,34196,355],{"class":305},[29,34198,499],{"class":39},[29,34200,316],{"class":309},[29,34202,34203,34205],{"class":31,"line":1869},[29,34204,4265],{"class":305},[29,34206,34207],{"class":309}," test_dataloader\n",[29,34209,34210],{"class":31,"line":1874},[29,34211,2575],{"emptyLinePlaceholder":233},[29,34213,34214],{"class":31,"line":1903},[29,34215,34216],{"class":367},"# 定义模型测试函数\n",[29,34218,34219,34221,34224],{"class":31,"line":1908},[29,34220,32076],{"class":305},[29,34222,34223],{"class":35}," test_model_process",[29,34225,34226],{"class":309},"(model,test_dataloader):\n",[29,34228,34229],{"class":31,"line":1925},[29,34230,34231],{"class":367},"    # 将模型放到设备当中，先进行判断\n",[29,34233,34234,34236,34238,34240,34242,34244,34246],{"class":31,"line":1930},[29,34235,31366],{"class":309},[29,34237,355],{"class":305},[29,34239,31373],{"class":103},[29,34241,1880],{"class":305},[29,34243,31378],{"class":309},[29,34245,1877],{"class":305},[29,34247,34248],{"class":103}," \"cpu\"\n",[29,34250,34251,34253,34255],{"class":31,"line":1935},[29,34252,31418],{"class":309},[29,34254,355],{"class":305},[29,34256,32418],{"class":309},[29,34258,34259],{"class":31,"line":1940},[29,34260,2575],{"emptyLinePlaceholder":233},[29,34262,34263],{"class":31,"line":1954},[29,34264,34265],{"class":367},"    # 设置初始化参数\n",[29,34267,34268,34271,34273],{"class":31,"line":1959},[29,34269,34270],{"class":309},"    test_corrects",[29,34272,355],{"class":305},[29,34274,32471],{"class":39},[29,34276,34277,34280,34282],{"class":31,"line":2752},[29,34278,34279],{"class":309},"    test_num",[29,34281,355],{"class":305},[29,34283,3260],{"class":39},[29,34285,34286],{"class":31,"line":2766},[29,34287,2575],{"emptyLinePlaceholder":233},[29,34289,34290],{"class":31,"line":2774},[29,34291,34292],{"class":367},"    # 进行模型测试\n",[29,34294,34295],{"class":31,"line":2779},[29,34296,34297],{"class":367},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[29,34299,34300],{"class":31,"line":2785},[29,34301,34302],{"class":367},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[29,34304,34305,34308],{"class":31,"line":2791},[29,34306,34307],{"class":305},"    with",[29,34309,33013],{"class":309},[29,34311,34312],{"class":31,"line":2796},[29,34313,34314],{"class":367},"        # 从数据中进行\n",[29,34316,34317,34319,34322,34324],{"class":31,"line":8123},[29,34318,3578],{"class":305},[29,34320,34321],{"class":309}," test_data_x,test_data_y ",[29,34323,26172],{"class":305},[29,34325,34326],{"class":309}," test_dataloader:\n",[29,34328,34329,34332,34334],{"class":31,"line":8147},[29,34330,34331],{"class":309},"            test_data_x",[29,34333,355],{"class":305},[29,34335,34336],{"class":309},"test_data_x.to(device)\n",[29,34338,34339,34342,34344],{"class":31,"line":8152},[29,34340,34341],{"class":309},"            test_data_y",[29,34343,355],{"class":305},[29,34345,34346],{"class":309},"test_data_y.to(device)\n",[29,34348,34349],{"class":31,"line":8158},[29,34350,34351],{"class":367},"            # 设置为验证模式\n",[29,34353,34354],{"class":31,"line":8185},[29,34355,33004],{"class":309},[29,34357,34358],{"class":31,"line":8190},[29,34359,34360],{"class":367},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[29,34362,34363,34365,34367],{"class":31,"line":8196},[29,34364,32789],{"class":309},[29,34366,355],{"class":305},[29,34368,34369],{"class":309},"model(test_data_x)\n",[29,34371,34372],{"class":31,"line":8208},[29,34373,34374],{"class":367},"            # 查找每一行中最大值对应的下标\n",[29,34376,34377,34379,34381,34383,34385,34387,34389],{"class":31,"line":8220},[29,34378,32806],{"class":309},[29,34380,355],{"class":305},[29,34382,32811],{"class":309},[29,34384,32814],{"class":5391},[29,34386,355],{"class":305},[29,34388,525],{"class":39},[29,34390,316],{"class":309},[29,34392,34393],{"class":31,"line":8232},[29,34394,34395],{"class":367},"            # 计算正确率\n",[29,34397,34398],{"class":31,"line":9891},[29,34399,34400],{"class":367},"            # .data表示是一个不带梯度信息的tensor\n",[29,34402,34403],{"class":31,"line":9916},[29,34404,34405],{"class":367},"            # 如果预测正确，则准确度test_corrects加1\n",[29,34407,34408,34411,34413,34415,34417],{"class":31,"line":9939},[29,34409,34410],{"class":309},"            test_corrects",[29,34412,9652],{"class":305},[29,34414,32916],{"class":309},[29,34416,3124],{"class":305},[29,34418,34419],{"class":309},"test_data_y.data)\n",[29,34421,34422],{"class":31,"line":9963},[29,34423,34424],{"class":367},"            # 将所有的测试样本进行累计\n",[29,34426,34427,34430,34432,34435,34437],{"class":31,"line":9968},[29,34428,34429],{"class":309},"            test_num",[29,34431,9652],{"class":305},[29,34433,34434],{"class":309},"test_data_x.size(",[29,34436,499],{"class":39},[29,34438,316],{"class":309},[29,34440,34441],{"class":31,"line":9973},[29,34442,2575],{"emptyLinePlaceholder":233},[29,34444,34445],{"class":31,"line":9978},[29,34446,34447],{"class":367},"        # 计算准确度\n",[29,34449,34450,34453,34455,34458,34460],{"class":31,"line":9987},[29,34451,34452],{"class":309},"        test_acc",[29,34454,355],{"class":305},[29,34456,34457],{"class":309},"test_corrects.double().item()",[29,34459,892],{"class":305},[29,34461,34462],{"class":309},"test_num\n",[29,34464,34465],{"class":31,"line":9992},[29,34466,34467],{"class":367},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[29,34469,34470,34472,34474,34477],{"class":31,"line":9998},[29,34471,32580],{"class":39},[29,34473,310],{"class":309},[29,34475,34476],{"class":103},"\"测试的准确率：\"",[29,34478,34479],{"class":309},",test_acc)\n",[29,34481,34482],{"class":31,"line":10019},[29,34483,2575],{"emptyLinePlaceholder":233},[29,34485,34486],{"class":31,"line":10025},[29,34487,34488],{"class":367},"# 实现模型的测试功能\n",[29,34490,34491,34493,34495,34497,34499],{"class":31,"line":10039},[29,34492,1707],{"class":305},[29,34494,31349],{"class":39},[29,34496,3124],{"class":305},[29,34498,31354],{"class":103},[29,34500,3914],{"class":309},[29,34502,34503],{"class":31,"line":10045},[29,34504,34505],{"class":367},"    # 加载模型\n",[29,34507,34508,34510,34512],{"class":31,"line":10072},[29,34509,31418],{"class":309},[29,34511,355],{"class":305},[29,34513,33954],{"class":309},[29,34515,34516],{"class":31,"line":10081},[29,34517,34518],{"class":367},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[29,34520,34521],{"class":31,"line":10087},[29,34522,34523],{"class":367},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[29,34525,34526,34529,34532],{"class":31,"line":10095},[29,34527,34528],{"class":309},"    model.load_state_dict(torch.load(",[29,34530,34531],{"class":103},"'best_model.pth'",[29,34533,30626],{"class":309},[29,34535,34536],{"class":31,"line":10100},[29,34537,34538],{"class":367},"    # 数据加载\n",[29,34540,34541,34543,34545],{"class":31,"line":16779},[29,34542,34151],{"class":309},[29,34544,355],{"class":305},[29,34546,34547],{"class":309},"test_data_process()\n",[29,34549,34550],{"class":31,"line":16785},[29,34551,34552],{"class":367},"    # 加载模型测试的函数\n",[29,34554,34555],{"class":31,"line":16808},[29,34556,34557],{"class":309},"    test_model_process(model,test_dataloader)\n",[29,34559,34560],{"class":31,"line":16814},[29,34561,2575],{"emptyLinePlaceholder":233},[29,34563,34564],{"class":31,"line":16837},[29,34565,34566],{"class":367},"    # 验证集推理实现：\n",[29,34568,34569],{"class":31,"line":16851},[29,34570,34571],{"class":367},"    # 加载数据加载的更详细一些\n",[29,34573,34574,34576,34578,34580,34582,34584,34586],{"class":31,"line":16871},[29,34575,31366],{"class":309},[29,34577,355],{"class":305},[29,34579,31373],{"class":103},[29,34581,1880],{"class":305},[29,34583,31378],{"class":309},[29,34585,1877],{"class":305},[29,34587,34248],{"class":103},[29,34589,34590,34592,34594],{"class":31,"line":16877},[29,34591,31418],{"class":309},[29,34593,355],{"class":305},[29,34595,32418],{"class":309},[29,34597,34598],{"class":31,"line":16888},[29,34599,34600],{"class":367},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[29,34602,34603],{"class":31,"line":16911},[29,34604,34605],{"class":367},"    # 顺序不可改变\n",[29,34607,34608,34611,34613,34615,34618,34620,34623,34625,34628,34630,34633,34635,34638,34640,34643,34645,34648,34650,34653,34655,34658,34660,34663],{"class":31,"line":16933},[29,34609,34610],{"class":309},"    classes",[29,34612,355],{"class":305},[29,34614,1198],{"class":309},[29,34616,34617],{"class":103},"'T-shirt\u002Ftop'",[29,34619,686],{"class":309},[29,34621,34622],{"class":103},"'Trouser'",[29,34624,686],{"class":309},[29,34626,34627],{"class":103},"'Pullover'",[29,34629,686],{"class":309},[29,34631,34632],{"class":103},"'Dress'",[29,34634,686],{"class":309},[29,34636,34637],{"class":103},"'Coat'",[29,34639,686],{"class":309},[29,34641,34642],{"class":103},"'Sandal'",[29,34644,686],{"class":309},[29,34646,34647],{"class":103},"'Shirt'",[29,34649,686],{"class":309},[29,34651,34652],{"class":103},"'Sneaker'",[29,34654,686],{"class":309},[29,34656,34657],{"class":103},"'Bag'",[29,34659,686],{"class":309},[29,34661,34662],{"class":103},"'Ankle boot'",[29,34664,33375],{"class":309},[29,34666,34667,34669],{"class":31,"line":16938},[29,34668,34307],{"class":305},[29,34670,33013],{"class":309},[29,34672,34673],{"class":31,"line":16944},[29,34674,34675],{"class":367},"        # 将数据和标签都放到设备当中\n",[29,34677,34678,34680,34683,34685],{"class":31,"line":16958},[29,34679,3578],{"class":305},[29,34681,34682],{"class":309}," b_x,b_y ",[29,34684,26172],{"class":305},[29,34686,34326],{"class":309},[29,34688,34689,34691,34693],{"class":31,"line":16971},[29,34690,32739],{"class":309},[29,34692,355],{"class":305},[29,34694,32744],{"class":309},[29,34696,34697,34699,34701],{"class":31,"line":16976},[29,34698,32754],{"class":309},[29,34700,355],{"class":305},[29,34702,32759],{"class":309},[29,34704,34705],{"class":31,"line":16990},[29,34706,2575],{"emptyLinePlaceholder":233},[29,34708,34709],{"class":31,"line":16995},[29,34710,34711],{"class":367},"            # 设置模型为验证模式\n",[29,34713,34714],{"class":31,"line":17001},[29,34715,33004],{"class":309},[29,34717,34718],{"class":31,"line":17006},[29,34719,34720],{"class":367},"            # 模型推理结果\n",[29,34722,34723,34725,34727],{"class":31,"line":17020},[29,34724,32789],{"class":309},[29,34726,355],{"class":305},[29,34728,32794],{"class":309},[29,34730,34731],{"class":31,"line":17025},[29,34732,34733],{"class":367},"            # 获取最大下标，最大下标就是类别号\n",[29,34735,34736,34738,34740,34742,34744,34746,34748],{"class":31,"line":17030},[29,34737,32806],{"class":309},[29,34739,355],{"class":305},[29,34741,32811],{"class":309},[29,34743,32814],{"class":5391},[29,34745,355],{"class":305},[29,34747,525],{"class":39},[29,34749,316],{"class":309},[29,34751,34752],{"class":31,"line":17044},[29,34753,34754],{"class":367},"            # 取出张量中的数值\n",[29,34756,34757,34760,34762],{"class":31,"line":17056},[29,34758,34759],{"class":309},"            result",[29,34761,355],{"class":305},[29,34763,34764],{"class":309},"pre_lab.item()\n",[29,34766,34767,34770,34772],{"class":31,"line":17061},[29,34768,34769],{"class":309},"            label",[29,34771,355],{"class":305},[29,34773,34774],{"class":309},"b_y.item()\n",[29,34776,34777,34780,34782,34785,34788,34791,34793,34796],{"class":31,"line":17074},[29,34778,34779],{"class":39},"            print",[29,34781,310],{"class":309},[29,34783,34784],{"class":103},"\"预测值：\"",[29,34786,34787],{"class":309},",classes[result],",[29,34789,34790],{"class":103},"\"------\"",[29,34792,686],{"class":309},[29,34794,34795],{"class":103},"\"真实值：\"",[29,34797,34798],{"class":309},",classes[label])\n",[171,34800,34801],{},"（2）AlexNet",[259,34803,34804],{},[178,34805,34806],{},"神经网络构建",[19,34808,34810],{"className":30507,"code":34809,"language":30509,"meta":24,"style":24},"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",[26,34811,34812,34818,34828,34838,34850,34854,34871,34879,34894,34906,34948,34975,35018,35044,35088,35131,35174,35201,35205,35215,35220,35248,35267,35286,35290,35295,35303,35318,35328,35342,35352,35367,35382,35397,35408,35412,35417,35427,35442,35447,35461,35476,35488,35493,35504,35509,35515,35520,35532,35552,35557,35566],{"__ignoreMap":24},[29,34813,34814,34816],{"class":31,"line":32},[29,34815,30521],{"class":305},[29,34817,30524],{"class":309},[29,34819,34820,34822,34824,34826],{"class":31,"line":43},[29,34821,30866],{"class":305},[29,34823,30869],{"class":309},[29,34825,30521],{"class":305},[29,34827,30874],{"class":309},[29,34829,34830,34832,34834,34836],{"class":31,"line":51},[29,34831,30866],{"class":305},[29,34833,30886],{"class":309},[29,34835,30521],{"class":305},[29,34837,30891],{"class":309},[29,34839,34840,34842,34845,34847],{"class":31,"line":59},[29,34841,30521],{"class":305},[29,34843,34844],{"class":309}," torch.nn.functional ",[29,34846,31512],{"class":305},[29,34848,34849],{"class":309}," F\n",[29,34851,34852],{"class":31,"line":67},[29,34853,2575],{"emptyLinePlaceholder":233},[29,34855,34856,34858,34861,34863,34865,34867,34869],{"class":31,"line":75},[29,34857,14869],{"class":305},[29,34859,34860],{"class":35}," AlexNet",[29,34862,310],{"class":309},[29,34864,30907],{"class":35},[29,34866,866],{"class":309},[29,34868,30912],{"class":35},[29,34870,30915],{"class":309},[29,34872,34873,34875,34877],{"class":31,"line":83},[29,34874,30930],{"class":305},[29,34876,30933],{"class":39},[29,34878,30936],{"class":309},[29,34880,34881,34883,34886,34888,34890,34892],{"class":31,"line":158},[29,34882,30946],{"class":39},[29,34884,34885],{"class":309},"(AlexNet,",[29,34887,30952],{"class":39},[29,34889,30955],{"class":309},[29,34891,30958],{"class":39},[29,34893,2151],{"class":309},[29,34895,34896,34898,34901,34903],{"class":31,"line":166},[29,34897,30974],{"class":39},[29,34899,34900],{"class":309},".ReLu",[29,34902,355],{"class":305},[29,34904,34905],{"class":309},"nn.ReLU()\n",[29,34907,34908,34910,34912,34914,34916,34918,34920,34922,34924,34926,34928,34930,34932,34934,34936,34938,34940,34942,34944,34946],{"class":31,"line":1505},[29,34909,30974],{"class":39},[29,34911,30977],{"class":309},[29,34913,355],{"class":305},[29,34915,30982],{"class":309},[29,34917,30985],{"class":5391},[29,34919,355],{"class":305},[29,34921,525],{"class":39},[29,34923,686],{"class":309},[29,34925,30994],{"class":5391},[29,34927,355],{"class":305},[29,34929,517],{"class":39},[29,34931,686],{"class":309},[29,34933,31003],{"class":5391},[29,34935,355],{"class":305},[29,34937,780],{"class":39},[29,34939,686],{"class":309},[29,34941,31058],{"class":5391},[29,34943,355],{"class":305},[29,34945,601],{"class":39},[29,34947,316],{"class":309},[29,34949,34950,34952,34954,34956,34959,34961,34963,34965,34967,34969,34971,34973],{"class":31,"line":1788},[29,34951,30974],{"class":39},[29,34953,31042],{"class":309},[29,34955,355],{"class":305},[29,34957,34958],{"class":309},"nn.MaxPool2d(",[29,34960,31003],{"class":5391},[29,34962,355],{"class":305},[29,34964,380],{"class":39},[29,34966,686],{"class":309},[29,34968,31058],{"class":5391},[29,34970,355],{"class":305},[29,34972,386],{"class":39},[29,34974,316],{"class":309},[29,34976,34977,34979,34981,34983,34985,34987,34989,34991,34993,34995,34997,35000,35002,35004,35006,35008,35010,35012,35014,35016],{"class":31,"line":1793},[29,34978,30974],{"class":39},[29,34980,31071],{"class":309},[29,34982,355],{"class":305},[29,34984,30982],{"class":309},[29,34986,30985],{"class":5391},[29,34988,355],{"class":305},[29,34990,517],{"class":39},[29,34992,686],{"class":309},[29,34994,30994],{"class":5391},[29,34996,355],{"class":305},[29,34998,34999],{"class":39},"256",[29,35001,686],{"class":309},[29,35003,31003],{"class":5391},[29,35005,355],{"class":305},[29,35007,627],{"class":39},[29,35009,686],{"class":309},[29,35011,31012],{"class":5391},[29,35013,355],{"class":305},[29,35015,386],{"class":39},[29,35017,316],{"class":309},[29,35019,35020,35022,35024,35026,35028,35030,35032,35034,35036,35038,35040,35042],{"class":31,"line":1799},[29,35021,30974],{"class":39},[29,35023,31106],{"class":309},[29,35025,355],{"class":305},[29,35027,34958],{"class":309},[29,35029,31003],{"class":5391},[29,35031,355],{"class":305},[29,35033,380],{"class":39},[29,35035,686],{"class":309},[29,35037,31058],{"class":5391},[29,35039,355],{"class":305},[29,35041,386],{"class":39},[29,35043,316],{"class":309},[29,35045,35046,35048,35051,35053,35055,35057,35059,35061,35063,35065,35067,35070,35072,35074,35076,35078,35080,35082,35084,35086],{"class":31,"line":1804},[29,35047,30974],{"class":39},[29,35049,35050],{"class":309},".c5",[29,35052,355],{"class":305},[29,35054,30982],{"class":309},[29,35056,30985],{"class":5391},[29,35058,355],{"class":305},[29,35060,34999],{"class":39},[29,35062,686],{"class":309},[29,35064,30994],{"class":5391},[29,35066,355],{"class":305},[29,35068,35069],{"class":39},"384",[29,35071,686],{"class":309},[29,35073,31003],{"class":5391},[29,35075,355],{"class":305},[29,35077,380],{"class":39},[29,35079,686],{"class":309},[29,35081,31012],{"class":5391},[29,35083,355],{"class":305},[29,35085,525],{"class":39},[29,35087,316],{"class":309},[29,35089,35090,35092,35095,35097,35099,35101,35103,35105,35107,35109,35111,35113,35115,35117,35119,35121,35123,35125,35127,35129],{"class":31,"line":1818},[29,35091,30974],{"class":39},[29,35093,35094],{"class":309},".c6",[29,35096,355],{"class":305},[29,35098,30982],{"class":309},[29,35100,30985],{"class":5391},[29,35102,355],{"class":305},[29,35104,35069],{"class":39},[29,35106,686],{"class":309},[29,35108,30994],{"class":5391},[29,35110,355],{"class":305},[29,35112,35069],{"class":39},[29,35114,686],{"class":309},[29,35116,31003],{"class":5391},[29,35118,355],{"class":305},[29,35120,380],{"class":39},[29,35122,686],{"class":309},[29,35124,31012],{"class":5391},[29,35126,355],{"class":305},[29,35128,525],{"class":39},[29,35130,316],{"class":309},[29,35132,35133,35135,35138,35140,35142,35144,35146,35148,35150,35152,35154,35156,35158,35160,35162,35164,35166,35168,35170,35172],{"class":31,"line":1823},[29,35134,30974],{"class":39},[29,35136,35137],{"class":309},".c7",[29,35139,355],{"class":305},[29,35141,30982],{"class":309},[29,35143,30985],{"class":5391},[29,35145,355],{"class":305},[29,35147,35069],{"class":39},[29,35149,686],{"class":309},[29,35151,30994],{"class":5391},[29,35153,355],{"class":305},[29,35155,34999],{"class":39},[29,35157,686],{"class":309},[29,35159,31003],{"class":5391},[29,35161,355],{"class":305},[29,35163,380],{"class":39},[29,35165,686],{"class":309},[29,35167,31012],{"class":5391},[29,35169,355],{"class":305},[29,35171,525],{"class":39},[29,35173,316],{"class":309},[29,35175,35176,35178,35181,35183,35185,35187,35189,35191,35193,35195,35197,35199],{"class":31,"line":1829},[29,35177,30974],{"class":39},[29,35179,35180],{"class":309},".s8",[29,35182,355],{"class":305},[29,35184,34958],{"class":309},[29,35186,31003],{"class":5391},[29,35188,355],{"class":305},[29,35190,380],{"class":39},[29,35192,686],{"class":309},[29,35194,31058],{"class":5391},[29,35196,355],{"class":305},[29,35198,386],{"class":39},[29,35200,316],{"class":309},[29,35202,35203],{"class":31,"line":1850},[29,35204,31131],{"class":367},[29,35206,35207,35209,35211,35213],{"class":31,"line":1855},[29,35208,30974],{"class":39},[29,35210,31138],{"class":309},[29,35212,355],{"class":305},[29,35214,31143],{"class":309},[29,35216,35217],{"class":31,"line":1869},[29,35218,35219],{"class":367},"       # 定义全连接层\n",[29,35221,35222,35224,35227,35229,35231,35233,35235,35237,35239,35241,35243,35246],{"class":31,"line":1874},[29,35223,30974],{"class":39},[29,35225,35226],{"class":309},".f1",[29,35228,355],{"class":305},[29,35230,31160],{"class":309},[29,35232,652],{"class":39},[29,35234,763],{"class":305},[29,35236,652],{"class":39},[29,35238,763],{"class":305},[29,35240,34999],{"class":39},[29,35242,686],{"class":309},[29,35244,35245],{"class":39},"4096",[29,35247,316],{"class":309},[29,35249,35250,35252,35255,35257,35259,35261,35263,35265],{"class":31,"line":1903},[29,35251,30974],{"class":39},[29,35253,35254],{"class":309},".f2",[29,35256,355],{"class":305},[29,35258,31160],{"class":309},[29,35260,35245],{"class":39},[29,35262,686],{"class":309},[29,35264,35245],{"class":39},[29,35266,316],{"class":309},[29,35268,35269,35271,35274,35276,35278,35280,35282,35284],{"class":31,"line":1908},[29,35270,30974],{"class":39},[29,35272,35273],{"class":309},".f3",[29,35275,355],{"class":305},[29,35277,31160],{"class":309},[29,35279,35245],{"class":39},[29,35281,686],{"class":309},[29,35283,754],{"class":39},[29,35285,316],{"class":309},[29,35287,35288],{"class":31,"line":1925},[29,35289,2575],{"emptyLinePlaceholder":233},[29,35291,35292],{"class":31,"line":1930},[29,35293,35294],{"class":367},"    # 定义前向传播\n",[29,35296,35297,35299,35301],{"class":31,"line":1935},[29,35298,30930],{"class":305},[29,35300,31222],{"class":35},[29,35302,31225],{"class":309},[29,35304,35305,35307,35309,35311,35314,35316],{"class":31,"line":1940},[29,35306,31230],{"class":309},[29,35308,355],{"class":305},[29,35310,30952],{"class":39},[29,35312,35313],{"class":309},".ReLu(",[29,35315,30952],{"class":39},[29,35317,31242],{"class":309},[29,35319,35320,35322,35324,35326],{"class":31,"line":1954},[29,35321,31230],{"class":309},[29,35323,355],{"class":305},[29,35325,30952],{"class":39},[29,35327,31253],{"class":309},[29,35329,35330,35332,35334,35336,35338,35340],{"class":31,"line":1959},[29,35331,31230],{"class":309},[29,35333,355],{"class":305},[29,35335,30952],{"class":39},[29,35337,35313],{"class":309},[29,35339,30952],{"class":39},[29,35341,31268],{"class":309},[29,35343,35344,35346,35348,35350],{"class":31,"line":2752},[29,35345,31230],{"class":309},[29,35347,355],{"class":305},[29,35349,30952],{"class":39},[29,35351,31279],{"class":309},[29,35353,35354,35356,35358,35360,35362,35364],{"class":31,"line":2766},[29,35355,31230],{"class":309},[29,35357,355],{"class":305},[29,35359,30952],{"class":39},[29,35361,35313],{"class":309},[29,35363,30952],{"class":39},[29,35365,35366],{"class":309},".c5(x))\n",[29,35368,35369,35371,35373,35375,35377,35379],{"class":31,"line":2774},[29,35370,31230],{"class":309},[29,35372,355],{"class":305},[29,35374,30952],{"class":39},[29,35376,35313],{"class":309},[29,35378,30952],{"class":39},[29,35380,35381],{"class":309},".c6(x))\n",[29,35383,35384,35386,35388,35390,35392,35394],{"class":31,"line":2779},[29,35385,31230],{"class":309},[29,35387,355],{"class":305},[29,35389,30952],{"class":39},[29,35391,35313],{"class":309},[29,35393,30952],{"class":39},[29,35395,35396],{"class":309},".c7(x))\n",[29,35398,35399,35401,35403,35405],{"class":31,"line":2785},[29,35400,31230],{"class":309},[29,35402,355],{"class":305},[29,35404,30952],{"class":39},[29,35406,35407],{"class":309},".s8(x)\n",[29,35409,35410],{"class":31,"line":2791},[29,35411,2575],{"emptyLinePlaceholder":233},[29,35413,35414],{"class":31,"line":2796},[29,35415,35416],{"class":367},"        # 展平加线性全连接层\n",[29,35418,35419,35421,35423,35425],{"class":31,"line":8123},[29,35420,31230],{"class":309},[29,35422,355],{"class":305},[29,35424,30952],{"class":39},[29,35426,31290],{"class":309},[29,35428,35429,35431,35433,35435,35437,35439],{"class":31,"line":8147},[29,35430,31230],{"class":309},[29,35432,355],{"class":305},[29,35434,30952],{"class":39},[29,35436,35313],{"class":309},[29,35438,30952],{"class":39},[29,35440,35441],{"class":309},".f1(x))\n",[29,35443,35444],{"class":31,"line":8152},[29,35445,35446],{"class":367},"        # 还需要dropout对神经元随机进行失活\n",[29,35448,35449,35451,35453,35456,35459],{"class":31,"line":8158},[29,35450,31230],{"class":309},[29,35452,355],{"class":305},[29,35454,35455],{"class":309},"F.dropout(x,",[29,35457,35458],{"class":39},"0.5",[29,35460,316],{"class":309},[29,35462,35463,35465,35467,35469,35471,35473],{"class":31,"line":8185},[29,35464,31230],{"class":309},[29,35466,355],{"class":305},[29,35468,30952],{"class":39},[29,35470,35313],{"class":309},[29,35472,30952],{"class":39},[29,35474,35475],{"class":309},".f2(x))\n",[29,35477,35478,35480,35482,35484,35486],{"class":31,"line":8190},[29,35479,31230],{"class":309},[29,35481,355],{"class":305},[29,35483,35455],{"class":309},[29,35485,35458],{"class":39},[29,35487,316],{"class":309},[29,35489,35490],{"class":31,"line":8196},[29,35491,35492],{"class":367},"        # 直接输出\n",[29,35494,35495,35497,35499,35501],{"class":31,"line":8208},[29,35496,31230],{"class":309},[29,35498,355],{"class":305},[29,35500,30952],{"class":39},[29,35502,35503],{"class":309},".f3(x)\n",[29,35505,35506],{"class":31,"line":8220},[29,35507,35508],{"class":367},"        # 前向传播输出\n",[29,35510,35511,35513],{"class":31,"line":8232},[29,35512,14927],{"class":305},[29,35514,31338],{"class":309},[29,35516,35517],{"class":31,"line":9891},[29,35518,35519],{"class":367},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[29,35521,35522,35524,35526,35528,35530],{"class":31,"line":9916},[29,35523,1707],{"class":305},[29,35525,31349],{"class":39},[29,35527,3124],{"class":305},[29,35529,31354],{"class":103},[29,35531,3914],{"class":309},[29,35533,35534,35536,35538,35540,35542,35544,35546,35548,35550],{"class":31,"line":9939},[29,35535,31366],{"class":309},[29,35537,355],{"class":305},[29,35539,30580],{"class":309},[29,35541,31373],{"class":103},[29,35543,1880],{"class":305},[29,35545,31378],{"class":309},[29,35547,1877],{"class":305},[29,35549,30605],{"class":103},[29,35551,316],{"class":309},[29,35553,35554],{"class":31,"line":9963},[29,35555,35556],{"class":367},"    # 模型实例化，然后将实例化的模型放到设备中\n",[29,35558,35559,35561,35563],{"class":31,"line":9968},[29,35560,31418],{"class":309},[29,35562,355],{"class":305},[29,35564,35565],{"class":309},"AlexNet().to(device)\n",[29,35567,35568,35570,35572,35574,35576,35579,35581,35583],{"class":31,"line":9973},[29,35569,31428],{"class":39},[29,35571,31431],{"class":309},[29,35573,525],{"class":39},[29,35575,686],{"class":309},[29,35577,35578],{"class":39},"227",[29,35580,686],{"class":309},[29,35582,35578],{"class":39},[29,35584,31444],{"class":309},[259,35586,35587],{"start":43},[178,35588,31457],{},[19,35590,35592],{"className":30507,"code":35591,"language":30509,"meta":24,"style":24},"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",[26,35593,35594,35600,35606,35616,35622,35632,35642,35652,35662,35672,35676,35687,35697,35701,35705,35709,35717,35729,35739,35755,35765,35797,35811,35821,35831,35835,35845,35859,35869,35879,35889,35895,35899,35903,35907,35911,35915,35923,35943,35947,35951,35955,35959,35963,35979,35983,35987,35995,35999,36003,36011,36015,36019,36023,36031,36035,36039,36043,36047,36055,36059,36067,36071,36079,36083,36091,36095,36103,36107,36111,36119,36123,36127,36131,36143,36167,36181,36185,36189,36193,36201,36205,36213,36217,36225,36229,36237,36241,36249,36253,36261,36265,36277,36281,36289,36293,36301,36305,36309,36313,36317,36325,36329,36345,36349,36357,36361,36365,36369,36373,36377,36381,36385,36401,36405,36417,36421,36433,36437,36449,36453,36461,36465,36473,36477,36481,36486,36492,36496,36505,36509,36526,36530,36539,36543,36561,36574,36579,36592,36596,36600,36608,36612,36616,36624,36628,36636,36640,36648,36652,36656,36698,36740,36744,36748,36764,36768,36784,36788,36792,36800,36804,36808,36820,36858,36863,36868,36877,36881,36895,36905,36911,36917,36923,36929,36933,36937,36943,36947,36951,36959,36963,36981,36985,36989,36993,37009,37013,37017,37021,37025,37029,37049,37069,37073,37077,37081,37089,37097,37101,37117,37137,37157,37161,37165,37173,37181,37185,37189,37193,37205,37209,37219,37227,37244],{"__ignoreMap":24},[29,35595,35596,35598],{"class":31,"line":32},[29,35597,30521],{"class":305},[29,35599,31951],{"class":309},[29,35601,35602,35604],{"class":31,"line":43},[29,35603,30521],{"class":305},[29,35605,31958],{"class":309},[29,35607,35608,35610,35612,35614],{"class":31,"line":51},[29,35609,30521],{"class":305},[29,35611,31969],{"class":309},[29,35613,31512],{"class":305},[29,35615,31974],{"class":309},[29,35617,35618,35620],{"class":31,"line":59},[29,35619,30521],{"class":305},[29,35621,30524],{"class":309},[29,35623,35624,35626,35628,35630],{"class":31,"line":67},[29,35625,30866],{"class":305},[29,35627,31544],{"class":309},[29,35629,30521],{"class":305},[29,35631,31991],{"class":309},[29,35633,35634,35636,35638,35640],{"class":31,"line":75},[29,35635,30866],{"class":305},[29,35637,31497],{"class":309},[29,35639,30521],{"class":305},[29,35641,31502],{"class":309},[29,35643,35644,35646,35648,35650],{"class":31,"line":83},[29,35645,30866],{"class":305},[29,35647,31527],{"class":309},[29,35649,30521],{"class":305},[29,35651,31532],{"class":309},[29,35653,35654,35656,35658,35660],{"class":31,"line":158},[29,35655,30521],{"class":305},[29,35657,31544],{"class":309},[29,35659,31512],{"class":305},[29,35661,31549],{"class":309},[29,35663,35664,35666,35668,35670],{"class":31,"line":166},[29,35665,30521],{"class":305},[29,35667,31561],{"class":309},[29,35669,31512],{"class":305},[29,35671,31566],{"class":309},[29,35673,35674],{"class":31,"line":1505},[29,35675,32036],{"class":367},[29,35677,35678,35680,35682,35684],{"class":31,"line":1788},[29,35679,30866],{"class":305},[29,35681,32043],{"class":309},[29,35683,30521],{"class":305},[29,35685,35686],{"class":309}," AlexNet\n",[29,35688,35689,35691,35693,35695],{"class":31,"line":1793},[29,35690,30866],{"class":305},[29,35692,30869],{"class":309},[29,35694,30521],{"class":305},[29,35696,30874],{"class":309},[29,35698,35699],{"class":31,"line":1799},[29,35700,2575],{"emptyLinePlaceholder":233},[29,35702,35703],{"class":31,"line":1804},[29,35704,2575],{"emptyLinePlaceholder":233},[29,35706,35707],{"class":31,"line":1818},[29,35708,32071],{"class":367},[29,35710,35711,35713,35715],{"class":31,"line":1823},[29,35712,32076],{"class":305},[29,35714,32079],{"class":35},[29,35716,32082],{"class":309},[29,35718,35719,35721,35723,35725,35727],{"class":31,"line":1829},[29,35720,32087],{"class":309},[29,35722,355],{"class":305},[29,35724,31584],{"class":309},[29,35726,31592],{"class":103},[29,35728,31595],{"class":309},[29,35730,35731,35733,35735,35737],{"class":31,"line":1850},[29,35732,32100],{"class":5391},[29,35734,355],{"class":305},[29,35736,31605],{"class":39},[29,35738,31595],{"class":309},[29,35740,35741,35743,35745,35747,35749,35751,35753],{"class":31,"line":1855},[29,35742,32111],{"class":5391},[29,35744,355],{"class":305},[29,35746,31622],{"class":309},[29,35748,31625],{"class":5391},[29,35750,355],{"class":305},[29,35752,35578],{"class":39},[29,35754,31633],{"class":309},[29,35756,35757,35759,35761,35763],{"class":31,"line":1869},[29,35758,32128],{"class":5391},[29,35760,355],{"class":305},[29,35762,31605],{"class":39},[29,35764,316],{"class":309},[29,35766,35767,35769,35771,35773,35775,35777,35779,35781,35783,35785,35787,35789,35791,35793,35795],{"class":31,"line":1874},[29,35768,32139],{"class":309},[29,35770,355],{"class":305},[29,35772,32144],{"class":309},[29,35774,32147],{"class":39},[29,35776,310],{"class":309},[29,35778,32152],{"class":39},[29,35780,763],{"class":305},[29,35782,7533],{"class":39},[29,35784,32159],{"class":309},[29,35786,32147],{"class":39},[29,35788,310],{"class":309},[29,35790,32166],{"class":39},[29,35792,763],{"class":305},[29,35794,7533],{"class":39},[29,35796,32173],{"class":309},[29,35798,35799,35801,35803,35805,35807,35809],{"class":31,"line":1903},[29,35800,32178],{"class":309},[29,35802,355],{"class":305},[29,35804,32183],{"class":309},[29,35806,31666],{"class":5391},[29,35808,355],{"class":305},[29,35810,31671],{"class":309},[29,35812,35813,35815,35817,35819],{"class":31,"line":1908},[29,35814,32194],{"class":5391},[29,35816,355],{"class":305},[29,35818,32199],{"class":39},[29,35820,31595],{"class":309},[29,35822,35823,35825,35827,35829],{"class":31,"line":1925},[29,35824,32206],{"class":5391},[29,35826,355],{"class":305},[29,35828,31605],{"class":39},[29,35830,31595],{"class":309},[29,35832,35833],{"class":31,"line":1930},[29,35834,32217],{"class":367},[29,35836,35837,35839,35841,35843],{"class":31,"line":1935},[29,35838,32222],{"class":5391},[29,35840,355],{"class":305},[29,35842,703],{"class":39},[29,35844,316],{"class":309},[29,35846,35847,35849,35851,35853,35855,35857],{"class":31,"line":1940},[29,35848,32233],{"class":309},[29,35850,355],{"class":305},[29,35852,31663],{"class":309},[29,35854,31666],{"class":5391},[29,35856,355],{"class":305},[29,35858,32244],{"class":309},[29,35860,35861,35863,35865,35867],{"class":31,"line":1954},[29,35862,32249],{"class":5391},[29,35864,355],{"class":305},[29,35866,32199],{"class":39},[29,35868,31595],{"class":309},[29,35870,35871,35873,35875,35877],{"class":31,"line":1959},[29,35872,32260],{"class":5391},[29,35874,355],{"class":305},[29,35876,31605],{"class":39},[29,35878,31595],{"class":309},[29,35880,35881,35883,35885,35887],{"class":31,"line":2752},[29,35882,32271],{"class":5391},[29,35884,355],{"class":305},[29,35886,703],{"class":39},[29,35888,316],{"class":309},[29,35890,35891,35893],{"class":31,"line":2766},[29,35892,4265],{"class":305},[29,35894,32284],{"class":309},[29,35896,35897],{"class":31,"line":2774},[29,35898,2575],{"emptyLinePlaceholder":233},[29,35900,35901],{"class":31,"line":2779},[29,35902,32293],{"class":367},[29,35904,35905],{"class":31,"line":2785},[29,35906,32298],{"class":367},[29,35908,35909],{"class":31,"line":2791},[29,35910,2575],{"emptyLinePlaceholder":233},[29,35912,35913],{"class":31,"line":2796},[29,35914,32307],{"class":367},[29,35916,35917,35919,35921],{"class":31,"line":8123},[29,35918,32076],{"class":305},[29,35920,32314],{"class":35},[29,35922,32317],{"class":309},[29,35924,35925,35927,35929,35931,35933,35935,35937,35939,35941],{"class":31,"line":8147},[29,35926,31366],{"class":309},[29,35928,355],{"class":305},[29,35930,30580],{"class":309},[29,35932,31373],{"class":103},[29,35934,1880],{"class":305},[29,35936,31378],{"class":309},[29,35938,1877],{"class":305},[29,35940,32336],{"class":103},[29,35942,316],{"class":309},[29,35944,35945],{"class":31,"line":8152},[29,35946,2575],{"emptyLinePlaceholder":233},[29,35948,35949],{"class":31,"line":8158},[29,35950,2575],{"emptyLinePlaceholder":233},[29,35952,35953],{"class":31,"line":8185},[29,35954,32351],{"class":367},[29,35956,35957],{"class":31,"line":8190},[29,35958,32356],{"class":367},[29,35960,35961],{"class":31,"line":8196},[29,35962,32361],{"class":367},[29,35964,35965,35967,35969,35971,35973,35975,35977],{"class":31,"line":8208},[29,35966,32366],{"class":309},[29,35968,355],{"class":305},[29,35970,32371],{"class":309},[29,35972,32374],{"class":5391},[29,35974,355],{"class":305},[29,35976,32379],{"class":39},[29,35978,316],{"class":309},[29,35980,35981],{"class":31,"line":8220},[29,35982,2575],{"emptyLinePlaceholder":233},[29,35984,35985],{"class":31,"line":8232},[29,35986,32390],{"class":367},[29,35988,35989,35991,35993],{"class":31,"line":9891},[29,35990,32395],{"class":309},[29,35992,355],{"class":305},[29,35994,32400],{"class":309},[29,35996,35997],{"class":31,"line":9916},[29,35998,2575],{"emptyLinePlaceholder":233},[29,36000,36001],{"class":31,"line":9939},[29,36002,32409],{"class":367},[29,36004,36005,36007,36009],{"class":31,"line":9963},[29,36006,31418],{"class":309},[29,36008,355],{"class":305},[29,36010,32418],{"class":309},[29,36012,36013],{"class":31,"line":9968},[29,36014,32423],{"class":367},[29,36016,36017],{"class":31,"line":9973},[29,36018,32428],{"class":367},[29,36020,36021],{"class":31,"line":9978},[29,36022,32433],{"class":367},[29,36024,36025,36027,36029],{"class":31,"line":9987},[29,36026,32438],{"class":309},[29,36028,355],{"class":305},[29,36030,32443],{"class":309},[29,36032,36033],{"class":31,"line":9992},[29,36034,2575],{"emptyLinePlaceholder":233},[29,36036,36037],{"class":31,"line":9998},[29,36038,2575],{"emptyLinePlaceholder":233},[29,36040,36041],{"class":31,"line":10019},[29,36042,32456],{"class":367},[29,36044,36045],{"class":31,"line":10025},[29,36046,32461],{"class":367},[29,36048,36049,36051,36053],{"class":31,"line":10039},[29,36050,32466],{"class":309},[29,36052,355],{"class":305},[29,36054,32471],{"class":39},[29,36056,36057],{"class":31,"line":10045},[29,36058,32476],{"class":367},[29,36060,36061,36063,36065],{"class":31,"line":10072},[29,36062,32481],{"class":309},[29,36064,355],{"class":305},[29,36066,32486],{"class":309},[29,36068,36069],{"class":31,"line":10081},[29,36070,32491],{"class":367},[29,36072,36073,36075,36077],{"class":31,"line":10087},[29,36074,32496],{"class":309},[29,36076,355],{"class":305},[29,36078,32486],{"class":309},[29,36080,36081],{"class":31,"line":10095},[29,36082,32505],{"class":367},[29,36084,36085,36087,36089],{"class":31,"line":10100},[29,36086,32510],{"class":309},[29,36088,355],{"class":305},[29,36090,32486],{"class":309},[29,36092,36093],{"class":31,"line":16779},[29,36094,32519],{"class":367},[29,36096,36097,36099,36101],{"class":31,"line":16785},[29,36098,32524],{"class":309},[29,36100,355],{"class":305},[29,36102,32486],{"class":309},[29,36104,36105],{"class":31,"line":16808},[29,36106,2575],{"emptyLinePlaceholder":233},[29,36108,36109],{"class":31,"line":16814},[29,36110,32537],{"class":367},[29,36112,36113,36115,36117],{"class":31,"line":16837},[29,36114,32542],{"class":309},[29,36116,355],{"class":305},[29,36118,32547],{"class":309},[29,36120,36121],{"class":31,"line":16851},[29,36122,2575],{"emptyLinePlaceholder":233},[29,36124,36125],{"class":31,"line":16871},[29,36126,2575],{"emptyLinePlaceholder":233},[29,36128,36129],{"class":31,"line":16877},[29,36130,32560],{"class":367},[29,36132,36133,36135,36137,36139,36141],{"class":31,"line":16888},[29,36134,3376],{"class":305},[29,36136,32567],{"class":309},[29,36138,26172],{"class":305},[29,36140,32572],{"class":39},[29,36142,32575],{"class":309},[29,36144,36145,36147,36149,36151,36153,36155,36157,36159,36161,36163,36165],{"class":31,"line":16911},[29,36146,32580],{"class":39},[29,36148,310],{"class":309},[29,36150,32585],{"class":103},[29,36152,32588],{"class":39},[29,36154,892],{"class":103},[29,36156,32588],{"class":39},[29,36158,559],{"class":103},[29,36160,32597],{"class":309},[29,36162,840],{"class":305},[29,36164,525],{"class":39},[29,36166,30626],{"class":309},[29,36168,36169,36171,36173,36175,36177,36179],{"class":31,"line":16933},[29,36170,32580],{"class":39},[29,36172,310],{"class":309},[29,36174,32612],{"class":103},[29,36176,763],{"class":305},[29,36178,754],{"class":39},[29,36180,316],{"class":309},[29,36182,36183],{"class":31,"line":16938},[29,36184,2575],{"emptyLinePlaceholder":233},[29,36186,36187],{"class":31,"line":16944},[29,36188,32627],{"class":367},[29,36190,36191],{"class":31,"line":16958},[29,36192,32632],{"class":367},[29,36194,36195,36197,36199],{"class":31,"line":16971},[29,36196,32637],{"class":309},[29,36198,355],{"class":305},[29,36200,32471],{"class":39},[29,36202,36203],{"class":31,"line":16976},[29,36204,32646],{"class":367},[29,36206,36207,36209,36211],{"class":31,"line":16990},[29,36208,32651],{"class":309},[29,36210,355],{"class":305},[29,36212,3260],{"class":39},[29,36214,36215],{"class":31,"line":16995},[29,36216,32660],{"class":367},[29,36218,36219,36221,36223],{"class":31,"line":17001},[29,36220,32665],{"class":309},[29,36222,355],{"class":305},[29,36224,32471],{"class":39},[29,36226,36227],{"class":31,"line":17006},[29,36228,32674],{"class":367},[29,36230,36231,36233,36235],{"class":31,"line":17020},[29,36232,32679],{"class":309},[29,36234,355],{"class":305},[29,36236,3260],{"class":39},[29,36238,36239],{"class":31,"line":17025},[29,36240,32688],{"class":367},[29,36242,36243,36245,36247],{"class":31,"line":17030},[29,36244,32693],{"class":309},[29,36246,355],{"class":305},[29,36248,3260],{"class":39},[29,36250,36251],{"class":31,"line":17044},[29,36252,32702],{"class":367},[29,36254,36255,36257,36259],{"class":31,"line":17056},[29,36256,32707],{"class":309},[29,36258,355],{"class":305},[29,36260,3260],{"class":39},[29,36262,36263],{"class":31,"line":17061},[29,36264,32716],{"class":367},[29,36266,36267,36269,36271,36273,36275],{"class":31,"line":17074},[29,36268,3578],{"class":305},[29,36270,31730],{"class":309},[29,36272,26172],{"class":305},[29,36274,31735],{"class":39},[29,36276,32729],{"class":309},[29,36278,36279],{"class":31,"line":17079},[29,36280,32734],{"class":367},[29,36282,36283,36285,36287],{"class":31,"line":17084},[29,36284,32739],{"class":309},[29,36286,355],{"class":305},[29,36288,32744],{"class":309},[29,36290,36291],{"class":31,"line":17089},[29,36292,32749],{"class":367},[29,36294,36295,36297,36299],{"class":31,"line":17102},[29,36296,32754],{"class":309},[29,36298,355],{"class":305},[29,36300,32759],{"class":309},[29,36302,36303],{"class":31,"line":17107},[29,36304,32765],{"class":367},[29,36306,36307],{"class":31,"line":32762},[29,36308,32771],{"class":309},[29,36310,36311],{"class":31,"line":32768},[29,36312,32777],{"class":367},[29,36314,36315],{"class":31,"line":32774},[29,36316,32783],{"class":367},[29,36318,36319,36321,36323],{"class":31,"line":32780},[29,36320,32789],{"class":309},[29,36322,355],{"class":305},[29,36324,32794],{"class":309},[29,36326,36327],{"class":31,"line":32786},[29,36328,32800],{"class":367},[29,36330,36331,36333,36335,36337,36339,36341,36343],{"class":31,"line":32797},[29,36332,32806],{"class":309},[29,36334,355],{"class":305},[29,36336,32811],{"class":309},[29,36338,32814],{"class":5391},[29,36340,355],{"class":305},[29,36342,525],{"class":39},[29,36344,316],{"class":309},[29,36346,36347],{"class":31,"line":32803},[29,36348,32826],{"class":367},[29,36350,36351,36353,36355],{"class":31,"line":32823},[29,36352,32832],{"class":309},[29,36354,355],{"class":305},[29,36356,32837],{"class":309},[29,36358,36359],{"class":31,"line":32829},[29,36360,32843],{"class":367},[29,36362,36363],{"class":31,"line":32840},[29,36364,32849],{"class":309},[29,36366,36367],{"class":31,"line":32846},[29,36368,32855],{"class":367},[29,36370,36371],{"class":31,"line":32852},[29,36372,32861],{"class":309},[29,36374,36375],{"class":31,"line":32858},[29,36376,32867],{"class":367},[29,36378,36379],{"class":31,"line":32864},[29,36380,32873],{"class":309},[29,36382,36383],{"class":31,"line":32870},[29,36384,32879],{"class":367},[29,36386,36387,36389,36391,36393,36395,36397,36399],{"class":31,"line":32876},[29,36388,32885],{"class":309},[29,36390,9652],{"class":305},[29,36392,32890],{"class":309},[29,36394,763],{"class":305},[29,36396,32895],{"class":309},[29,36398,499],{"class":39},[29,36400,316],{"class":309},[29,36402,36403],{"class":31,"line":32882},[29,36404,32905],{"class":367},[29,36406,36407,36409,36411,36413,36415],{"class":31,"line":32902},[29,36408,32911],{"class":309},[29,36410,9652],{"class":305},[29,36412,32916],{"class":309},[29,36414,3124],{"class":305},[29,36416,32921],{"class":309},[29,36418,36419],{"class":31,"line":32908},[29,36420,32927],{"class":367},[29,36422,36423,36425,36427,36429,36431],{"class":31,"line":32924},[29,36424,32933],{"class":309},[29,36426,9652],{"class":305},[29,36428,32895],{"class":309},[29,36430,499],{"class":39},[29,36432,316],{"class":309},[29,36434,36435],{"class":31,"line":32930},[29,36436,32947],{"class":367},[29,36438,36439,36441,36443,36445,36447],{"class":31,"line":32944},[29,36440,3578],{"class":305},[29,36442,32955],{"class":309},[29,36444,26172],{"class":305},[29,36446,31735],{"class":39},[29,36448,32962],{"class":309},[29,36450,36451],{"class":31,"line":32950},[29,36452,32968],{"class":367},[29,36454,36455,36457,36459],{"class":31,"line":32965},[29,36456,32739],{"class":309},[29,36458,355],{"class":305},[29,36460,32744],{"class":309},[29,36462,36463],{"class":31,"line":32971},[29,36464,32983],{"class":367},[29,36466,36467,36469,36471],{"class":31,"line":32980},[29,36468,32754],{"class":309},[29,36470,355],{"class":305},[29,36472,32759],{"class":309},[29,36474,36475],{"class":31,"line":32986},[29,36476,32998],{"class":367},[29,36478,36479],{"class":31,"line":32995},[29,36480,33004],{"class":309},[29,36482,36483],{"class":31,"line":33001},[29,36484,36485],{"class":367},"            # 验证时不计算梯度以节省内存\u002F计算\n",[29,36487,36488,36490],{"class":31,"line":33007},[29,36489,33010],{"class":305},[29,36491,33013],{"class":309},[29,36493,36494],{"class":31,"line":33016},[29,36495,33019],{"class":367},[29,36497,36498,36501,36503],{"class":31,"line":33022},[29,36499,36500],{"class":309},"                output",[29,36502,355],{"class":305},[29,36504,32794],{"class":309},[29,36506,36507],{"class":31,"line":33033},[29,36508,33036],{"class":367},[29,36510,36511,36514,36516,36518,36520,36522,36524],{"class":31,"line":33039},[29,36512,36513],{"class":309},"                pre_lab",[29,36515,355],{"class":305},[29,36517,32811],{"class":309},[29,36519,32814],{"class":5391},[29,36521,355],{"class":305},[29,36523,525],{"class":39},[29,36525,316],{"class":309},[29,36527,36528],{"class":31,"line":33058},[29,36529,33061],{"class":367},[29,36531,36532,36535,36537],{"class":31,"line":33064},[29,36533,36534],{"class":309},"                val_batch_loss",[29,36536,355],{"class":305},[29,36538,32837],{"class":309},[29,36540,36541],{"class":31,"line":33075},[29,36542,33078],{"class":367},[29,36544,36545,36548,36550,36553,36555,36557,36559],{"class":31,"line":33081},[29,36546,36547],{"class":309},"                val_loss",[29,36549,9652],{"class":305},[29,36551,36552],{"class":309},"val_batch_loss.item()",[29,36554,763],{"class":305},[29,36556,32895],{"class":309},[29,36558,499],{"class":39},[29,36560,316],{"class":309},[29,36562,36563,36566,36568,36570,36572],{"class":31,"line":33101},[29,36564,36565],{"class":309},"                val_corrects",[29,36567,9652],{"class":305},[29,36569,32916],{"class":309},[29,36571,3124],{"class":305},[29,36573,32921],{"class":309},[29,36575,36576],{"class":31,"line":33117},[29,36577,36578],{"class":367},"            # 当前用于验证的样本数量\n",[29,36580,36581,36584,36586,36588,36590],{"class":31,"line":33123},[29,36582,36583],{"class":309},"            val_num",[29,36585,9652],{"class":305},[29,36587,32895],{"class":309},[29,36589,499],{"class":39},[29,36591,316],{"class":309},[29,36593,36594],{"class":31,"line":33137},[29,36595,33140],{"class":367},[29,36597,36598],{"class":31,"line":33143},[29,36599,33146],{"class":367},[29,36601,36602,36604,36606],{"class":31,"line":33149},[29,36603,33152],{"class":309},[29,36605,892],{"class":305},[29,36607,33157],{"class":309},[29,36609,36610],{"class":31,"line":33160},[29,36611,33163],{"class":367},[29,36613,36614],{"class":31,"line":33166},[29,36615,33169],{"class":367},[29,36617,36618,36620,36622],{"class":31,"line":33172},[29,36619,33175],{"class":309},[29,36621,892],{"class":305},[29,36623,33157],{"class":309},[29,36625,36626],{"class":31,"line":33182},[29,36627,33185],{"class":367},[29,36629,36630,36632,36634],{"class":31,"line":33188},[29,36631,33191],{"class":309},[29,36633,892],{"class":305},[29,36635,33196],{"class":309},[29,36637,36638],{"class":31,"line":33199},[29,36639,33202],{"class":367},[29,36641,36642,36644,36646],{"class":31,"line":33205},[29,36643,33208],{"class":309},[29,36645,892],{"class":305},[29,36647,33196],{"class":309},[29,36649,36650],{"class":31,"line":33215},[29,36651,2575],{"emptyLinePlaceholder":233},[29,36653,36654],{"class":31,"line":33220},[29,36655,33223],{"class":367},[29,36657,36658,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696],{"class":31,"line":33226},[29,36659,32580],{"class":39},[29,36661,310],{"class":309},[29,36663,3767],{"class":103},[29,36665,32588],{"class":39},[29,36667,33237],{"class":103},[29,36669,1204],{"class":39},[29,36671,33242],{"class":305},[29,36673,1254],{"class":39},[29,36675,33247],{"class":103},[29,36677,1204],{"class":39},[29,36679,33242],{"class":305},[29,36681,1254],{"class":39},[29,36683,3767],{"class":103},[29,36685,33258],{"class":309},[29,36687,840],{"class":305},[29,36689,525],{"class":39},[29,36691,33265],{"class":309},[29,36693,840],{"class":305},[29,36695,525],{"class":39},[29,36697,33272],{"class":309},[29,36699,36700,36702,36704,36706,36708,36710,36712,36714,36716,36718,36720,36722,36724,36726,36728,36730,36732,36734,36736,36738],{"class":31,"line":33275},[29,36701,32580],{"class":39},[29,36703,310],{"class":309},[29,36705,3767],{"class":103},[29,36707,32588],{"class":39},[29,36709,33286],{"class":103},[29,36711,1204],{"class":39},[29,36713,33242],{"class":305},[29,36715,1254],{"class":39},[29,36717,33295],{"class":103},[29,36719,1204],{"class":39},[29,36721,33242],{"class":305},[29,36723,1254],{"class":39},[29,36725,3767],{"class":103},[29,36727,33306],{"class":309},[29,36729,840],{"class":305},[29,36731,525],{"class":39},[29,36733,33313],{"class":309},[29,36735,840],{"class":305},[29,36737,525],{"class":39},[29,36739,33272],{"class":309},[29,36741,36742],{"class":31,"line":33322},[29,36743,2575],{"emptyLinePlaceholder":233},[29,36745,36746],{"class":31,"line":33327},[29,36747,33330],{"class":367},[29,36749,36750,36752,36754,36756,36758,36760,36762],{"class":31,"line":33333},[29,36751,2672],{"class":305},[29,36753,33338],{"class":309},[29,36755,840],{"class":305},[29,36757,525],{"class":39},[29,36759,1248],{"class":309},[29,36761,1268],{"class":305},[29,36763,33349],{"class":309},[29,36765,36766],{"class":31,"line":33352},[29,36767,33355],{"class":367},[29,36769,36770,36772,36774,36776,36778,36780,36782],{"class":31,"line":33358},[29,36771,33361],{"class":309},[29,36773,349],{"class":39},[29,36775,355],{"class":305},[29,36777,33368],{"class":309},[29,36779,840],{"class":305},[29,36781,525],{"class":39},[29,36783,33375],{"class":309},[29,36785,36786],{"class":31,"line":33378},[29,36787,33381],{"class":367},[29,36789,36790],{"class":31,"line":33384},[29,36791,33387],{"class":367},[29,36793,36794,36796,36798],{"class":31,"line":33390},[29,36795,33393],{"class":309},[29,36797,355],{"class":305},[29,36799,32443],{"class":309},[29,36801,36802],{"class":31,"line":33400},[29,36803,2575],{"emptyLinePlaceholder":233},[29,36805,36806],{"class":31,"line":33405},[29,36807,33408],{"class":367},[29,36809,36810,36812,36814,36816,36818],{"class":31,"line":33411},[29,36811,33414],{"class":309},[29,36813,355],{"class":305},[29,36815,33419],{"class":309},[29,36817,840],{"class":305},[29,36819,33424],{"class":309},[29,36821,36822,36824,36826,36828,36830,36832,36834,36836,36838,36840,36842,36844,36846,36848,36850,36852,36854,36856],{"class":31,"line":33427},[29,36823,32580],{"class":39},[29,36825,310],{"class":309},[29,36827,33434],{"class":103},[29,36829,1204],{"class":39},[29,36831,33439],{"class":305},[29,36833,1254],{"class":39},[29,36835,852],{"class":103},[29,36837,1204],{"class":39},[29,36839,33439],{"class":305},[29,36841,1254],{"class":39},[29,36843,33452],{"class":103},[29,36845,33455],{"class":309},[29,36847,33458],{"class":305},[29,36849,1215],{"class":39},[29,36851,33463],{"class":309},[29,36853,636],{"class":305},[29,36855,1215],{"class":39},[29,36857,30626],{"class":309},[29,36859,36860],{"class":31,"line":33472},[29,36861,36862],{"class":367},"    # 选择最优参数并保存\n",[29,36864,36865],{"class":31,"line":33478},[29,36866,36867],{"class":367},"    # 保存最佳模型权重字典\n",[29,36869,36870,36873,36875],{"class":31,"line":33484},[29,36871,36872],{"class":309},"    torch.save(best_model_wts,",[29,36874,33496],{"class":103},[29,36876,316],{"class":309},[29,36878,36879],{"class":31,"line":33490},[29,36880,33516],{"class":367},[29,36882,36883,36885,36887,36889,36891,36893],{"class":31,"line":33501},[29,36884,33522],{"class":309},[29,36886,355],{"class":305},[29,36888,33527],{"class":309},[29,36890,33530],{"class":5391},[29,36892,355],{"class":305},[29,36894,1722],{"class":309},[29,36896,36897,36899,36901,36903],{"class":31,"line":33507},[29,36898,33540],{"class":103},[29,36900,1167],{"class":309},[29,36902,33545],{"class":39},[29,36904,33548],{"class":309},[29,36906,36907,36909],{"class":31,"line":33513},[29,36908,33554],{"class":103},[29,36910,33557],{"class":309},[29,36912,36913,36915],{"class":31,"line":33519},[29,36914,33563],{"class":103},[29,36916,33566],{"class":309},[29,36918,36919,36921],{"class":31,"line":33537},[29,36920,33572],{"class":103},[29,36922,33575],{"class":309},[29,36924,36925,36927],{"class":31,"line":33551},[29,36926,33581],{"class":103},[29,36928,33584],{"class":309},[29,36930,36931],{"class":31,"line":33560},[29,36932,33590],{"class":309},[29,36934,36935],{"class":31,"line":33569},[29,36936,33596],{"class":367},[29,36938,36939,36941],{"class":31,"line":33578},[29,36940,4265],{"class":305},[29,36942,33604],{"class":309},[29,36944,36945],{"class":31,"line":33587},[29,36946,2575],{"emptyLinePlaceholder":233},[29,36948,36949],{"class":31,"line":33593},[29,36950,33615],{"class":367},[29,36952,36953,36955,36957],{"class":31,"line":33599},[29,36954,32076],{"class":305},[29,36956,33623],{"class":35},[29,36958,33626],{"class":309},[29,36960,36961],{"class":31,"line":33607},[29,36962,33632],{"class":367},[29,36964,36965,36967,36969,36971,36973,36975,36977,36979],{"class":31,"line":33612},[29,36966,33638],{"class":309},[29,36968,31822],{"class":5391},[29,36970,355],{"class":305},[29,36972,310],{"class":309},[29,36974,806],{"class":39},[29,36976,686],{"class":309},[29,36978,601],{"class":39},[29,36980,30626],{"class":309},[29,36982,36983],{"class":31,"line":33618},[29,36984,33658],{"class":367},[29,36986,36987],{"class":31,"line":33629},[29,36988,33664],{"class":367},[29,36990,36991],{"class":31,"line":33635},[29,36992,33670],{"class":367},[29,36994,36995,36997,36999,37001,37003,37005,37007],{"class":31,"line":33655},[29,36996,31856],{"class":309},[29,36998,525],{"class":39},[29,37000,686],{"class":309},[29,37002,386],{"class":39},[29,37004,686],{"class":309},[29,37006,525],{"class":39},[29,37008,316],{"class":309},[29,37010,37011],{"class":31,"line":33661},[29,37012,33693],{"class":367},[29,37014,37015],{"class":31,"line":33667},[29,37016,33699],{"class":367},[29,37018,37019],{"class":31,"line":33673},[29,37020,33705],{"class":367},[29,37022,37023],{"class":31,"line":33690},[29,37024,33711],{"class":367},[29,37026,37027],{"class":31,"line":33696},[29,37028,33717],{"class":367},[29,37030,37031,37033,37035,37037,37039,37041,37043,37045,37047],{"class":31,"line":33702},[29,37032,33723],{"class":309},[29,37034,33726],{"class":103},[29,37036,33729],{"class":309},[29,37038,33732],{"class":103},[29,37040,686],{"class":309},[29,37042,33737],{"class":5391},[29,37044,355],{"class":305},[29,37046,33742],{"class":103},[29,37048,316],{"class":309},[29,37050,37051,37053,37055,37057,37059,37061,37063,37065,37067],{"class":31,"line":33708},[29,37052,33723],{"class":309},[29,37054,33726],{"class":103},[29,37056,33754],{"class":309},[29,37058,33757],{"class":103},[29,37060,686],{"class":309},[29,37062,33737],{"class":5391},[29,37064,355],{"class":305},[29,37066,33766],{"class":103},[29,37068,316],{"class":309},[29,37070,37071],{"class":31,"line":33714},[29,37072,33774],{"class":367},[29,37074,37075],{"class":31,"line":33720},[29,37076,33780],{"class":309},[29,37078,37079],{"class":31,"line":33747},[29,37080,33786],{"class":367},[29,37082,37083,37085,37087],{"class":31,"line":33771},[29,37084,33792],{"class":309},[29,37086,33795],{"class":103},[29,37088,316],{"class":309},[29,37090,37091,37093,37095],{"class":31,"line":33777},[29,37092,33803],{"class":309},[29,37094,33806],{"class":103},[29,37096,316],{"class":309},[29,37098,37099],{"class":31,"line":33783},[29,37100,33814],{"class":367},[29,37102,37103,37105,37107,37109,37111,37113,37115],{"class":31,"line":33789},[29,37104,31856],{"class":309},[29,37106,525],{"class":39},[29,37108,686],{"class":309},[29,37110,386],{"class":39},[29,37112,686],{"class":309},[29,37114,386],{"class":39},[29,37116,316],{"class":309},[29,37118,37119,37121,37123,37125,37127,37129,37131,37133,37135],{"class":31,"line":33800},[29,37120,33723],{"class":309},[29,37122,33726],{"class":103},[29,37124,33841],{"class":309},[29,37126,33732],{"class":103},[29,37128,686],{"class":309},[29,37130,33737],{"class":5391},[29,37132,355],{"class":305},[29,37134,33852],{"class":103},[29,37136,316],{"class":309},[29,37138,37139,37141,37143,37145,37147,37149,37151,37153,37155],{"class":31,"line":33811},[29,37140,33723],{"class":309},[29,37142,33726],{"class":103},[29,37144,33864],{"class":309},[29,37146,33757],{"class":103},[29,37148,686],{"class":309},[29,37150,33737],{"class":5391},[29,37152,355],{"class":305},[29,37154,33875],{"class":103},[29,37156,316],{"class":309},[29,37158,37159],{"class":31,"line":33817},[29,37160,33883],{"class":367},[29,37162,37163],{"class":31,"line":33834},[29,37164,33780],{"class":309},[29,37166,37167,37169,37171],{"class":31,"line":33857},[29,37168,33792],{"class":309},[29,37170,33726],{"class":103},[29,37172,316],{"class":309},[29,37174,37175,37177,37179],{"class":31,"line":33880},[29,37176,33803],{"class":309},[29,37178,33905],{"class":103},[29,37180,316],{"class":309},[29,37182,37183],{"class":31,"line":33886},[29,37184,33913],{"class":309},[29,37186,37187],{"class":31,"line":33891},[29,37188,2575],{"emptyLinePlaceholder":233},[29,37190,37191],{"class":31,"line":33900},[29,37192,33924],{"class":367},[29,37194,37195,37197,37199,37201,37203],{"class":31,"line":33910},[29,37196,1707],{"class":305},[29,37198,31349],{"class":39},[29,37200,3124],{"class":305},[29,37202,31354],{"class":103},[29,37204,3914],{"class":309},[29,37206,37207],{"class":31,"line":33916},[29,37208,33943],{"class":367},[29,37210,37211,37214,37216],{"class":31,"line":33921},[29,37212,37213],{"class":309},"    AlexNet",[29,37215,355],{"class":305},[29,37217,37218],{"class":309},"AlexNet()\n",[29,37220,37221,37223,37225],{"class":31,"line":33927},[29,37222,33960],{"class":309},[29,37224,355],{"class":305},[29,37226,33965],{"class":309},[29,37228,37229,37231,37233,37236,37238,37240,37242],{"class":31,"line":33940},[29,37230,33522],{"class":309},[29,37232,355],{"class":305},[29,37234,37235],{"class":309},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[29,37237,33978],{"class":5391},[29,37239,355],{"class":305},[29,37241,1008],{"class":39},[29,37243,316],{"class":309},[29,37245,37246],{"class":31,"line":33946},[29,37247,33990],{"class":309},[259,37249,37250],{"start":51},[178,37251,34003],{},[19,37253,37255],{"className":30507,"code":37254,"language":30509,"meta":24,"style":24},"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",[26,37256,37257,37263,37273,37283,37293,37297,37307,37317,37328,37332,37336,37340,37348,37364,37374,37390,37400,37414,37418,37428,37438,37448,37454,37458,37462,37470,37474,37490,37498,37502,37506,37514,37522,37526,37530,37534,37538,37544,37548,37558,37566,37574,37578,37582,37586,37594,37598,37614,37618,37622,37626,37638,37642,37654,37658,37662,37674,37678,37688,37692,37696,37708,37712,37720,37724,37728,37736,37740,37748,37752,37756,37760,37764,37768,37784,37792,37796,37800,37848,37854,37858,37868,37876,37884,37888,37892,37896,37900,37908,37912,37928,37932,37940,37948],{"__ignoreMap":24},[29,37258,37259,37261],{"class":31,"line":32},[29,37260,30521],{"class":305},[29,37262,30524],{"class":309},[29,37264,37265,37267,37269,37271],{"class":31,"line":43},[29,37266,30521],{"class":305},[29,37268,31544],{"class":309},[29,37270,31512],{"class":305},[29,37272,31549],{"class":309},[29,37274,37275,37277,37279,37281],{"class":31,"line":51},[29,37276,30866],{"class":305},[29,37278,34031],{"class":309},[29,37280,30521],{"class":305},[29,37282,34036],{"class":309},[29,37284,37285,37287,37289,37291],{"class":31,"line":59},[29,37286,30866],{"class":305},[29,37288,31527],{"class":309},[29,37290,30521],{"class":305},[29,37292,31532],{"class":309},[29,37294,37295],{"class":31,"line":67},[29,37296,34051],{"class":367},[29,37298,37299,37301,37303,37305],{"class":31,"line":75},[29,37300,30866],{"class":305},[29,37302,31497],{"class":309},[29,37304,30521],{"class":305},[29,37306,31502],{"class":309},[29,37308,37309,37311,37313,37315],{"class":31,"line":83},[29,37310,30866],{"class":305},[29,37312,32043],{"class":309},[29,37314,30521],{"class":305},[29,37316,35686],{"class":309},[29,37318,37319,37321,37324,37326],{"class":31,"line":158},[29,37320,30866],{"class":305},[29,37322,37323],{"class":309}," 练习.AlexNet.model ",[29,37325,30521],{"class":305},[29,37327,35686],{"class":309},[29,37329,37330],{"class":31,"line":166},[29,37331,2575],{"emptyLinePlaceholder":233},[29,37333,37334],{"class":31,"line":1505},[29,37335,2575],{"emptyLinePlaceholder":233},[29,37337,37338],{"class":31,"line":1788},[29,37339,34080],{"class":367},[29,37341,37342,37344,37346],{"class":31,"line":1793},[29,37343,32076],{"class":305},[29,37345,34087],{"class":35},[29,37347,32082],{"class":309},[29,37349,37350,37352,37354,37356,37358,37360,37362],{"class":31,"line":1799},[29,37351,34094],{"class":309},[29,37353,355],{"class":305},[29,37355,31584],{"class":309},[29,37357,31587],{"class":5391},[29,37359,355],{"class":305},[29,37361,31592],{"class":103},[29,37363,31595],{"class":309},[29,37365,37366,37368,37370,37372],{"class":31,"line":1804},[29,37367,34111],{"class":5391},[29,37369,355],{"class":305},[29,37371,34116],{"class":39},[29,37373,31595],{"class":309},[29,37375,37376,37378,37380,37382,37384,37386,37388],{"class":31,"line":1818},[29,37377,34123],{"class":5391},[29,37379,355],{"class":305},[29,37381,31622],{"class":309},[29,37383,31625],{"class":5391},[29,37385,355],{"class":305},[29,37387,35578],{"class":39},[29,37389,31633],{"class":309},[29,37391,37392,37394,37396,37398],{"class":31,"line":1823},[29,37393,34140],{"class":5391},[29,37395,355],{"class":305},[29,37397,31605],{"class":39},[29,37399,316],{"class":309},[29,37401,37402,37404,37406,37408,37410,37412],{"class":31,"line":1829},[29,37403,34151],{"class":309},[29,37405,355],{"class":305},[29,37407,31663],{"class":309},[29,37409,31666],{"class":5391},[29,37411,355],{"class":305},[29,37413,34162],{"class":309},[29,37415,37416],{"class":31,"line":1850},[29,37417,34167],{"class":367},[29,37419,37420,37422,37424,37426],{"class":31,"line":1855},[29,37421,34172],{"class":5391},[29,37423,355],{"class":305},[29,37425,525],{"class":39},[29,37427,31595],{"class":309},[29,37429,37430,37432,37434,37436],{"class":31,"line":1869},[29,37431,34183],{"class":5391},[29,37433,355],{"class":305},[29,37435,31605],{"class":39},[29,37437,31595],{"class":309},[29,37439,37440,37442,37444,37446],{"class":31,"line":1874},[29,37441,34194],{"class":5391},[29,37443,355],{"class":305},[29,37445,499],{"class":39},[29,37447,316],{"class":309},[29,37449,37450,37452],{"class":31,"line":1903},[29,37451,4265],{"class":305},[29,37453,34207],{"class":309},[29,37455,37456],{"class":31,"line":1908},[29,37457,2575],{"emptyLinePlaceholder":233},[29,37459,37460],{"class":31,"line":1925},[29,37461,34216],{"class":367},[29,37463,37464,37466,37468],{"class":31,"line":1930},[29,37465,32076],{"class":305},[29,37467,34223],{"class":35},[29,37469,34226],{"class":309},[29,37471,37472],{"class":31,"line":1935},[29,37473,34231],{"class":367},[29,37475,37476,37478,37480,37482,37484,37486,37488],{"class":31,"line":1940},[29,37477,31366],{"class":309},[29,37479,355],{"class":305},[29,37481,31373],{"class":103},[29,37483,1880],{"class":305},[29,37485,31378],{"class":309},[29,37487,1877],{"class":305},[29,37489,34248],{"class":103},[29,37491,37492,37494,37496],{"class":31,"line":1954},[29,37493,31418],{"class":309},[29,37495,355],{"class":305},[29,37497,32418],{"class":309},[29,37499,37500],{"class":31,"line":1959},[29,37501,2575],{"emptyLinePlaceholder":233},[29,37503,37504],{"class":31,"line":2752},[29,37505,34265],{"class":367},[29,37507,37508,37510,37512],{"class":31,"line":2766},[29,37509,34270],{"class":309},[29,37511,355],{"class":305},[29,37513,32471],{"class":39},[29,37515,37516,37518,37520],{"class":31,"line":2774},[29,37517,34279],{"class":309},[29,37519,355],{"class":305},[29,37521,3260],{"class":39},[29,37523,37524],{"class":31,"line":2779},[29,37525,2575],{"emptyLinePlaceholder":233},[29,37527,37528],{"class":31,"line":2785},[29,37529,34292],{"class":367},[29,37531,37532],{"class":31,"line":2791},[29,37533,34297],{"class":367},[29,37535,37536],{"class":31,"line":2796},[29,37537,34302],{"class":367},[29,37539,37540,37542],{"class":31,"line":8123},[29,37541,34307],{"class":305},[29,37543,33013],{"class":309},[29,37545,37546],{"class":31,"line":8147},[29,37547,34314],{"class":367},[29,37549,37550,37552,37554,37556],{"class":31,"line":8152},[29,37551,3578],{"class":305},[29,37553,34321],{"class":309},[29,37555,26172],{"class":305},[29,37557,34326],{"class":309},[29,37559,37560,37562,37564],{"class":31,"line":8158},[29,37561,34331],{"class":309},[29,37563,355],{"class":305},[29,37565,34336],{"class":309},[29,37567,37568,37570,37572],{"class":31,"line":8185},[29,37569,34341],{"class":309},[29,37571,355],{"class":305},[29,37573,34346],{"class":309},[29,37575,37576],{"class":31,"line":8190},[29,37577,34351],{"class":367},[29,37579,37580],{"class":31,"line":8196},[29,37581,33004],{"class":309},[29,37583,37584],{"class":31,"line":8208},[29,37585,34360],{"class":367},[29,37587,37588,37590,37592],{"class":31,"line":8220},[29,37589,32789],{"class":309},[29,37591,355],{"class":305},[29,37593,34369],{"class":309},[29,37595,37596],{"class":31,"line":8232},[29,37597,34374],{"class":367},[29,37599,37600,37602,37604,37606,37608,37610,37612],{"class":31,"line":9891},[29,37601,32806],{"class":309},[29,37603,355],{"class":305},[29,37605,32811],{"class":309},[29,37607,32814],{"class":5391},[29,37609,355],{"class":305},[29,37611,525],{"class":39},[29,37613,316],{"class":309},[29,37615,37616],{"class":31,"line":9916},[29,37617,34395],{"class":367},[29,37619,37620],{"class":31,"line":9939},[29,37621,34400],{"class":367},[29,37623,37624],{"class":31,"line":9963},[29,37625,34405],{"class":367},[29,37627,37628,37630,37632,37634,37636],{"class":31,"line":9968},[29,37629,34410],{"class":309},[29,37631,9652],{"class":305},[29,37633,32916],{"class":309},[29,37635,3124],{"class":305},[29,37637,34419],{"class":309},[29,37639,37640],{"class":31,"line":9973},[29,37641,34424],{"class":367},[29,37643,37644,37646,37648,37650,37652],{"class":31,"line":9978},[29,37645,34429],{"class":309},[29,37647,9652],{"class":305},[29,37649,34434],{"class":309},[29,37651,499],{"class":39},[29,37653,316],{"class":309},[29,37655,37656],{"class":31,"line":9987},[29,37657,2575],{"emptyLinePlaceholder":233},[29,37659,37660],{"class":31,"line":9992},[29,37661,34447],{"class":367},[29,37663,37664,37666,37668,37670,37672],{"class":31,"line":9998},[29,37665,34452],{"class":309},[29,37667,355],{"class":305},[29,37669,34457],{"class":309},[29,37671,892],{"class":305},[29,37673,34462],{"class":309},[29,37675,37676],{"class":31,"line":10019},[29,37677,34467],{"class":367},[29,37679,37680,37682,37684,37686],{"class":31,"line":10025},[29,37681,32580],{"class":39},[29,37683,310],{"class":309},[29,37685,34476],{"class":103},[29,37687,34479],{"class":309},[29,37689,37690],{"class":31,"line":10039},[29,37691,2575],{"emptyLinePlaceholder":233},[29,37693,37694],{"class":31,"line":10045},[29,37695,34488],{"class":367},[29,37697,37698,37700,37702,37704,37706],{"class":31,"line":10072},[29,37699,1707],{"class":305},[29,37701,31349],{"class":39},[29,37703,3124],{"class":305},[29,37705,31354],{"class":103},[29,37707,3914],{"class":309},[29,37709,37710],{"class":31,"line":10081},[29,37711,34505],{"class":367},[29,37713,37714,37716,37718],{"class":31,"line":10087},[29,37715,31418],{"class":309},[29,37717,355],{"class":305},[29,37719,37218],{"class":309},[29,37721,37722],{"class":31,"line":10095},[29,37723,34518],{"class":367},[29,37725,37726],{"class":31,"line":10100},[29,37727,34523],{"class":367},[29,37729,37730,37732,37734],{"class":31,"line":16779},[29,37731,34528],{"class":309},[29,37733,34531],{"class":103},[29,37735,30626],{"class":309},[29,37737,37738],{"class":31,"line":16785},[29,37739,34538],{"class":367},[29,37741,37742,37744,37746],{"class":31,"line":16808},[29,37743,34151],{"class":309},[29,37745,355],{"class":305},[29,37747,34547],{"class":309},[29,37749,37750],{"class":31,"line":16814},[29,37751,34552],{"class":367},[29,37753,37754],{"class":31,"line":16837},[29,37755,34557],{"class":309},[29,37757,37758],{"class":31,"line":16851},[29,37759,2575],{"emptyLinePlaceholder":233},[29,37761,37762],{"class":31,"line":16871},[29,37763,34566],{"class":367},[29,37765,37766],{"class":31,"line":16877},[29,37767,34571],{"class":367},[29,37769,37770,37772,37774,37776,37778,37780,37782],{"class":31,"line":16888},[29,37771,31366],{"class":309},[29,37773,355],{"class":305},[29,37775,31373],{"class":103},[29,37777,1880],{"class":305},[29,37779,31378],{"class":309},[29,37781,1877],{"class":305},[29,37783,34248],{"class":103},[29,37785,37786,37788,37790],{"class":31,"line":16911},[29,37787,31418],{"class":309},[29,37789,355],{"class":305},[29,37791,32418],{"class":309},[29,37793,37794],{"class":31,"line":16933},[29,37795,34600],{"class":367},[29,37797,37798],{"class":31,"line":16938},[29,37799,34605],{"class":367},[29,37801,37802,37804,37806,37808,37810,37812,37814,37816,37818,37820,37822,37824,37826,37828,37830,37832,37834,37836,37838,37840,37842,37844,37846],{"class":31,"line":16944},[29,37803,34610],{"class":309},[29,37805,355],{"class":305},[29,37807,1198],{"class":309},[29,37809,34617],{"class":103},[29,37811,686],{"class":309},[29,37813,34622],{"class":103},[29,37815,686],{"class":309},[29,37817,34627],{"class":103},[29,37819,686],{"class":309},[29,37821,34632],{"class":103},[29,37823,686],{"class":309},[29,37825,34637],{"class":103},[29,37827,686],{"class":309},[29,37829,34642],{"class":103},[29,37831,686],{"class":309},[29,37833,34647],{"class":103},[29,37835,686],{"class":309},[29,37837,34652],{"class":103},[29,37839,686],{"class":309},[29,37841,34657],{"class":103},[29,37843,686],{"class":309},[29,37845,34662],{"class":103},[29,37847,33375],{"class":309},[29,37849,37850,37852],{"class":31,"line":16958},[29,37851,34307],{"class":305},[29,37853,33013],{"class":309},[29,37855,37856],{"class":31,"line":16971},[29,37857,34675],{"class":367},[29,37859,37860,37862,37864,37866],{"class":31,"line":16976},[29,37861,3578],{"class":305},[29,37863,34682],{"class":309},[29,37865,26172],{"class":305},[29,37867,34326],{"class":309},[29,37869,37870,37872,37874],{"class":31,"line":16990},[29,37871,32739],{"class":309},[29,37873,355],{"class":305},[29,37875,32744],{"class":309},[29,37877,37878,37880,37882],{"class":31,"line":16995},[29,37879,32754],{"class":309},[29,37881,355],{"class":305},[29,37883,32759],{"class":309},[29,37885,37886],{"class":31,"line":17001},[29,37887,2575],{"emptyLinePlaceholder":233},[29,37889,37890],{"class":31,"line":17006},[29,37891,34711],{"class":367},[29,37893,37894],{"class":31,"line":17020},[29,37895,33004],{"class":309},[29,37897,37898],{"class":31,"line":17025},[29,37899,34720],{"class":367},[29,37901,37902,37904,37906],{"class":31,"line":17030},[29,37903,32789],{"class":309},[29,37905,355],{"class":305},[29,37907,32794],{"class":309},[29,37909,37910],{"class":31,"line":17044},[29,37911,34733],{"class":367},[29,37913,37914,37916,37918,37920,37922,37924,37926],{"class":31,"line":17056},[29,37915,32806],{"class":309},[29,37917,355],{"class":305},[29,37919,32811],{"class":309},[29,37921,32814],{"class":5391},[29,37923,355],{"class":305},[29,37925,525],{"class":39},[29,37927,316],{"class":309},[29,37929,37930],{"class":31,"line":17061},[29,37931,34754],{"class":367},[29,37933,37934,37936,37938],{"class":31,"line":17074},[29,37935,34759],{"class":309},[29,37937,355],{"class":305},[29,37939,34764],{"class":309},[29,37941,37942,37944,37946],{"class":31,"line":17079},[29,37943,34769],{"class":309},[29,37945,355],{"class":305},[29,37947,34774],{"class":309},[29,37949,37950,37952,37954,37956,37958,37960,37962,37964],{"class":31,"line":17084},[29,37951,34779],{"class":39},[29,37953,310],{"class":309},[29,37955,34784],{"class":103},[29,37957,34787],{"class":309},[29,37959,34790],{"class":103},[29,37961,686],{"class":309},[29,37963,34795],{"class":103},[29,37965,34798],{"class":309},[275,37967,37969],{"id":37968},"_22vgg","2.2.VGG",[22173,37971,37973],{"id":37972},"_221原理","2.2.1.原理",[171,37975,37976],{},[1638,37977],{"alt":24,"src":37978},"\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",[171,37980,37981],{},[1638,37982],{"alt":24,"src":37983},"\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",[171,37985,37986],{},[1638,37987],{"alt":24,"src":37988},"\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",[171,37990,37991],{},"参数详细描述：",[171,37993,37994],{},[1638,37995],{"alt":24,"src":37996},"\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",[171,37998,37999],{},[1638,38000],{"alt":24,"src":38001},"\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",[171,38003,38004],{},[1638,38005],{"alt":24,"src":38006},"\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",[171,38008,38009],{},[1638,38010],{"alt":24,"src":38011},"\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",[171,38013,38014],{},[1638,38015],{"alt":24,"src":38016},"\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",[22173,38018,38020],{"id":38019},"_222代码实现","2.2.2.代码实现",[259,38022,38023],{},[178,38024,38025],{},"网络搭建",[19,38027,38029],{"className":30507,"code":38028,"language":30509,"meta":24,"style":24},"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",[26,38030,38031,38037,38049,38059,38069,38073,38090,38098,38117,38122,38127,38139,38177,38182,38218,38222,38251,38256,38261,38272,38308,38312,38348,38352,38380,38384,38389,38400,38436,38440,38476,38480,38516,38520,38548,38552,38557,38568,38605,38609,38645,38649,38685,38689,38717,38721,38726,38737,38773,38777,38813,38817,38853,38857,38885,38889,38894,38905,38910,38915,38920,38941,38945,38957,38961,38973,38977,38981,38986,38991,39006,39011,39021,39026,39041,39046,39065,39070,39079,39084,39094,39099,39104,39118,39123,39137,39145,39149,39153,39161,39172,39183,39194,39205,39216,39227,39233,39237,39242,39255,39275,39281,39290],{"__ignoreMap":24},[29,38032,38033,38035],{"class":31,"line":32},[29,38034,30521],{"class":305},[29,38036,30524],{"class":309},[29,38038,38039,38041,38044,38046],{"class":31,"line":43},[29,38040,30866],{"class":305},[29,38042,38043],{"class":309}," sympy.core.sympify ",[29,38045,30521],{"class":305},[29,38047,38048],{"class":309}," kernS\n",[29,38050,38051,38053,38055,38057],{"class":31,"line":51},[29,38052,30866],{"class":305},[29,38054,30869],{"class":309},[29,38056,30521],{"class":305},[29,38058,30874],{"class":309},[29,38060,38061,38063,38065,38067],{"class":31,"line":59},[29,38062,30866],{"class":305},[29,38064,30886],{"class":309},[29,38066,30521],{"class":305},[29,38068,30891],{"class":309},[29,38070,38071],{"class":31,"line":67},[29,38072,2575],{"emptyLinePlaceholder":233},[29,38074,38075,38077,38080,38082,38084,38086,38088],{"class":31,"line":75},[29,38076,14869],{"class":305},[29,38078,38079],{"class":35}," VGG16",[29,38081,310],{"class":309},[29,38083,30907],{"class":35},[29,38085,866],{"class":309},[29,38087,30912],{"class":35},[29,38089,30915],{"class":309},[29,38091,38092,38094,38096],{"class":31,"line":83},[29,38093,30930],{"class":305},[29,38095,30933],{"class":39},[29,38097,30936],{"class":309},[29,38099,38100,38102,38104,38107,38109,38111,38113,38115],{"class":31,"line":158},[29,38101,30946],{"class":39},[29,38103,310],{"class":309},[29,38105,38106],{"class":39},"VGG16",[29,38108,12610],{"class":309},[29,38110,30952],{"class":39},[29,38112,30955],{"class":309},[29,38114,30958],{"class":39},[29,38116,2151],{"class":309},[29,38118,38119],{"class":31,"line":166},[29,38120,38121],{"class":367},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[29,38123,38124],{"class":31,"line":1505},[29,38125,38126],{"class":367},"        # 这里用的是灰度图\n",[29,38128,38129,38131,38134,38136],{"class":31,"line":1788},[29,38130,30974],{"class":39},[29,38132,38133],{"class":309},".block1",[29,38135,355],{"class":305},[29,38137,38138],{"class":309},"nn.Sequential(\n",[29,38140,38141,38144,38146,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174],{"class":31,"line":1793},[29,38142,38143],{"class":309},"            nn.Conv2d(",[29,38145,30985],{"class":5391},[29,38147,355],{"class":305},[29,38149,525],{"class":39},[29,38151,686],{"class":309},[29,38153,30994],{"class":5391},[29,38155,355],{"class":305},[29,38157,511],{"class":39},[29,38159,686],{"class":309},[29,38161,31003],{"class":5391},[29,38163,355],{"class":305},[29,38165,380],{"class":39},[29,38167,686],{"class":309},[29,38169,31012],{"class":5391},[29,38171,355],{"class":305},[29,38173,525],{"class":39},[29,38175,38176],{"class":309},"),\n",[29,38178,38179],{"class":31,"line":1799},[29,38180,38181],{"class":309},"            nn.ReLU(),\n",[29,38183,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206,38208,38210,38212,38214,38216],{"class":31,"line":1804},[29,38185,38143],{"class":309},[29,38187,30985],{"class":5391},[29,38189,355],{"class":305},[29,38191,511],{"class":39},[29,38193,686],{"class":309},[29,38195,30994],{"class":5391},[29,38197,355],{"class":305},[29,38199,511],{"class":39},[29,38201,686],{"class":309},[29,38203,31003],{"class":5391},[29,38205,355],{"class":305},[29,38207,380],{"class":39},[29,38209,686],{"class":309},[29,38211,31012],{"class":5391},[29,38213,355],{"class":305},[29,38215,525],{"class":39},[29,38217,38176],{"class":309},[29,38219,38220],{"class":31,"line":1818},[29,38221,38181],{"class":309},[29,38223,38224,38227,38229,38231,38233,38235,38237,38239,38241,38243,38245,38247,38249],{"class":31,"line":1823},[29,38225,38226],{"class":309},"            nn.MaxPool2d(",[29,38228,31003],{"class":5391},[29,38230,355],{"class":305},[29,38232,386],{"class":39},[29,38234,686],{"class":309},[29,38236,31058],{"class":5391},[29,38238,355],{"class":305},[29,38240,386],{"class":39},[29,38242,686],{"class":309},[29,38244,31012],{"class":5391},[29,38246,355],{"class":305},[29,38248,499],{"class":39},[29,38250,316],{"class":309},[29,38252,38253],{"class":31,"line":1829},[29,38254,38255],{"class":309},"        )\n",[29,38257,38258],{"class":31,"line":1850},[29,38259,38260],{"class":367},"        # 第二层\n",[29,38262,38263,38265,38268,38270],{"class":31,"line":1855},[29,38264,30974],{"class":39},[29,38266,38267],{"class":309},".block2",[29,38269,355],{"class":305},[29,38271,38138],{"class":309},[29,38273,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306],{"class":31,"line":1869},[29,38275,38143],{"class":309},[29,38277,30985],{"class":5391},[29,38279,355],{"class":305},[29,38281,511],{"class":39},[29,38283,686],{"class":309},[29,38285,30994],{"class":5391},[29,38287,355],{"class":305},[29,38289,32199],{"class":39},[29,38291,686],{"class":309},[29,38293,31003],{"class":5391},[29,38295,355],{"class":305},[29,38297,380],{"class":39},[29,38299,686],{"class":309},[29,38301,31012],{"class":5391},[29,38303,355],{"class":305},[29,38305,525],{"class":39},[29,38307,38176],{"class":309},[29,38309,38310],{"class":31,"line":1874},[29,38311,38181],{"class":309},[29,38313,38314,38316,38318,38320,38322,38324,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346],{"class":31,"line":1903},[29,38315,38143],{"class":309},[29,38317,30985],{"class":5391},[29,38319,355],{"class":305},[29,38321,32199],{"class":39},[29,38323,686],{"class":309},[29,38325,30994],{"class":5391},[29,38327,355],{"class":305},[29,38329,32199],{"class":39},[29,38331,686],{"class":309},[29,38333,31003],{"class":5391},[29,38335,355],{"class":305},[29,38337,380],{"class":39},[29,38339,686],{"class":309},[29,38341,31012],{"class":5391},[29,38343,355],{"class":305},[29,38345,525],{"class":39},[29,38347,38176],{"class":309},[29,38349,38350],{"class":31,"line":1908},[29,38351,38181],{"class":309},[29,38353,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376,38378],{"class":31,"line":1925},[29,38355,38226],{"class":309},[29,38357,31003],{"class":5391},[29,38359,355],{"class":305},[29,38361,386],{"class":39},[29,38363,686],{"class":309},[29,38365,31058],{"class":5391},[29,38367,355],{"class":305},[29,38369,386],{"class":39},[29,38371,686],{"class":309},[29,38373,31012],{"class":5391},[29,38375,355],{"class":305},[29,38377,499],{"class":39},[29,38379,316],{"class":309},[29,38381,38382],{"class":31,"line":1930},[29,38383,38255],{"class":309},[29,38385,38386],{"class":31,"line":1935},[29,38387,38388],{"class":367},"        # 第三层\n",[29,38390,38391,38393,38396,38398],{"class":31,"line":1940},[29,38392,30974],{"class":39},[29,38394,38395],{"class":309},".block3",[29,38397,355],{"class":305},[29,38399,38138],{"class":309},[29,38401,38402,38404,38406,38408,38410,38412,38414,38416,38418,38420,38422,38424,38426,38428,38430,38432,38434],{"class":31,"line":1954},[29,38403,38143],{"class":309},[29,38405,30985],{"class":5391},[29,38407,355],{"class":305},[29,38409,32199],{"class":39},[29,38411,686],{"class":309},[29,38413,30994],{"class":5391},[29,38415,355],{"class":305},[29,38417,34999],{"class":39},[29,38419,686],{"class":309},[29,38421,31003],{"class":5391},[29,38423,355],{"class":305},[29,38425,380],{"class":39},[29,38427,686],{"class":309},[29,38429,31012],{"class":5391},[29,38431,355],{"class":305},[29,38433,525],{"class":39},[29,38435,38176],{"class":309},[29,38437,38438],{"class":31,"line":1959},[29,38439,38181],{"class":309},[29,38441,38442,38444,38446,38448,38450,38452,38454,38456,38458,38460,38462,38464,38466,38468,38470,38472,38474],{"class":31,"line":2752},[29,38443,38143],{"class":309},[29,38445,30985],{"class":5391},[29,38447,355],{"class":305},[29,38449,34999],{"class":39},[29,38451,686],{"class":309},[29,38453,30994],{"class":5391},[29,38455,355],{"class":305},[29,38457,34999],{"class":39},[29,38459,686],{"class":309},[29,38461,31003],{"class":5391},[29,38463,355],{"class":305},[29,38465,380],{"class":39},[29,38467,686],{"class":309},[29,38469,31012],{"class":5391},[29,38471,355],{"class":305},[29,38473,525],{"class":39},[29,38475,38176],{"class":309},[29,38477,38478],{"class":31,"line":2766},[29,38479,38181],{"class":309},[29,38481,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500,38502,38504,38506,38508,38510,38512,38514],{"class":31,"line":2774},[29,38483,38143],{"class":309},[29,38485,30985],{"class":5391},[29,38487,355],{"class":305},[29,38489,34999],{"class":39},[29,38491,686],{"class":309},[29,38493,30994],{"class":5391},[29,38495,355],{"class":305},[29,38497,34999],{"class":39},[29,38499,686],{"class":309},[29,38501,31003],{"class":5391},[29,38503,355],{"class":305},[29,38505,380],{"class":39},[29,38507,686],{"class":309},[29,38509,31012],{"class":5391},[29,38511,355],{"class":305},[29,38513,525],{"class":39},[29,38515,38176],{"class":309},[29,38517,38518],{"class":31,"line":2779},[29,38519,38181],{"class":309},[29,38521,38522,38524,38526,38528,38530,38532,38534,38536,38538,38540,38542,38544,38546],{"class":31,"line":2785},[29,38523,38226],{"class":309},[29,38525,31003],{"class":5391},[29,38527,355],{"class":305},[29,38529,386],{"class":39},[29,38531,686],{"class":309},[29,38533,31058],{"class":5391},[29,38535,355],{"class":305},[29,38537,386],{"class":39},[29,38539,686],{"class":309},[29,38541,31012],{"class":5391},[29,38543,355],{"class":305},[29,38545,499],{"class":39},[29,38547,316],{"class":309},[29,38549,38550],{"class":31,"line":2791},[29,38551,38255],{"class":309},[29,38553,38554],{"class":31,"line":2796},[29,38555,38556],{"class":367},"        # 第四层\n",[29,38558,38559,38561,38564,38566],{"class":31,"line":8123},[29,38560,30974],{"class":39},[29,38562,38563],{"class":309},".block4",[29,38565,355],{"class":305},[29,38567,38138],{"class":309},[29,38569,38570,38572,38574,38576,38578,38580,38582,38584,38587,38589,38591,38593,38595,38597,38599,38601,38603],{"class":31,"line":8147},[29,38571,38143],{"class":309},[29,38573,30985],{"class":5391},[29,38575,355],{"class":305},[29,38577,34999],{"class":39},[29,38579,686],{"class":309},[29,38581,30994],{"class":5391},[29,38583,355],{"class":305},[29,38585,38586],{"class":39},"512",[29,38588,686],{"class":309},[29,38590,31003],{"class":5391},[29,38592,355],{"class":305},[29,38594,380],{"class":39},[29,38596,686],{"class":309},[29,38598,31012],{"class":5391},[29,38600,355],{"class":305},[29,38602,525],{"class":39},[29,38604,38176],{"class":309},[29,38606,38607],{"class":31,"line":8152},[29,38608,38181],{"class":309},[29,38610,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643],{"class":31,"line":8158},[29,38612,38143],{"class":309},[29,38614,30985],{"class":5391},[29,38616,355],{"class":305},[29,38618,38586],{"class":39},[29,38620,686],{"class":309},[29,38622,30994],{"class":5391},[29,38624,355],{"class":305},[29,38626,38586],{"class":39},[29,38628,686],{"class":309},[29,38630,31003],{"class":5391},[29,38632,355],{"class":305},[29,38634,380],{"class":39},[29,38636,686],{"class":309},[29,38638,31012],{"class":5391},[29,38640,355],{"class":305},[29,38642,525],{"class":39},[29,38644,38176],{"class":309},[29,38646,38647],{"class":31,"line":8185},[29,38648,38181],{"class":309},[29,38650,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683],{"class":31,"line":8190},[29,38652,38143],{"class":309},[29,38654,30985],{"class":5391},[29,38656,355],{"class":305},[29,38658,38586],{"class":39},[29,38660,686],{"class":309},[29,38662,30994],{"class":5391},[29,38664,355],{"class":305},[29,38666,38586],{"class":39},[29,38668,686],{"class":309},[29,38670,31003],{"class":5391},[29,38672,355],{"class":305},[29,38674,380],{"class":39},[29,38676,686],{"class":309},[29,38678,31012],{"class":5391},[29,38680,355],{"class":305},[29,38682,525],{"class":39},[29,38684,38176],{"class":309},[29,38686,38687],{"class":31,"line":8196},[29,38688,38181],{"class":309},[29,38690,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715],{"class":31,"line":8208},[29,38692,38226],{"class":309},[29,38694,31003],{"class":5391},[29,38696,355],{"class":305},[29,38698,386],{"class":39},[29,38700,686],{"class":309},[29,38702,31058],{"class":5391},[29,38704,355],{"class":305},[29,38706,386],{"class":39},[29,38708,686],{"class":309},[29,38710,31012],{"class":5391},[29,38712,355],{"class":305},[29,38714,499],{"class":39},[29,38716,316],{"class":309},[29,38718,38719],{"class":31,"line":8220},[29,38720,38255],{"class":309},[29,38722,38723],{"class":31,"line":8232},[29,38724,38725],{"class":367},"        # 第五层\n",[29,38727,38728,38730,38733,38735],{"class":31,"line":9891},[29,38729,30974],{"class":39},[29,38731,38732],{"class":309},".block5",[29,38734,355],{"class":305},[29,38736,38138],{"class":309},[29,38738,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763,38765,38767,38769,38771],{"class":31,"line":9916},[29,38740,38143],{"class":309},[29,38742,30985],{"class":5391},[29,38744,355],{"class":305},[29,38746,38586],{"class":39},[29,38748,686],{"class":309},[29,38750,30994],{"class":5391},[29,38752,355],{"class":305},[29,38754,38586],{"class":39},[29,38756,686],{"class":309},[29,38758,31003],{"class":5391},[29,38760,355],{"class":305},[29,38762,380],{"class":39},[29,38764,686],{"class":309},[29,38766,31012],{"class":5391},[29,38768,355],{"class":305},[29,38770,525],{"class":39},[29,38772,38176],{"class":309},[29,38774,38775],{"class":31,"line":9939},[29,38776,38181],{"class":309},[29,38778,38779,38781,38783,38785,38787,38789,38791,38793,38795,38797,38799,38801,38803,38805,38807,38809,38811],{"class":31,"line":9963},[29,38780,38143],{"class":309},[29,38782,30985],{"class":5391},[29,38784,355],{"class":305},[29,38786,38586],{"class":39},[29,38788,686],{"class":309},[29,38790,30994],{"class":5391},[29,38792,355],{"class":305},[29,38794,38586],{"class":39},[29,38796,686],{"class":309},[29,38798,31003],{"class":5391},[29,38800,355],{"class":305},[29,38802,380],{"class":39},[29,38804,686],{"class":309},[29,38806,31012],{"class":5391},[29,38808,355],{"class":305},[29,38810,525],{"class":39},[29,38812,38176],{"class":309},[29,38814,38815],{"class":31,"line":9968},[29,38816,38181],{"class":309},[29,38818,38819,38821,38823,38825,38827,38829,38831,38833,38835,38837,38839,38841,38843,38845,38847,38849,38851],{"class":31,"line":9973},[29,38820,38143],{"class":309},[29,38822,30985],{"class":5391},[29,38824,355],{"class":305},[29,38826,38586],{"class":39},[29,38828,686],{"class":309},[29,38830,30994],{"class":5391},[29,38832,355],{"class":305},[29,38834,38586],{"class":39},[29,38836,686],{"class":309},[29,38838,31003],{"class":5391},[29,38840,355],{"class":305},[29,38842,380],{"class":39},[29,38844,686],{"class":309},[29,38846,31012],{"class":5391},[29,38848,355],{"class":305},[29,38850,525],{"class":39},[29,38852,38176],{"class":309},[29,38854,38855],{"class":31,"line":9978},[29,38856,38181],{"class":309},[29,38858,38859,38861,38863,38865,38867,38869,38871,38873,38875,38877,38879,38881,38883],{"class":31,"line":9987},[29,38860,38226],{"class":309},[29,38862,31003],{"class":5391},[29,38864,355],{"class":305},[29,38866,386],{"class":39},[29,38868,686],{"class":309},[29,38870,31058],{"class":5391},[29,38872,355],{"class":305},[29,38874,386],{"class":39},[29,38876,686],{"class":309},[29,38878,31012],{"class":5391},[29,38880,355],{"class":305},[29,38882,499],{"class":39},[29,38884,316],{"class":309},[29,38886,38887],{"class":31,"line":9992},[29,38888,38255],{"class":309},[29,38890,38891],{"class":31,"line":9998},[29,38892,38893],{"class":367},"        # 全连接层\n",[29,38895,38896,38898,38901,38903],{"class":31,"line":10019},[29,38897,30974],{"class":39},[29,38899,38900],{"class":309},".block6",[29,38902,355],{"class":305},[29,38904,38138],{"class":309},[29,38906,38907],{"class":31,"line":10025},[29,38908,38909],{"class":367},"            # 平展操作\n",[29,38911,38912],{"class":31,"line":10039},[29,38913,38914],{"class":367},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[29,38916,38917],{"class":31,"line":10045},[29,38918,38919],{"class":309},"            nn.Flatten(),\n",[29,38921,38922,38925,38927,38929,38931,38933,38935,38937,38939],{"class":31,"line":10072},[29,38923,38924],{"class":309},"            nn.Linear(",[29,38926,677],{"class":39},[29,38928,763],{"class":305},[29,38930,677],{"class":39},[29,38932,763],{"class":305},[29,38934,38586],{"class":39},[29,38936,686],{"class":309},[29,38938,34999],{"class":39},[29,38940,38176],{"class":309},[29,38942,38943],{"class":31,"line":10081},[29,38944,38181],{"class":309},[29,38946,38947,38949,38951,38953,38955],{"class":31,"line":10087},[29,38948,38924],{"class":309},[29,38950,34999],{"class":39},[29,38952,686],{"class":309},[29,38954,32199],{"class":39},[29,38956,38176],{"class":309},[29,38958,38959],{"class":31,"line":10095},[29,38960,38181],{"class":309},[29,38962,38963,38965,38967,38969,38971],{"class":31,"line":10100},[29,38964,38924],{"class":309},[29,38966,32199],{"class":39},[29,38968,686],{"class":309},[29,38970,754],{"class":39},[29,38972,316],{"class":309},[29,38974,38975],{"class":31,"line":16779},[29,38976,38255],{"class":309},[29,38978,38979],{"class":31,"line":16785},[29,38980,2575],{"emptyLinePlaceholder":233},[29,38982,38983],{"class":31,"line":16808},[29,38984,38985],{"class":367},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[29,38987,38988],{"class":31,"line":16814},[29,38989,38990],{"class":367},"        # 循环遍历模型\n",[29,38992,38993,38995,38998,39000,39003],{"class":31,"line":16837},[29,38994,3578],{"class":305},[29,38996,38997],{"class":309}," m ",[29,38999,26172],{"class":305},[29,39001,39002],{"class":39}," self",[29,39004,39005],{"class":309},".modules():\n",[29,39007,39008],{"class":31,"line":16851},[29,39009,39010],{"class":367},"            # print(m)\n",[29,39012,39013,39015,39018],{"class":31,"line":16871},[29,39014,4817],{"class":305},[29,39016,39017],{"class":39}," isinstance",[29,39019,39020],{"class":309},"(m,nn.Conv2d):\n",[29,39022,39023],{"class":31,"line":16877},[29,39024,39025],{"class":367},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[29,39027,39028,39031,39034,39036,39039],{"class":31,"line":16888},[29,39029,39030],{"class":309},"                nn.init.kaiming_normal_(m.weight,",[29,39032,39033],{"class":5391},"nonlinearity",[29,39035,355],{"class":305},[29,39037,39038],{"class":103},"'relu'",[29,39040,316],{"class":309},[29,39042,39043],{"class":31,"line":16911},[29,39044,39045],{"class":367},"                # 判断b参数是否存在\n",[29,39047,39048,39051,39054,39057,39060,39063],{"class":31,"line":16933},[29,39049,39050],{"class":305},"                if",[29,39052,39053],{"class":309}," m.bias ",[29,39055,39056],{"class":305},"is",[29,39058,39059],{"class":305}," not",[29,39061,39062],{"class":39}," None",[29,39064,3914],{"class":309},[29,39066,39067],{"class":31,"line":16938},[29,39068,39069],{"class":367},"                    # 如果参数不存在的化初始化b=0\n",[29,39071,39072,39075,39077],{"class":31,"line":16944},[29,39073,39074],{"class":309},"                    nn.init.constant_(m.bias,",[29,39076,499],{"class":39},[29,39078,316],{"class":309},[29,39080,39081],{"class":31,"line":16958},[29,39082,39083],{"class":367},"            # 全连接层初始化\n",[29,39085,39086,39089,39091],{"class":31,"line":16971},[29,39087,39088],{"class":305},"            elif",[29,39090,39017],{"class":39},[29,39092,39093],{"class":309},"(m,nn.Linear):\n",[29,39095,39096],{"class":31,"line":16976},[29,39097,39098],{"class":367},"                # 这个初始化方法是利用的是正太分布的方式\n",[29,39100,39101],{"class":31,"line":16990},[29,39102,39103],{"class":367},"                # 均值为0，方差为0.01\n",[29,39105,39106,39109,39111,39113,39116],{"class":31,"line":16995},[29,39107,39108],{"class":309},"                nn.init.normal_(m.weight,",[29,39110,499],{"class":39},[29,39112,686],{"class":309},[29,39114,39115],{"class":39},"0.01",[29,39117,316],{"class":309},[29,39119,39120],{"class":31,"line":17001},[29,39121,39122],{"class":367},"                # 初始化b参数\n",[29,39124,39125,39127,39129,39131,39133,39135],{"class":31,"line":17006},[29,39126,39050],{"class":305},[29,39128,39053],{"class":309},[29,39130,39056],{"class":305},[29,39132,39059],{"class":305},[29,39134,39062],{"class":39},[29,39136,3914],{"class":309},[29,39138,39139,39141,39143],{"class":31,"line":17020},[29,39140,39074],{"class":309},[29,39142,499],{"class":39},[29,39144,316],{"class":309},[29,39146,39147],{"class":31,"line":17025},[29,39148,2575],{"emptyLinePlaceholder":233},[29,39150,39151],{"class":31,"line":17030},[29,39152,35294],{"class":367},[29,39154,39155,39157,39159],{"class":31,"line":17044},[29,39156,30930],{"class":305},[29,39158,31222],{"class":35},[29,39160,31225],{"class":309},[29,39162,39163,39165,39167,39169],{"class":31,"line":17056},[29,39164,31230],{"class":309},[29,39166,355],{"class":305},[29,39168,30952],{"class":39},[29,39170,39171],{"class":309},".block1(x)\n",[29,39173,39174,39176,39178,39180],{"class":31,"line":17061},[29,39175,31230],{"class":309},[29,39177,355],{"class":305},[29,39179,30952],{"class":39},[29,39181,39182],{"class":309},".block2(x)\n",[29,39184,39185,39187,39189,39191],{"class":31,"line":17074},[29,39186,31230],{"class":309},[29,39188,355],{"class":305},[29,39190,30952],{"class":39},[29,39192,39193],{"class":309},".block3(x)\n",[29,39195,39196,39198,39200,39202],{"class":31,"line":17079},[29,39197,31230],{"class":309},[29,39199,355],{"class":305},[29,39201,30952],{"class":39},[29,39203,39204],{"class":309},".block4(x)\n",[29,39206,39207,39209,39211,39213],{"class":31,"line":17084},[29,39208,31230],{"class":309},[29,39210,355],{"class":305},[29,39212,30952],{"class":39},[29,39214,39215],{"class":309},".block5(x)\n",[29,39217,39218,39220,39222,39224],{"class":31,"line":17089},[29,39219,31230],{"class":309},[29,39221,355],{"class":305},[29,39223,30952],{"class":39},[29,39225,39226],{"class":309},".block6(x)\n",[29,39228,39229,39231],{"class":31,"line":17102},[29,39230,14927],{"class":305},[29,39232,31338],{"class":309},[29,39234,39235],{"class":31,"line":17107},[29,39236,2575],{"emptyLinePlaceholder":233},[29,39238,39239],{"class":31,"line":32762},[29,39240,39241],{"class":367},"# 验证模型\n",[29,39243,39244,39246,39248,39250,39253],{"class":31,"line":32768},[29,39245,1707],{"class":305},[29,39247,31349],{"class":39},[29,39249,3124],{"class":305},[29,39251,39252],{"class":103},"'__main__'",[29,39254,3914],{"class":309},[29,39256,39257,39259,39261,39263,39265,39267,39269,39271,39273],{"class":31,"line":32774},[29,39258,31366],{"class":309},[29,39260,355],{"class":305},[29,39262,30580],{"class":309},[29,39264,31373],{"class":103},[29,39266,1880],{"class":305},[29,39268,31378],{"class":309},[29,39270,1877],{"class":305},[29,39272,30605],{"class":103},[29,39274,316],{"class":309},[29,39276,39277,39279],{"class":31,"line":32780},[29,39278,31428],{"class":39},[29,39280,30614],{"class":309},[29,39282,39283,39285,39287],{"class":31,"line":32786},[29,39284,31418],{"class":309},[29,39286,355],{"class":305},[29,39288,39289],{"class":309},"VGG16().to(device)\n",[29,39291,39292,39294,39296,39298,39300,39302,39304,39306],{"class":31,"line":32797},[29,39293,31428],{"class":39},[29,39295,31431],{"class":309},[29,39297,525],{"class":39},[29,39299,686],{"class":309},[29,39301,31630],{"class":39},[29,39303,686],{"class":309},[29,39305,31630],{"class":39},[29,39307,31444],{"class":309},[259,39309,39310],{"start":43},[178,39311,39312],{},"训练代码",[171,39314,39315],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[171,39317,39318],{},"解决方式:",[171,39320,39321],{},"①权重初始化",[19,39323,39325],{"className":30507,"code":39324,"language":30509,"meta":24,"style":24},"# 权重初始化,保证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",[26,39326,39327,39332,39337,39349,39354,39362,39367,39380,39385,39399,39404,39413,39418,39427,39432,39437,39450,39455,39469],{"__ignoreMap":24},[29,39328,39329],{"class":31,"line":32},[29,39330,39331],{"class":367},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[29,39333,39334],{"class":31,"line":43},[29,39335,39336],{"class":367},"# 循环遍历模型\n",[29,39338,39339,39341,39343,39345,39347],{"class":31,"line":51},[29,39340,3200],{"class":305},[29,39342,38997],{"class":309},[29,39344,26172],{"class":305},[29,39346,39002],{"class":39},[29,39348,39005],{"class":309},[29,39350,39351],{"class":31,"line":59},[29,39352,39353],{"class":367},"    # print(m)\n",[29,39355,39356,39358,39360],{"class":31,"line":67},[29,39357,3276],{"class":305},[29,39359,39017],{"class":39},[29,39361,39020],{"class":309},[29,39363,39364],{"class":31,"line":75},[29,39365,39366],{"class":367},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[29,39368,39369,39372,39374,39376,39378],{"class":31,"line":83},[29,39370,39371],{"class":309},"        nn.init.kaiming_normal_(m.weight,",[29,39373,39033],{"class":5391},[29,39375,355],{"class":305},[29,39377,39038],{"class":103},[29,39379,316],{"class":309},[29,39381,39382],{"class":31,"line":158},[29,39383,39384],{"class":367},"        # 判断b参数是否存在\n",[29,39386,39387,39389,39391,39393,39395,39397],{"class":31,"line":166},[29,39388,2672],{"class":305},[29,39390,39053],{"class":309},[29,39392,39056],{"class":305},[29,39394,39059],{"class":305},[29,39396,39062],{"class":39},[29,39398,3914],{"class":309},[29,39400,39401],{"class":31,"line":1505},[29,39402,39403],{"class":367},"            # 如果参数不存在的化初始化b=0\n",[29,39405,39406,39409,39411],{"class":31,"line":1788},[29,39407,39408],{"class":309},"            nn.init.constant_(m.bias,",[29,39410,499],{"class":39},[29,39412,316],{"class":309},[29,39414,39415],{"class":31,"line":1793},[29,39416,39417],{"class":367},"    # 全连接层初始化\n",[29,39419,39420,39423,39425],{"class":31,"line":1799},[29,39421,39422],{"class":305},"    elif",[29,39424,39017],{"class":39},[29,39426,39093],{"class":309},[29,39428,39429],{"class":31,"line":1804},[29,39430,39431],{"class":367},"        # 这个初始化方法是利用的是正太分布的方式\n",[29,39433,39434],{"class":31,"line":1818},[29,39435,39436],{"class":367},"        # 均值为0，方差为0.01\n",[29,39438,39439,39442,39444,39446,39448],{"class":31,"line":1823},[29,39440,39441],{"class":309},"        nn.init.normal_(m.weight,",[29,39443,499],{"class":39},[29,39445,686],{"class":309},[29,39447,39115],{"class":39},[29,39449,316],{"class":309},[29,39451,39452],{"class":31,"line":1829},[29,39453,39454],{"class":367},"        # 初始化b参数\n",[29,39456,39457,39459,39461,39463,39465,39467],{"class":31,"line":1850},[29,39458,2672],{"class":305},[29,39460,39053],{"class":309},[29,39462,39056],{"class":305},[29,39464,39059],{"class":305},[29,39466,39062],{"class":39},[29,39468,3914],{"class":309},[29,39470,39471,39473,39475],{"class":31,"line":1855},[29,39472,39408],{"class":309},[29,39474,499],{"class":39},[29,39476,316],{"class":309},[171,39478,39479],{},"②尽可能地增加批次",[171,39481,39482],{},"训练完整代码：",[19,39484,39485],{"className":30507,"code":38028,"language":30509,"meta":24,"style":24},[26,39486,39487,39493,39503,39513,39523,39527,39543,39551,39569,39573,39577,39587,39623,39627,39663,39667,39695,39699,39703,39713,39749,39753,39789,39793,39821,39825,39829,39839,39875,39879,39915,39919,39955,39959,39987,39991,39995,40005,40041,40045,40081,40085,40121,40125,40153,40157,40161,40171,40207,40211,40247,40251,40287,40291,40319,40323,40327,40337,40341,40345,40349,40369,40373,40385,40389,40401,40405,40409,40413,40417,40429,40433,40441,40445,40457,40461,40475,40479,40487,40491,40499,40503,40507,40519,40523,40537,40545,40549,40553,40561,40571,40581,40591,40601,40611,40621,40627,40631,40635,40647,40667,40673,40681],{"__ignoreMap":24},[29,39488,39489,39491],{"class":31,"line":32},[29,39490,30521],{"class":305},[29,39492,30524],{"class":309},[29,39494,39495,39497,39499,39501],{"class":31,"line":43},[29,39496,30866],{"class":305},[29,39498,38043],{"class":309},[29,39500,30521],{"class":305},[29,39502,38048],{"class":309},[29,39504,39505,39507,39509,39511],{"class":31,"line":51},[29,39506,30866],{"class":305},[29,39508,30869],{"class":309},[29,39510,30521],{"class":305},[29,39512,30874],{"class":309},[29,39514,39515,39517,39519,39521],{"class":31,"line":59},[29,39516,30866],{"class":305},[29,39518,30886],{"class":309},[29,39520,30521],{"class":305},[29,39522,30891],{"class":309},[29,39524,39525],{"class":31,"line":67},[29,39526,2575],{"emptyLinePlaceholder":233},[29,39528,39529,39531,39533,39535,39537,39539,39541],{"class":31,"line":75},[29,39530,14869],{"class":305},[29,39532,38079],{"class":35},[29,39534,310],{"class":309},[29,39536,30907],{"class":35},[29,39538,866],{"class":309},[29,39540,30912],{"class":35},[29,39542,30915],{"class":309},[29,39544,39545,39547,39549],{"class":31,"line":83},[29,39546,30930],{"class":305},[29,39548,30933],{"class":39},[29,39550,30936],{"class":309},[29,39552,39553,39555,39557,39559,39561,39563,39565,39567],{"class":31,"line":158},[29,39554,30946],{"class":39},[29,39556,310],{"class":309},[29,39558,38106],{"class":39},[29,39560,12610],{"class":309},[29,39562,30952],{"class":39},[29,39564,30955],{"class":309},[29,39566,30958],{"class":39},[29,39568,2151],{"class":309},[29,39570,39571],{"class":31,"line":166},[29,39572,38121],{"class":367},[29,39574,39575],{"class":31,"line":1505},[29,39576,38126],{"class":367},[29,39578,39579,39581,39583,39585],{"class":31,"line":1788},[29,39580,30974],{"class":39},[29,39582,38133],{"class":309},[29,39584,355],{"class":305},[29,39586,38138],{"class":309},[29,39588,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621],{"class":31,"line":1793},[29,39590,38143],{"class":309},[29,39592,30985],{"class":5391},[29,39594,355],{"class":305},[29,39596,525],{"class":39},[29,39598,686],{"class":309},[29,39600,30994],{"class":5391},[29,39602,355],{"class":305},[29,39604,511],{"class":39},[29,39606,686],{"class":309},[29,39608,31003],{"class":5391},[29,39610,355],{"class":305},[29,39612,380],{"class":39},[29,39614,686],{"class":309},[29,39616,31012],{"class":5391},[29,39618,355],{"class":305},[29,39620,525],{"class":39},[29,39622,38176],{"class":309},[29,39624,39625],{"class":31,"line":1799},[29,39626,38181],{"class":309},[29,39628,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661],{"class":31,"line":1804},[29,39630,38143],{"class":309},[29,39632,30985],{"class":5391},[29,39634,355],{"class":305},[29,39636,511],{"class":39},[29,39638,686],{"class":309},[29,39640,30994],{"class":5391},[29,39642,355],{"class":305},[29,39644,511],{"class":39},[29,39646,686],{"class":309},[29,39648,31003],{"class":5391},[29,39650,355],{"class":305},[29,39652,380],{"class":39},[29,39654,686],{"class":309},[29,39656,31012],{"class":5391},[29,39658,355],{"class":305},[29,39660,525],{"class":39},[29,39662,38176],{"class":309},[29,39664,39665],{"class":31,"line":1818},[29,39666,38181],{"class":309},[29,39668,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689,39691,39693],{"class":31,"line":1823},[29,39670,38226],{"class":309},[29,39672,31003],{"class":5391},[29,39674,355],{"class":305},[29,39676,386],{"class":39},[29,39678,686],{"class":309},[29,39680,31058],{"class":5391},[29,39682,355],{"class":305},[29,39684,386],{"class":39},[29,39686,686],{"class":309},[29,39688,31012],{"class":5391},[29,39690,355],{"class":305},[29,39692,499],{"class":39},[29,39694,316],{"class":309},[29,39696,39697],{"class":31,"line":1829},[29,39698,38255],{"class":309},[29,39700,39701],{"class":31,"line":1850},[29,39702,38260],{"class":367},[29,39704,39705,39707,39709,39711],{"class":31,"line":1855},[29,39706,30974],{"class":39},[29,39708,38267],{"class":309},[29,39710,355],{"class":305},[29,39712,38138],{"class":309},[29,39714,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747],{"class":31,"line":1869},[29,39716,38143],{"class":309},[29,39718,30985],{"class":5391},[29,39720,355],{"class":305},[29,39722,511],{"class":39},[29,39724,686],{"class":309},[29,39726,30994],{"class":5391},[29,39728,355],{"class":305},[29,39730,32199],{"class":39},[29,39732,686],{"class":309},[29,39734,31003],{"class":5391},[29,39736,355],{"class":305},[29,39738,380],{"class":39},[29,39740,686],{"class":309},[29,39742,31012],{"class":5391},[29,39744,355],{"class":305},[29,39746,525],{"class":39},[29,39748,38176],{"class":309},[29,39750,39751],{"class":31,"line":1874},[29,39752,38181],{"class":309},[29,39754,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787],{"class":31,"line":1903},[29,39756,38143],{"class":309},[29,39758,30985],{"class":5391},[29,39760,355],{"class":305},[29,39762,32199],{"class":39},[29,39764,686],{"class":309},[29,39766,30994],{"class":5391},[29,39768,355],{"class":305},[29,39770,32199],{"class":39},[29,39772,686],{"class":309},[29,39774,31003],{"class":5391},[29,39776,355],{"class":305},[29,39778,380],{"class":39},[29,39780,686],{"class":309},[29,39782,31012],{"class":5391},[29,39784,355],{"class":305},[29,39786,525],{"class":39},[29,39788,38176],{"class":309},[29,39790,39791],{"class":31,"line":1908},[29,39792,38181],{"class":309},[29,39794,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819],{"class":31,"line":1925},[29,39796,38226],{"class":309},[29,39798,31003],{"class":5391},[29,39800,355],{"class":305},[29,39802,386],{"class":39},[29,39804,686],{"class":309},[29,39806,31058],{"class":5391},[29,39808,355],{"class":305},[29,39810,386],{"class":39},[29,39812,686],{"class":309},[29,39814,31012],{"class":5391},[29,39816,355],{"class":305},[29,39818,499],{"class":39},[29,39820,316],{"class":309},[29,39822,39823],{"class":31,"line":1930},[29,39824,38255],{"class":309},[29,39826,39827],{"class":31,"line":1935},[29,39828,38388],{"class":367},[29,39830,39831,39833,39835,39837],{"class":31,"line":1940},[29,39832,30974],{"class":39},[29,39834,38395],{"class":309},[29,39836,355],{"class":305},[29,39838,38138],{"class":309},[29,39840,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867,39869,39871,39873],{"class":31,"line":1954},[29,39842,38143],{"class":309},[29,39844,30985],{"class":5391},[29,39846,355],{"class":305},[29,39848,32199],{"class":39},[29,39850,686],{"class":309},[29,39852,30994],{"class":5391},[29,39854,355],{"class":305},[29,39856,34999],{"class":39},[29,39858,686],{"class":309},[29,39860,31003],{"class":5391},[29,39862,355],{"class":305},[29,39864,380],{"class":39},[29,39866,686],{"class":309},[29,39868,31012],{"class":5391},[29,39870,355],{"class":305},[29,39872,525],{"class":39},[29,39874,38176],{"class":309},[29,39876,39877],{"class":31,"line":1959},[29,39878,38181],{"class":309},[29,39880,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913],{"class":31,"line":2752},[29,39882,38143],{"class":309},[29,39884,30985],{"class":5391},[29,39886,355],{"class":305},[29,39888,34999],{"class":39},[29,39890,686],{"class":309},[29,39892,30994],{"class":5391},[29,39894,355],{"class":305},[29,39896,34999],{"class":39},[29,39898,686],{"class":309},[29,39900,31003],{"class":5391},[29,39902,355],{"class":305},[29,39904,380],{"class":39},[29,39906,686],{"class":309},[29,39908,31012],{"class":5391},[29,39910,355],{"class":305},[29,39912,525],{"class":39},[29,39914,38176],{"class":309},[29,39916,39917],{"class":31,"line":2766},[29,39918,38181],{"class":309},[29,39920,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953],{"class":31,"line":2774},[29,39922,38143],{"class":309},[29,39924,30985],{"class":5391},[29,39926,355],{"class":305},[29,39928,34999],{"class":39},[29,39930,686],{"class":309},[29,39932,30994],{"class":5391},[29,39934,355],{"class":305},[29,39936,34999],{"class":39},[29,39938,686],{"class":309},[29,39940,31003],{"class":5391},[29,39942,355],{"class":305},[29,39944,380],{"class":39},[29,39946,686],{"class":309},[29,39948,31012],{"class":5391},[29,39950,355],{"class":305},[29,39952,525],{"class":39},[29,39954,38176],{"class":309},[29,39956,39957],{"class":31,"line":2779},[29,39958,38181],{"class":309},[29,39960,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985],{"class":31,"line":2785},[29,39962,38226],{"class":309},[29,39964,31003],{"class":5391},[29,39966,355],{"class":305},[29,39968,386],{"class":39},[29,39970,686],{"class":309},[29,39972,31058],{"class":5391},[29,39974,355],{"class":305},[29,39976,386],{"class":39},[29,39978,686],{"class":309},[29,39980,31012],{"class":5391},[29,39982,355],{"class":305},[29,39984,499],{"class":39},[29,39986,316],{"class":309},[29,39988,39989],{"class":31,"line":2791},[29,39990,38255],{"class":309},[29,39992,39993],{"class":31,"line":2796},[29,39994,38556],{"class":367},[29,39996,39997,39999,40001,40003],{"class":31,"line":8123},[29,39998,30974],{"class":39},[29,40000,38563],{"class":309},[29,40002,355],{"class":305},[29,40004,38138],{"class":309},[29,40006,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039],{"class":31,"line":8147},[29,40008,38143],{"class":309},[29,40010,30985],{"class":5391},[29,40012,355],{"class":305},[29,40014,34999],{"class":39},[29,40016,686],{"class":309},[29,40018,30994],{"class":5391},[29,40020,355],{"class":305},[29,40022,38586],{"class":39},[29,40024,686],{"class":309},[29,40026,31003],{"class":5391},[29,40028,355],{"class":305},[29,40030,380],{"class":39},[29,40032,686],{"class":309},[29,40034,31012],{"class":5391},[29,40036,355],{"class":305},[29,40038,525],{"class":39},[29,40040,38176],{"class":309},[29,40042,40043],{"class":31,"line":8152},[29,40044,38181],{"class":309},[29,40046,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079],{"class":31,"line":8158},[29,40048,38143],{"class":309},[29,40050,30985],{"class":5391},[29,40052,355],{"class":305},[29,40054,38586],{"class":39},[29,40056,686],{"class":309},[29,40058,30994],{"class":5391},[29,40060,355],{"class":305},[29,40062,38586],{"class":39},[29,40064,686],{"class":309},[29,40066,31003],{"class":5391},[29,40068,355],{"class":305},[29,40070,380],{"class":39},[29,40072,686],{"class":309},[29,40074,31012],{"class":5391},[29,40076,355],{"class":305},[29,40078,525],{"class":39},[29,40080,38176],{"class":309},[29,40082,40083],{"class":31,"line":8185},[29,40084,38181],{"class":309},[29,40086,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119],{"class":31,"line":8190},[29,40088,38143],{"class":309},[29,40090,30985],{"class":5391},[29,40092,355],{"class":305},[29,40094,38586],{"class":39},[29,40096,686],{"class":309},[29,40098,30994],{"class":5391},[29,40100,355],{"class":305},[29,40102,38586],{"class":39},[29,40104,686],{"class":309},[29,40106,31003],{"class":5391},[29,40108,355],{"class":305},[29,40110,380],{"class":39},[29,40112,686],{"class":309},[29,40114,31012],{"class":5391},[29,40116,355],{"class":305},[29,40118,525],{"class":39},[29,40120,38176],{"class":309},[29,40122,40123],{"class":31,"line":8196},[29,40124,38181],{"class":309},[29,40126,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151],{"class":31,"line":8208},[29,40128,38226],{"class":309},[29,40130,31003],{"class":5391},[29,40132,355],{"class":305},[29,40134,386],{"class":39},[29,40136,686],{"class":309},[29,40138,31058],{"class":5391},[29,40140,355],{"class":305},[29,40142,386],{"class":39},[29,40144,686],{"class":309},[29,40146,31012],{"class":5391},[29,40148,355],{"class":305},[29,40150,499],{"class":39},[29,40152,316],{"class":309},[29,40154,40155],{"class":31,"line":8220},[29,40156,38255],{"class":309},[29,40158,40159],{"class":31,"line":8232},[29,40160,38725],{"class":367},[29,40162,40163,40165,40167,40169],{"class":31,"line":9891},[29,40164,30974],{"class":39},[29,40166,38732],{"class":309},[29,40168,355],{"class":305},[29,40170,38138],{"class":309},[29,40172,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197,40199,40201,40203,40205],{"class":31,"line":9916},[29,40174,38143],{"class":309},[29,40176,30985],{"class":5391},[29,40178,355],{"class":305},[29,40180,38586],{"class":39},[29,40182,686],{"class":309},[29,40184,30994],{"class":5391},[29,40186,355],{"class":305},[29,40188,38586],{"class":39},[29,40190,686],{"class":309},[29,40192,31003],{"class":5391},[29,40194,355],{"class":305},[29,40196,380],{"class":39},[29,40198,686],{"class":309},[29,40200,31012],{"class":5391},[29,40202,355],{"class":305},[29,40204,525],{"class":39},[29,40206,38176],{"class":309},[29,40208,40209],{"class":31,"line":9939},[29,40210,38181],{"class":309},[29,40212,40213,40215,40217,40219,40221,40223,40225,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245],{"class":31,"line":9963},[29,40214,38143],{"class":309},[29,40216,30985],{"class":5391},[29,40218,355],{"class":305},[29,40220,38586],{"class":39},[29,40222,686],{"class":309},[29,40224,30994],{"class":5391},[29,40226,355],{"class":305},[29,40228,38586],{"class":39},[29,40230,686],{"class":309},[29,40232,31003],{"class":5391},[29,40234,355],{"class":305},[29,40236,380],{"class":39},[29,40238,686],{"class":309},[29,40240,31012],{"class":5391},[29,40242,355],{"class":305},[29,40244,525],{"class":39},[29,40246,38176],{"class":309},[29,40248,40249],{"class":31,"line":9968},[29,40250,38181],{"class":309},[29,40252,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285],{"class":31,"line":9973},[29,40254,38143],{"class":309},[29,40256,30985],{"class":5391},[29,40258,355],{"class":305},[29,40260,38586],{"class":39},[29,40262,686],{"class":309},[29,40264,30994],{"class":5391},[29,40266,355],{"class":305},[29,40268,38586],{"class":39},[29,40270,686],{"class":309},[29,40272,31003],{"class":5391},[29,40274,355],{"class":305},[29,40276,380],{"class":39},[29,40278,686],{"class":309},[29,40280,31012],{"class":5391},[29,40282,355],{"class":305},[29,40284,525],{"class":39},[29,40286,38176],{"class":309},[29,40288,40289],{"class":31,"line":9978},[29,40290,38181],{"class":309},[29,40292,40293,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317],{"class":31,"line":9987},[29,40294,38226],{"class":309},[29,40296,31003],{"class":5391},[29,40298,355],{"class":305},[29,40300,386],{"class":39},[29,40302,686],{"class":309},[29,40304,31058],{"class":5391},[29,40306,355],{"class":305},[29,40308,386],{"class":39},[29,40310,686],{"class":309},[29,40312,31012],{"class":5391},[29,40314,355],{"class":305},[29,40316,499],{"class":39},[29,40318,316],{"class":309},[29,40320,40321],{"class":31,"line":9992},[29,40322,38255],{"class":309},[29,40324,40325],{"class":31,"line":9998},[29,40326,38893],{"class":367},[29,40328,40329,40331,40333,40335],{"class":31,"line":10019},[29,40330,30974],{"class":39},[29,40332,38900],{"class":309},[29,40334,355],{"class":305},[29,40336,38138],{"class":309},[29,40338,40339],{"class":31,"line":10025},[29,40340,38909],{"class":367},[29,40342,40343],{"class":31,"line":10039},[29,40344,38914],{"class":367},[29,40346,40347],{"class":31,"line":10045},[29,40348,38919],{"class":309},[29,40350,40351,40353,40355,40357,40359,40361,40363,40365,40367],{"class":31,"line":10072},[29,40352,38924],{"class":309},[29,40354,677],{"class":39},[29,40356,763],{"class":305},[29,40358,677],{"class":39},[29,40360,763],{"class":305},[29,40362,38586],{"class":39},[29,40364,686],{"class":309},[29,40366,34999],{"class":39},[29,40368,38176],{"class":309},[29,40370,40371],{"class":31,"line":10081},[29,40372,38181],{"class":309},[29,40374,40375,40377,40379,40381,40383],{"class":31,"line":10087},[29,40376,38924],{"class":309},[29,40378,34999],{"class":39},[29,40380,686],{"class":309},[29,40382,32199],{"class":39},[29,40384,38176],{"class":309},[29,40386,40387],{"class":31,"line":10095},[29,40388,38181],{"class":309},[29,40390,40391,40393,40395,40397,40399],{"class":31,"line":10100},[29,40392,38924],{"class":309},[29,40394,32199],{"class":39},[29,40396,686],{"class":309},[29,40398,754],{"class":39},[29,40400,316],{"class":309},[29,40402,40403],{"class":31,"line":16779},[29,40404,38255],{"class":309},[29,40406,40407],{"class":31,"line":16785},[29,40408,2575],{"emptyLinePlaceholder":233},[29,40410,40411],{"class":31,"line":16808},[29,40412,38985],{"class":367},[29,40414,40415],{"class":31,"line":16814},[29,40416,38990],{"class":367},[29,40418,40419,40421,40423,40425,40427],{"class":31,"line":16837},[29,40420,3578],{"class":305},[29,40422,38997],{"class":309},[29,40424,26172],{"class":305},[29,40426,39002],{"class":39},[29,40428,39005],{"class":309},[29,40430,40431],{"class":31,"line":16851},[29,40432,39010],{"class":367},[29,40434,40435,40437,40439],{"class":31,"line":16871},[29,40436,4817],{"class":305},[29,40438,39017],{"class":39},[29,40440,39020],{"class":309},[29,40442,40443],{"class":31,"line":16877},[29,40444,39025],{"class":367},[29,40446,40447,40449,40451,40453,40455],{"class":31,"line":16888},[29,40448,39030],{"class":309},[29,40450,39033],{"class":5391},[29,40452,355],{"class":305},[29,40454,39038],{"class":103},[29,40456,316],{"class":309},[29,40458,40459],{"class":31,"line":16911},[29,40460,39045],{"class":367},[29,40462,40463,40465,40467,40469,40471,40473],{"class":31,"line":16933},[29,40464,39050],{"class":305},[29,40466,39053],{"class":309},[29,40468,39056],{"class":305},[29,40470,39059],{"class":305},[29,40472,39062],{"class":39},[29,40474,3914],{"class":309},[29,40476,40477],{"class":31,"line":16938},[29,40478,39069],{"class":367},[29,40480,40481,40483,40485],{"class":31,"line":16944},[29,40482,39074],{"class":309},[29,40484,499],{"class":39},[29,40486,316],{"class":309},[29,40488,40489],{"class":31,"line":16958},[29,40490,39083],{"class":367},[29,40492,40493,40495,40497],{"class":31,"line":16971},[29,40494,39088],{"class":305},[29,40496,39017],{"class":39},[29,40498,39093],{"class":309},[29,40500,40501],{"class":31,"line":16976},[29,40502,39098],{"class":367},[29,40504,40505],{"class":31,"line":16990},[29,40506,39103],{"class":367},[29,40508,40509,40511,40513,40515,40517],{"class":31,"line":16995},[29,40510,39108],{"class":309},[29,40512,499],{"class":39},[29,40514,686],{"class":309},[29,40516,39115],{"class":39},[29,40518,316],{"class":309},[29,40520,40521],{"class":31,"line":17001},[29,40522,39122],{"class":367},[29,40524,40525,40527,40529,40531,40533,40535],{"class":31,"line":17006},[29,40526,39050],{"class":305},[29,40528,39053],{"class":309},[29,40530,39056],{"class":305},[29,40532,39059],{"class":305},[29,40534,39062],{"class":39},[29,40536,3914],{"class":309},[29,40538,40539,40541,40543],{"class":31,"line":17020},[29,40540,39074],{"class":309},[29,40542,499],{"class":39},[29,40544,316],{"class":309},[29,40546,40547],{"class":31,"line":17025},[29,40548,2575],{"emptyLinePlaceholder":233},[29,40550,40551],{"class":31,"line":17030},[29,40552,35294],{"class":367},[29,40554,40555,40557,40559],{"class":31,"line":17044},[29,40556,30930],{"class":305},[29,40558,31222],{"class":35},[29,40560,31225],{"class":309},[29,40562,40563,40565,40567,40569],{"class":31,"line":17056},[29,40564,31230],{"class":309},[29,40566,355],{"class":305},[29,40568,30952],{"class":39},[29,40570,39171],{"class":309},[29,40572,40573,40575,40577,40579],{"class":31,"line":17061},[29,40574,31230],{"class":309},[29,40576,355],{"class":305},[29,40578,30952],{"class":39},[29,40580,39182],{"class":309},[29,40582,40583,40585,40587,40589],{"class":31,"line":17074},[29,40584,31230],{"class":309},[29,40586,355],{"class":305},[29,40588,30952],{"class":39},[29,40590,39193],{"class":309},[29,40592,40593,40595,40597,40599],{"class":31,"line":17079},[29,40594,31230],{"class":309},[29,40596,355],{"class":305},[29,40598,30952],{"class":39},[29,40600,39204],{"class":309},[29,40602,40603,40605,40607,40609],{"class":31,"line":17084},[29,40604,31230],{"class":309},[29,40606,355],{"class":305},[29,40608,30952],{"class":39},[29,40610,39215],{"class":309},[29,40612,40613,40615,40617,40619],{"class":31,"line":17089},[29,40614,31230],{"class":309},[29,40616,355],{"class":305},[29,40618,30952],{"class":39},[29,40620,39226],{"class":309},[29,40622,40623,40625],{"class":31,"line":17102},[29,40624,14927],{"class":305},[29,40626,31338],{"class":309},[29,40628,40629],{"class":31,"line":17107},[29,40630,2575],{"emptyLinePlaceholder":233},[29,40632,40633],{"class":31,"line":32762},[29,40634,39241],{"class":367},[29,40636,40637,40639,40641,40643,40645],{"class":31,"line":32768},[29,40638,1707],{"class":305},[29,40640,31349],{"class":39},[29,40642,3124],{"class":305},[29,40644,39252],{"class":103},[29,40646,3914],{"class":309},[29,40648,40649,40651,40653,40655,40657,40659,40661,40663,40665],{"class":31,"line":32774},[29,40650,31366],{"class":309},[29,40652,355],{"class":305},[29,40654,30580],{"class":309},[29,40656,31373],{"class":103},[29,40658,1880],{"class":305},[29,40660,31378],{"class":309},[29,40662,1877],{"class":305},[29,40664,30605],{"class":103},[29,40666,316],{"class":309},[29,40668,40669,40671],{"class":31,"line":32780},[29,40670,31428],{"class":39},[29,40672,30614],{"class":309},[29,40674,40675,40677,40679],{"class":31,"line":32786},[29,40676,31418],{"class":309},[29,40678,355],{"class":305},[29,40680,39289],{"class":309},[29,40682,40683,40685,40687,40689,40691,40693,40695,40697],{"class":31,"line":32797},[29,40684,31428],{"class":39},[29,40686,31431],{"class":309},[29,40688,525],{"class":39},[29,40690,686],{"class":309},[29,40692,31630],{"class":39},[29,40694,686],{"class":309},[29,40696,31630],{"class":39},[29,40698,31444],{"class":309},[259,40700,40701],{"start":51},[178,40702,40703],{},"测试代码",[19,40705,40707],{"className":30507,"code":40706,"language":30509,"meta":24,"style":24},"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",[26,40708,40709,40715,40725,40735,40739,40749,40760,40764,40768,40772,40780,40796,40806,40822,40832,40846,40850,40860,40870,40880,40886,40890,40894,40902,40906,40922,40930,40934,40938,40946,40954,40958,40962,40966,40970,40976,40980,40990,40998,41006,41010,41014,41018,41026,41030,41046,41050,41054,41058,41070,41074,41086,41090,41094,41106,41110,41120,41124,41128,41140,41144,41153,41157,41161,41169,41173,41181,41185,41189,41193,41197,41201,41217,41225,41229,41233,41281,41287,41291,41301,41309,41317,41321,41325,41329,41333,41341,41345,41361,41365,41373,41381],{"__ignoreMap":24},[29,40710,40711,40713],{"class":31,"line":32},[29,40712,30521],{"class":305},[29,40714,30524],{"class":309},[29,40716,40717,40719,40721,40723],{"class":31,"line":43},[29,40718,30521],{"class":305},[29,40720,31544],{"class":309},[29,40722,31512],{"class":305},[29,40724,31549],{"class":309},[29,40726,40727,40729,40731,40733],{"class":31,"line":51},[29,40728,30866],{"class":305},[29,40730,31527],{"class":309},[29,40732,30521],{"class":305},[29,40734,31532],{"class":309},[29,40736,40737],{"class":31,"line":59},[29,40738,34051],{"class":367},[29,40740,40741,40743,40745,40747],{"class":31,"line":67},[29,40742,30866],{"class":305},[29,40744,31497],{"class":309},[29,40746,30521],{"class":305},[29,40748,31502],{"class":309},[29,40750,40751,40753,40755,40757],{"class":31,"line":75},[29,40752,30866],{"class":305},[29,40754,32043],{"class":309},[29,40756,30521],{"class":305},[29,40758,40759],{"class":39}," VGG16\n",[29,40761,40762],{"class":31,"line":83},[29,40763,2575],{"emptyLinePlaceholder":233},[29,40765,40766],{"class":31,"line":158},[29,40767,2575],{"emptyLinePlaceholder":233},[29,40769,40770],{"class":31,"line":166},[29,40771,34080],{"class":367},[29,40773,40774,40776,40778],{"class":31,"line":1505},[29,40775,32076],{"class":305},[29,40777,34087],{"class":35},[29,40779,32082],{"class":309},[29,40781,40782,40784,40786,40788,40790,40792,40794],{"class":31,"line":1788},[29,40783,34094],{"class":309},[29,40785,355],{"class":305},[29,40787,31584],{"class":309},[29,40789,31587],{"class":5391},[29,40791,355],{"class":305},[29,40793,31592],{"class":103},[29,40795,31595],{"class":309},[29,40797,40798,40800,40802,40804],{"class":31,"line":1793},[29,40799,34111],{"class":5391},[29,40801,355],{"class":305},[29,40803,34116],{"class":39},[29,40805,31595],{"class":309},[29,40807,40808,40810,40812,40814,40816,40818,40820],{"class":31,"line":1799},[29,40809,34123],{"class":5391},[29,40811,355],{"class":305},[29,40813,31622],{"class":309},[29,40815,31625],{"class":5391},[29,40817,355],{"class":305},[29,40819,31630],{"class":39},[29,40821,31633],{"class":309},[29,40823,40824,40826,40828,40830],{"class":31,"line":1804},[29,40825,34140],{"class":5391},[29,40827,355],{"class":305},[29,40829,31605],{"class":39},[29,40831,316],{"class":309},[29,40833,40834,40836,40838,40840,40842,40844],{"class":31,"line":1818},[29,40835,34151],{"class":309},[29,40837,355],{"class":305},[29,40839,31663],{"class":309},[29,40841,31666],{"class":5391},[29,40843,355],{"class":305},[29,40845,34162],{"class":309},[29,40847,40848],{"class":31,"line":1823},[29,40849,34167],{"class":367},[29,40851,40852,40854,40856,40858],{"class":31,"line":1829},[29,40853,34172],{"class":5391},[29,40855,355],{"class":305},[29,40857,525],{"class":39},[29,40859,31595],{"class":309},[29,40861,40862,40864,40866,40868],{"class":31,"line":1850},[29,40863,34183],{"class":5391},[29,40865,355],{"class":305},[29,40867,31605],{"class":39},[29,40869,31595],{"class":309},[29,40871,40872,40874,40876,40878],{"class":31,"line":1855},[29,40873,34194],{"class":5391},[29,40875,355],{"class":305},[29,40877,499],{"class":39},[29,40879,316],{"class":309},[29,40881,40882,40884],{"class":31,"line":1869},[29,40883,4265],{"class":305},[29,40885,34207],{"class":309},[29,40887,40888],{"class":31,"line":1874},[29,40889,2575],{"emptyLinePlaceholder":233},[29,40891,40892],{"class":31,"line":1903},[29,40893,34216],{"class":367},[29,40895,40896,40898,40900],{"class":31,"line":1908},[29,40897,32076],{"class":305},[29,40899,34223],{"class":35},[29,40901,34226],{"class":309},[29,40903,40904],{"class":31,"line":1925},[29,40905,34231],{"class":367},[29,40907,40908,40910,40912,40914,40916,40918,40920],{"class":31,"line":1930},[29,40909,31366],{"class":309},[29,40911,355],{"class":305},[29,40913,31373],{"class":103},[29,40915,1880],{"class":305},[29,40917,31378],{"class":309},[29,40919,1877],{"class":305},[29,40921,34248],{"class":103},[29,40923,40924,40926,40928],{"class":31,"line":1935},[29,40925,31418],{"class":309},[29,40927,355],{"class":305},[29,40929,32418],{"class":309},[29,40931,40932],{"class":31,"line":1940},[29,40933,2575],{"emptyLinePlaceholder":233},[29,40935,40936],{"class":31,"line":1954},[29,40937,34265],{"class":367},[29,40939,40940,40942,40944],{"class":31,"line":1959},[29,40941,34270],{"class":309},[29,40943,355],{"class":305},[29,40945,32471],{"class":39},[29,40947,40948,40950,40952],{"class":31,"line":2752},[29,40949,34279],{"class":309},[29,40951,355],{"class":305},[29,40953,3260],{"class":39},[29,40955,40956],{"class":31,"line":2766},[29,40957,2575],{"emptyLinePlaceholder":233},[29,40959,40960],{"class":31,"line":2774},[29,40961,34292],{"class":367},[29,40963,40964],{"class":31,"line":2779},[29,40965,34297],{"class":367},[29,40967,40968],{"class":31,"line":2785},[29,40969,34302],{"class":367},[29,40971,40972,40974],{"class":31,"line":2791},[29,40973,34307],{"class":305},[29,40975,33013],{"class":309},[29,40977,40978],{"class":31,"line":2796},[29,40979,34314],{"class":367},[29,40981,40982,40984,40986,40988],{"class":31,"line":8123},[29,40983,3578],{"class":305},[29,40985,34321],{"class":309},[29,40987,26172],{"class":305},[29,40989,34326],{"class":309},[29,40991,40992,40994,40996],{"class":31,"line":8147},[29,40993,34331],{"class":309},[29,40995,355],{"class":305},[29,40997,34336],{"class":309},[29,40999,41000,41002,41004],{"class":31,"line":8152},[29,41001,34341],{"class":309},[29,41003,355],{"class":305},[29,41005,34346],{"class":309},[29,41007,41008],{"class":31,"line":8158},[29,41009,34351],{"class":367},[29,41011,41012],{"class":31,"line":8185},[29,41013,33004],{"class":309},[29,41015,41016],{"class":31,"line":8190},[29,41017,34360],{"class":367},[29,41019,41020,41022,41024],{"class":31,"line":8196},[29,41021,32789],{"class":309},[29,41023,355],{"class":305},[29,41025,34369],{"class":309},[29,41027,41028],{"class":31,"line":8208},[29,41029,34374],{"class":367},[29,41031,41032,41034,41036,41038,41040,41042,41044],{"class":31,"line":8220},[29,41033,32806],{"class":309},[29,41035,355],{"class":305},[29,41037,32811],{"class":309},[29,41039,32814],{"class":5391},[29,41041,355],{"class":305},[29,41043,525],{"class":39},[29,41045,316],{"class":309},[29,41047,41048],{"class":31,"line":8232},[29,41049,34395],{"class":367},[29,41051,41052],{"class":31,"line":9891},[29,41053,34400],{"class":367},[29,41055,41056],{"class":31,"line":9916},[29,41057,34405],{"class":367},[29,41059,41060,41062,41064,41066,41068],{"class":31,"line":9939},[29,41061,34410],{"class":309},[29,41063,9652],{"class":305},[29,41065,32916],{"class":309},[29,41067,3124],{"class":305},[29,41069,34419],{"class":309},[29,41071,41072],{"class":31,"line":9963},[29,41073,34424],{"class":367},[29,41075,41076,41078,41080,41082,41084],{"class":31,"line":9968},[29,41077,34429],{"class":309},[29,41079,9652],{"class":305},[29,41081,34434],{"class":309},[29,41083,499],{"class":39},[29,41085,316],{"class":309},[29,41087,41088],{"class":31,"line":9973},[29,41089,2575],{"emptyLinePlaceholder":233},[29,41091,41092],{"class":31,"line":9978},[29,41093,34447],{"class":367},[29,41095,41096,41098,41100,41102,41104],{"class":31,"line":9987},[29,41097,34452],{"class":309},[29,41099,355],{"class":305},[29,41101,34457],{"class":309},[29,41103,892],{"class":305},[29,41105,34462],{"class":309},[29,41107,41108],{"class":31,"line":9992},[29,41109,34467],{"class":367},[29,41111,41112,41114,41116,41118],{"class":31,"line":9998},[29,41113,32580],{"class":39},[29,41115,310],{"class":309},[29,41117,34476],{"class":103},[29,41119,34479],{"class":309},[29,41121,41122],{"class":31,"line":10019},[29,41123,2575],{"emptyLinePlaceholder":233},[29,41125,41126],{"class":31,"line":10025},[29,41127,34488],{"class":367},[29,41129,41130,41132,41134,41136,41138],{"class":31,"line":10039},[29,41131,1707],{"class":305},[29,41133,31349],{"class":39},[29,41135,3124],{"class":305},[29,41137,31354],{"class":103},[29,41139,3914],{"class":309},[29,41141,41142],{"class":31,"line":10045},[29,41143,34505],{"class":367},[29,41145,41146,41148,41150],{"class":31,"line":10072},[29,41147,31418],{"class":309},[29,41149,355],{"class":305},[29,41151,41152],{"class":309},"VGG16()\n",[29,41154,41155],{"class":31,"line":10081},[29,41156,34518],{"class":367},[29,41158,41159],{"class":31,"line":10087},[29,41160,34523],{"class":367},[29,41162,41163,41165,41167],{"class":31,"line":10095},[29,41164,34528],{"class":309},[29,41166,34531],{"class":103},[29,41168,30626],{"class":309},[29,41170,41171],{"class":31,"line":10100},[29,41172,34538],{"class":367},[29,41174,41175,41177,41179],{"class":31,"line":16779},[29,41176,34151],{"class":309},[29,41178,355],{"class":305},[29,41180,34547],{"class":309},[29,41182,41183],{"class":31,"line":16785},[29,41184,34552],{"class":367},[29,41186,41187],{"class":31,"line":16808},[29,41188,34557],{"class":309},[29,41190,41191],{"class":31,"line":16814},[29,41192,2575],{"emptyLinePlaceholder":233},[29,41194,41195],{"class":31,"line":16837},[29,41196,34566],{"class":367},[29,41198,41199],{"class":31,"line":16851},[29,41200,34571],{"class":367},[29,41202,41203,41205,41207,41209,41211,41213,41215],{"class":31,"line":16871},[29,41204,31366],{"class":309},[29,41206,355],{"class":305},[29,41208,31373],{"class":103},[29,41210,1880],{"class":305},[29,41212,31378],{"class":309},[29,41214,1877],{"class":305},[29,41216,34248],{"class":103},[29,41218,41219,41221,41223],{"class":31,"line":16877},[29,41220,31418],{"class":309},[29,41222,355],{"class":305},[29,41224,32418],{"class":309},[29,41226,41227],{"class":31,"line":16888},[29,41228,34600],{"class":367},[29,41230,41231],{"class":31,"line":16911},[29,41232,34605],{"class":367},[29,41234,41235,41237,41239,41241,41243,41245,41247,41249,41251,41253,41255,41257,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277,41279],{"class":31,"line":16933},[29,41236,34610],{"class":309},[29,41238,355],{"class":305},[29,41240,1198],{"class":309},[29,41242,34617],{"class":103},[29,41244,686],{"class":309},[29,41246,34622],{"class":103},[29,41248,686],{"class":309},[29,41250,34627],{"class":103},[29,41252,686],{"class":309},[29,41254,34632],{"class":103},[29,41256,686],{"class":309},[29,41258,34637],{"class":103},[29,41260,686],{"class":309},[29,41262,34642],{"class":103},[29,41264,686],{"class":309},[29,41266,34647],{"class":103},[29,41268,686],{"class":309},[29,41270,34652],{"class":103},[29,41272,686],{"class":309},[29,41274,34657],{"class":103},[29,41276,686],{"class":309},[29,41278,34662],{"class":103},[29,41280,33375],{"class":309},[29,41282,41283,41285],{"class":31,"line":16938},[29,41284,34307],{"class":305},[29,41286,33013],{"class":309},[29,41288,41289],{"class":31,"line":16944},[29,41290,34675],{"class":367},[29,41292,41293,41295,41297,41299],{"class":31,"line":16958},[29,41294,3578],{"class":305},[29,41296,34682],{"class":309},[29,41298,26172],{"class":305},[29,41300,34326],{"class":309},[29,41302,41303,41305,41307],{"class":31,"line":16971},[29,41304,32739],{"class":309},[29,41306,355],{"class":305},[29,41308,32744],{"class":309},[29,41310,41311,41313,41315],{"class":31,"line":16976},[29,41312,32754],{"class":309},[29,41314,355],{"class":305},[29,41316,32759],{"class":309},[29,41318,41319],{"class":31,"line":16990},[29,41320,2575],{"emptyLinePlaceholder":233},[29,41322,41323],{"class":31,"line":16995},[29,41324,34711],{"class":367},[29,41326,41327],{"class":31,"line":17001},[29,41328,33004],{"class":309},[29,41330,41331],{"class":31,"line":17006},[29,41332,34720],{"class":367},[29,41334,41335,41337,41339],{"class":31,"line":17020},[29,41336,32789],{"class":309},[29,41338,355],{"class":305},[29,41340,32794],{"class":309},[29,41342,41343],{"class":31,"line":17025},[29,41344,34733],{"class":367},[29,41346,41347,41349,41351,41353,41355,41357,41359],{"class":31,"line":17030},[29,41348,32806],{"class":309},[29,41350,355],{"class":305},[29,41352,32811],{"class":309},[29,41354,32814],{"class":5391},[29,41356,355],{"class":305},[29,41358,525],{"class":39},[29,41360,316],{"class":309},[29,41362,41363],{"class":31,"line":17044},[29,41364,34754],{"class":367},[29,41366,41367,41369,41371],{"class":31,"line":17056},[29,41368,34759],{"class":309},[29,41370,355],{"class":305},[29,41372,34764],{"class":309},[29,41374,41375,41377,41379],{"class":31,"line":17061},[29,41376,34769],{"class":309},[29,41378,355],{"class":305},[29,41380,34774],{"class":309},[29,41382,41383,41385,41387,41389,41391,41393,41395,41397],{"class":31,"line":17074},[29,41384,34779],{"class":39},[29,41386,310],{"class":309},[29,41388,34784],{"class":103},[29,41390,34787],{"class":309},[29,41392,34790],{"class":103},[29,41394,686],{"class":309},[29,41396,34795],{"class":103},[29,41398,34798],{"class":309},[275,41400,41402],{"id":41401},"_23googlenet","2.3.GoogLeNet",[22173,41404,41406],{"id":41405},"_231原理","2.3.1.原理",[259,41408,41409],{},[178,41410,41411],{},"网络结构",[171,41413,41414],{},[1638,41415],{"alt":24,"src":41416},"\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",[171,41418,41419],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[171,41421,41422],{},[1638,41423],{"alt":24,"src":41424},"\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",[171,41426,41427],{},[1638,41428],{"alt":24,"src":41429},"\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",[171,41431,41432],{},[1638,41433],{"alt":24,"src":41434},"\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",[259,41436,41437],{"start":43},[178,41438,41439],{},"1x1卷积的优点",[171,41441,41442],{},[1638,41443],{"alt":24,"src":41444},"\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",[259,41446,41447],{"start":51},[178,41448,41449],{},"全局平均池化层优点",[171,41451,41452],{},[1638,41453],{"alt":24,"src":41454},"\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",[171,41456,41457],{},[1638,41458],{"alt":24,"src":41459},"\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",[259,41461,41462],{"start":59},[178,41463,41464],{},"参数详细描述",[171,41466,41467],{},[1638,41468],{"alt":24,"src":41469},"\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",[171,41471,41472],{},[1638,41473],{"alt":24,"src":41474},"\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",[171,41476,41477],{},[1638,41478],{"alt":24,"src":41479},"\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",[171,41481,41482],{},[1638,41483],{"alt":24,"src":41484},"\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",[171,41486,41487],{},[1638,41488],{"alt":24,"src":41489},"\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",[171,41491,41492],{},[1638,41493],{"alt":24,"src":41494},"\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",[171,41496,41497],{},[1638,41498],{"alt":24,"src":41499},"\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",[171,41501,41502],{},[1638,41503],{"alt":24,"src":41504},"\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",[171,41506,41507],{},[1638,41508],{"alt":24,"src":41509},"\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",[171,41511,41512],{},[1638,41513],{"alt":24,"src":41514},"\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",[171,41516,41517],{},[1638,41518],{"alt":24,"src":41519},"\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",[171,41521,41522],{},[1638,41523],{"alt":24,"src":41524},"\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",[171,41526,41527],{},[1638,41528],{"alt":24,"src":41529},"\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",[171,41531,41532],{},[1638,41533],{"alt":24,"src":41534},"\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",[171,41536,41537],{},[1638,41538],{"alt":24,"src":41539},"\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",[171,41541,41542],{},[1638,41543],{"alt":24,"src":41544},"\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",[171,41546,41547],{},[1638,41548],{"alt":24,"src":41549},"\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",[171,41551,41552],{},[1638,41553],{"alt":24,"src":41554},"\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",[171,41556,41557],{},[1638,41558],{"alt":24,"src":41559},"\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",[171,41561,41562],{},[1638,41563],{"alt":24,"src":41564},"\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",[171,41566,41567],{},[1638,41568],{"alt":24,"src":41569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[22173,41571,41573],{"id":41572},"_232代码实现","2.3.2.代码实现",[259,41575,41576],{},[178,41577,30840],{},[171,41579,41580],{},"根据原理一步一步搭建即可",[19,41582,41584],{"className":30507,"code":41583,"language":30509,"meta":24,"style":24},"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",[26,41585,41586,41592,41602,41612,41616,41633,41642,41657,41667,41672,41705,41710,41747,41794,41799,41835,41882,41887,41892,41927,41959,41963,41971,41987,42011,42036,42057,42062,42077,42081,42085,42090,42107,42112,42121,42136,42147,42191,42195,42223,42227,42238,42266,42270,42307,42311,42339,42343,42354,42390,42422,42450,42454,42465,42499,42531,42563,42596,42630,42658,42662,42673,42706,42738,42752,42756,42769,42773,42778,42790,42798,42820,42825,42830,42835,42840,42845,42850,42864,42872,42881,42894,42909,42918,42922,42930,42941,42952,42963,42974,42985,42991,42995,43000,43012,43032,43041],{"__ignoreMap":24},[29,41587,41588,41590],{"class":31,"line":32},[29,41589,30521],{"class":305},[29,41591,30524],{"class":309},[29,41593,41594,41596,41598,41600],{"class":31,"line":43},[29,41595,30866],{"class":305},[29,41597,30869],{"class":309},[29,41599,30521],{"class":305},[29,41601,30874],{"class":309},[29,41603,41604,41606,41608,41610],{"class":31,"line":51},[29,41605,30866],{"class":305},[29,41607,30886],{"class":309},[29,41609,30521],{"class":305},[29,41611,30891],{"class":309},[29,41613,41614],{"class":31,"line":59},[29,41615,2575],{"emptyLinePlaceholder":233},[29,41617,41618,41620,41623,41625,41627,41629,41631],{"class":31,"line":67},[29,41619,14869],{"class":305},[29,41621,41622],{"class":35}," Inception",[29,41624,310],{"class":309},[29,41626,30907],{"class":35},[29,41628,866],{"class":309},[29,41630,30912],{"class":35},[29,41632,30915],{"class":309},[29,41634,41635,41637,41639],{"class":31,"line":75},[29,41636,30930],{"class":305},[29,41638,30933],{"class":39},[29,41640,41641],{"class":309},"(self,in_channels,c1,c2,c3,c4):\n",[29,41643,41644,41646,41649,41651,41653,41655],{"class":31,"line":83},[29,41645,30946],{"class":39},[29,41647,41648],{"class":309},"(Inception,",[29,41650,30952],{"class":39},[29,41652,30955],{"class":309},[29,41654,30958],{"class":39},[29,41656,2151],{"class":309},[29,41658,41659,41661,41663,41665],{"class":31,"line":158},[29,41660,30974],{"class":39},[29,41662,34900],{"class":309},[29,41664,355],{"class":305},[29,41666,34905],{"class":309},[29,41668,41669],{"class":31,"line":166},[29,41670,41671],{"class":367},"        # 路线1：定义1*1卷积\n",[29,41673,41674,41676,41679,41681,41683,41685,41687,41690,41692,41694,41697,41699,41701,41703],{"class":31,"line":1505},[29,41675,30974],{"class":39},[29,41677,41678],{"class":309},".p1_1",[29,41680,355],{"class":305},[29,41682,30982],{"class":309},[29,41684,30985],{"class":5391},[29,41686,355],{"class":305},[29,41688,41689],{"class":309},"in_channels,",[29,41691,30994],{"class":5391},[29,41693,355],{"class":305},[29,41695,41696],{"class":309},"c1,",[29,41698,31003],{"class":5391},[29,41700,355],{"class":305},[29,41702,525],{"class":39},[29,41704,316],{"class":309},[29,41706,41707],{"class":31,"line":1788},[29,41708,41709],{"class":367},"        # 路线2：定义1*1卷积和3*3\n",[29,41711,41712,41714,41717,41719,41721,41723,41725,41727,41729,41731,41734,41736,41739,41741,41743,41745],{"class":31,"line":1793},[29,41713,30974],{"class":39},[29,41715,41716],{"class":309},".p2_1",[29,41718,355],{"class":305},[29,41720,30982],{"class":309},[29,41722,30985],{"class":5391},[29,41724,355],{"class":305},[29,41726,41689],{"class":309},[29,41728,30994],{"class":5391},[29,41730,355],{"class":305},[29,41732,41733],{"class":309},"c2[",[29,41735,499],{"class":39},[29,41737,41738],{"class":309},"],",[29,41740,31003],{"class":5391},[29,41742,355],{"class":305},[29,41744,525],{"class":39},[29,41746,316],{"class":309},[29,41748,41749,41751,41754,41756,41758,41760,41762,41764,41766,41768,41770,41772,41774,41776,41778,41780,41782,41784,41786,41788,41790,41792],{"class":31,"line":1799},[29,41750,30974],{"class":39},[29,41752,41753],{"class":309},".p2_2",[29,41755,355],{"class":305},[29,41757,30982],{"class":309},[29,41759,30985],{"class":5391},[29,41761,355],{"class":305},[29,41763,41733],{"class":309},[29,41765,499],{"class":39},[29,41767,41738],{"class":309},[29,41769,30994],{"class":5391},[29,41771,355],{"class":305},[29,41773,41733],{"class":309},[29,41775,525],{"class":39},[29,41777,41738],{"class":309},[29,41779,31003],{"class":5391},[29,41781,355],{"class":305},[29,41783,380],{"class":39},[29,41785,686],{"class":309},[29,41787,31012],{"class":5391},[29,41789,355],{"class":305},[29,41791,525],{"class":39},[29,41793,316],{"class":309},[29,41795,41796],{"class":31,"line":1804},[29,41797,41798],{"class":367},"        # 路线3：定义1*1卷积和5*5\n",[29,41800,41801,41803,41806,41808,41810,41812,41814,41816,41818,41820,41823,41825,41827,41829,41831,41833],{"class":31,"line":1818},[29,41802,30974],{"class":39},[29,41804,41805],{"class":309},".p3_1",[29,41807,355],{"class":305},[29,41809,30982],{"class":309},[29,41811,30985],{"class":5391},[29,41813,355],{"class":305},[29,41815,41689],{"class":309},[29,41817,30994],{"class":5391},[29,41819,355],{"class":305},[29,41821,41822],{"class":309},"c3[",[29,41824,499],{"class":39},[29,41826,41738],{"class":309},[29,41828,31003],{"class":5391},[29,41830,355],{"class":305},[29,41832,525],{"class":39},[29,41834,316],{"class":309},[29,41836,41837,41839,41842,41844,41846,41848,41850,41852,41854,41856,41858,41860,41862,41864,41866,41868,41870,41872,41874,41876,41878,41880],{"class":31,"line":1823},[29,41838,30974],{"class":39},[29,41840,41841],{"class":309},".p3_2",[29,41843,355],{"class":305},[29,41845,30982],{"class":309},[29,41847,30985],{"class":5391},[29,41849,355],{"class":305},[29,41851,41822],{"class":309},[29,41853,499],{"class":39},[29,41855,41738],{"class":309},[29,41857,30994],{"class":5391},[29,41859,355],{"class":305},[29,41861,41822],{"class":309},[29,41863,525],{"class":39},[29,41865,41738],{"class":309},[29,41867,31003],{"class":5391},[29,41869,355],{"class":305},[29,41871,627],{"class":39},[29,41873,686],{"class":309},[29,41875,31012],{"class":5391},[29,41877,355],{"class":305},[29,41879,386],{"class":39},[29,41881,316],{"class":309},[29,41883,41884],{"class":31,"line":1829},[29,41885,41886],{"class":367},"        # 路线4：定义3*3最大池化和1*1卷积\n",[29,41888,41889],{"class":31,"line":1850},[29,41890,41891],{"class":367},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[29,41893,41894,41896,41899,41901,41903,41905,41907,41909,41911,41913,41915,41917,41919,41921,41923,41925],{"class":31,"line":1855},[29,41895,30974],{"class":39},[29,41897,41898],{"class":309},".p4_1",[29,41900,355],{"class":305},[29,41902,34958],{"class":309},[29,41904,31003],{"class":5391},[29,41906,355],{"class":305},[29,41908,380],{"class":39},[29,41910,686],{"class":309},[29,41912,31058],{"class":5391},[29,41914,355],{"class":305},[29,41916,525],{"class":39},[29,41918,686],{"class":309},[29,41920,31012],{"class":5391},[29,41922,355],{"class":305},[29,41924,525],{"class":39},[29,41926,316],{"class":309},[29,41928,41929,41931,41934,41936,41938,41940,41942,41944,41946,41948,41951,41953,41955,41957],{"class":31,"line":1869},[29,41930,30974],{"class":39},[29,41932,41933],{"class":309},".p4_2",[29,41935,355],{"class":305},[29,41937,30982],{"class":309},[29,41939,30985],{"class":5391},[29,41941,355],{"class":305},[29,41943,41689],{"class":309},[29,41945,30994],{"class":5391},[29,41947,355],{"class":305},[29,41949,41950],{"class":309},"c4,",[29,41952,31003],{"class":5391},[29,41954,355],{"class":305},[29,41956,525],{"class":39},[29,41958,316],{"class":309},[29,41960,41961],{"class":31,"line":1874},[29,41962,2575],{"emptyLinePlaceholder":233},[29,41964,41965,41967,41969],{"class":31,"line":1903},[29,41966,30930],{"class":305},[29,41968,31222],{"class":35},[29,41970,31225],{"class":309},[29,41972,41973,41976,41978,41980,41982,41984],{"class":31,"line":1908},[29,41974,41975],{"class":309},"        p1",[29,41977,355],{"class":305},[29,41979,30952],{"class":39},[29,41981,35313],{"class":309},[29,41983,30952],{"class":39},[29,41985,41986],{"class":309},".p1_1(x))\n",[29,41988,41989,41991,41993,41995,41997,41999,42002,42004,42006,42008],{"class":31,"line":1925},[29,41990,7260],{"class":309},[29,41992,355],{"class":305},[29,41994,30952],{"class":39},[29,41996,35313],{"class":309},[29,41998,30952],{"class":39},[29,42000,42001],{"class":309},".p2_2(",[29,42003,30952],{"class":39},[29,42005,35313],{"class":309},[29,42007,30952],{"class":39},[29,42009,42010],{"class":309},".p2_1(x))))\n",[29,42012,42013,42016,42018,42020,42022,42024,42027,42029,42031,42033],{"class":31,"line":1930},[29,42014,42015],{"class":309},"        p3",[29,42017,355],{"class":305},[29,42019,30952],{"class":39},[29,42021,35313],{"class":309},[29,42023,30952],{"class":39},[29,42025,42026],{"class":309},".p3_2(",[29,42028,30952],{"class":39},[29,42030,35313],{"class":309},[29,42032,30952],{"class":39},[29,42034,42035],{"class":309},".p3_1(x))))\n",[29,42037,42038,42041,42043,42045,42047,42049,42052,42054],{"class":31,"line":1935},[29,42039,42040],{"class":309},"        p4",[29,42042,355],{"class":305},[29,42044,30952],{"class":39},[29,42046,35313],{"class":309},[29,42048,30952],{"class":39},[29,42050,42051],{"class":309},".p4_2(",[29,42053,30952],{"class":39},[29,42055,42056],{"class":309},".p4_1(x)))\n",[29,42058,42059],{"class":31,"line":1940},[29,42060,42061],{"class":367},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[29,42063,42064,42066,42069,42071,42073,42075],{"class":31,"line":1954},[29,42065,14927],{"class":305},[29,42067,42068],{"class":309}," torch.cat((p1,p2,p3,p4),",[29,42070,32814],{"class":5391},[29,42072,355],{"class":305},[29,42074,525],{"class":39},[29,42076,316],{"class":309},[29,42078,42079],{"class":31,"line":1959},[29,42080,2575],{"emptyLinePlaceholder":233},[29,42082,42083],{"class":31,"line":2752},[29,42084,2575],{"emptyLinePlaceholder":233},[29,42086,42087],{"class":31,"line":2766},[29,42088,42089],{"class":367},"# 搭建GoogLeNet网络\n",[29,42091,42092,42094,42097,42099,42101,42103,42105],{"class":31,"line":2774},[29,42093,14869],{"class":305},[29,42095,42096],{"class":35}," GoogLeNet",[29,42098,310],{"class":309},[29,42100,30907],{"class":35},[29,42102,866],{"class":309},[29,42104,30912],{"class":35},[29,42106,30915],{"class":309},[29,42108,42109],{"class":31,"line":2779},[29,42110,42111],{"class":367},"    # 必须把Inception导入到里边\n",[29,42113,42114,42116,42118],{"class":31,"line":2785},[29,42115,30930],{"class":305},[29,42117,30933],{"class":39},[29,42119,42120],{"class":309},"(self,Inception):\n",[29,42122,42123,42125,42128,42130,42132,42134],{"class":31,"line":2791},[29,42124,30946],{"class":39},[29,42126,42127],{"class":309},"(GoogLeNet,",[29,42129,30952],{"class":39},[29,42131,30955],{"class":309},[29,42133,30958],{"class":39},[29,42135,2151],{"class":309},[29,42137,42138,42140,42143,42145],{"class":31,"line":2796},[29,42139,30974],{"class":39},[29,42141,42142],{"class":309},".b1",[29,42144,355],{"class":305},[29,42146,38138],{"class":309},[29,42148,42149,42151,42153,42155,42157,42159,42161,42163,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189],{"class":31,"line":8123},[29,42150,38143],{"class":309},[29,42152,30985],{"class":5391},[29,42154,355],{"class":305},[29,42156,525],{"class":39},[29,42158,686],{"class":309},[29,42160,30994],{"class":5391},[29,42162,355],{"class":305},[29,42164,511],{"class":39},[29,42166,686],{"class":309},[29,42168,31003],{"class":5391},[29,42170,355],{"class":305},[29,42172,677],{"class":39},[29,42174,686],{"class":309},[29,42176,31058],{"class":5391},[29,42178,355],{"class":305},[29,42180,386],{"class":39},[29,42182,686],{"class":309},[29,42184,31012],{"class":5391},[29,42186,355],{"class":305},[29,42188,380],{"class":39},[29,42190,38176],{"class":309},[29,42192,42193],{"class":31,"line":8147},[29,42194,38181],{"class":309},[29,42196,42197,42199,42201,42203,42205,42207,42209,42211,42213,42215,42217,42219,42221],{"class":31,"line":8152},[29,42198,38226],{"class":309},[29,42200,31003],{"class":5391},[29,42202,355],{"class":305},[29,42204,380],{"class":39},[29,42206,686],{"class":309},[29,42208,31058],{"class":5391},[29,42210,355],{"class":305},[29,42212,386],{"class":39},[29,42214,686],{"class":309},[29,42216,31012],{"class":5391},[29,42218,355],{"class":305},[29,42220,525],{"class":39},[29,42222,316],{"class":309},[29,42224,42225],{"class":31,"line":8158},[29,42226,38255],{"class":309},[29,42228,42229,42231,42234,42236],{"class":31,"line":8185},[29,42230,30974],{"class":39},[29,42232,42233],{"class":309},".b2",[29,42235,355],{"class":305},[29,42237,38138],{"class":309},[29,42239,42240,42242,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264],{"class":31,"line":8190},[29,42241,38143],{"class":309},[29,42243,30985],{"class":5391},[29,42245,355],{"class":305},[29,42247,511],{"class":39},[29,42249,686],{"class":309},[29,42251,30994],{"class":5391},[29,42253,355],{"class":305},[29,42255,511],{"class":39},[29,42257,686],{"class":309},[29,42259,31003],{"class":5391},[29,42261,355],{"class":305},[29,42263,525],{"class":39},[29,42265,38176],{"class":309},[29,42267,42268],{"class":31,"line":8196},[29,42269,38181],{"class":309},[29,42271,42272,42274,42276,42278,42280,42282,42284,42286,42289,42291,42293,42295,42297,42299,42301,42303,42305],{"class":31,"line":8208},[29,42273,38143],{"class":309},[29,42275,30985],{"class":5391},[29,42277,355],{"class":305},[29,42279,511],{"class":39},[29,42281,686],{"class":309},[29,42283,30994],{"class":5391},[29,42285,355],{"class":305},[29,42287,42288],{"class":39},"192",[29,42290,686],{"class":309},[29,42292,31003],{"class":5391},[29,42294,355],{"class":305},[29,42296,380],{"class":39},[29,42298,686],{"class":309},[29,42300,31012],{"class":5391},[29,42302,355],{"class":305},[29,42304,525],{"class":39},[29,42306,38176],{"class":309},[29,42308,42309],{"class":31,"line":8220},[29,42310,38181],{"class":309},[29,42312,42313,42315,42317,42319,42321,42323,42325,42327,42329,42331,42333,42335,42337],{"class":31,"line":8232},[29,42314,38226],{"class":309},[29,42316,31003],{"class":5391},[29,42318,355],{"class":305},[29,42320,380],{"class":39},[29,42322,686],{"class":309},[29,42324,31058],{"class":5391},[29,42326,355],{"class":305},[29,42328,386],{"class":39},[29,42330,686],{"class":309},[29,42332,31012],{"class":5391},[29,42334,355],{"class":305},[29,42336,525],{"class":39},[29,42338,316],{"class":309},[29,42340,42341],{"class":31,"line":9891},[29,42342,38255],{"class":309},[29,42344,42345,42347,42350,42352],{"class":31,"line":9916},[29,42346,30974],{"class":39},[29,42348,42349],{"class":309},".b3",[29,42351,355],{"class":305},[29,42353,38138],{"class":309},[29,42355,42356,42359,42361,42363,42365,42368,42370,42372,42374,42377,42379,42381,42383,42386,42388],{"class":31,"line":9939},[29,42357,42358],{"class":309},"            Inception(",[29,42360,42288],{"class":39},[29,42362,686],{"class":309},[29,42364,511],{"class":39},[29,42366,42367],{"class":309},",(",[29,42369,517],{"class":39},[29,42371,686],{"class":309},[29,42373,32199],{"class":39},[29,42375,42376],{"class":309},"),(",[29,42378,909],{"class":39},[29,42380,686],{"class":309},[29,42382,505],{"class":39},[29,42384,42385],{"class":309},"),",[29,42387,505],{"class":39},[29,42389,38176],{"class":309},[29,42391,42392,42394,42396,42398,42400,42402,42404,42406,42408,42410,42412,42414,42416,42418,42420],{"class":31,"line":9963},[29,42393,42358],{"class":309},[29,42395,34999],{"class":39},[29,42397,686],{"class":309},[29,42399,32199],{"class":39},[29,42401,42367],{"class":309},[29,42403,32199],{"class":39},[29,42405,686],{"class":309},[29,42407,42288],{"class":39},[29,42409,42376],{"class":309},[29,42411,505],{"class":39},[29,42413,686],{"class":309},[29,42415,517],{"class":39},[29,42417,42385],{"class":309},[29,42419,511],{"class":39},[29,42421,38176],{"class":309},[29,42423,42424,42426,42428,42430,42432,42434,42436,42438,42440,42442,42444,42446,42448],{"class":31,"line":9968},[29,42425,38226],{"class":309},[29,42427,31003],{"class":5391},[29,42429,355],{"class":305},[29,42431,380],{"class":39},[29,42433,686],{"class":309},[29,42435,31058],{"class":5391},[29,42437,355],{"class":305},[29,42439,386],{"class":39},[29,42441,686],{"class":309},[29,42443,31012],{"class":5391},[29,42445,355],{"class":305},[29,42447,525],{"class":39},[29,42449,316],{"class":309},[29,42451,42452],{"class":31,"line":9973},[29,42453,38255],{"class":309},[29,42455,42456,42458,42461,42463],{"class":31,"line":9978},[29,42457,30974],{"class":39},[29,42459,42460],{"class":309},".b4",[29,42462,355],{"class":305},[29,42464,38138],{"class":309},[29,42466,42467,42469,42472,42474,42476,42478,42480,42482,42485,42487,42489,42491,42493,42495,42497],{"class":31,"line":9987},[29,42468,42358],{"class":309},[29,42470,42471],{"class":39},"480",[29,42473,686],{"class":309},[29,42475,42288],{"class":39},[29,42477,42367],{"class":309},[29,42479,517],{"class":39},[29,42481,686],{"class":309},[29,42483,42484],{"class":39},"208",[29,42486,42376],{"class":309},[29,42488,909],{"class":39},[29,42490,686],{"class":309},[29,42492,915],{"class":39},[29,42494,42385],{"class":309},[29,42496,511],{"class":39},[29,42498,38176],{"class":309},[29,42500,42501,42503,42505,42507,42509,42511,42513,42515,42517,42519,42521,42523,42525,42527,42529],{"class":31,"line":9992},[29,42502,42358],{"class":309},[29,42504,38586],{"class":39},[29,42506,686],{"class":309},[29,42508,21223],{"class":39},[29,42510,42367],{"class":309},[29,42512,926],{"class":39},[29,42514,686],{"class":309},[29,42516,31630],{"class":39},[29,42518,42376],{"class":309},[29,42520,1108],{"class":39},[29,42522,686],{"class":309},[29,42524,511],{"class":39},[29,42526,42385],{"class":309},[29,42528,511],{"class":39},[29,42530,38176],{"class":309},[29,42532,42533,42535,42537,42539,42541,42543,42545,42547,42549,42551,42553,42555,42557,42559,42561],{"class":31,"line":9998},[29,42534,42358],{"class":309},[29,42536,38586],{"class":39},[29,42538,686],{"class":309},[29,42540,32199],{"class":39},[29,42542,42367],{"class":309},[29,42544,32199],{"class":39},[29,42546,686],{"class":309},[29,42548,34999],{"class":39},[29,42550,42376],{"class":309},[29,42552,1108],{"class":39},[29,42554,686],{"class":309},[29,42556,511],{"class":39},[29,42558,42385],{"class":309},[29,42560,511],{"class":39},[29,42562,38176],{"class":309},[29,42564,42565,42567,42569,42571,42573,42575,42577,42579,42582,42584,42586,42588,42590,42592,42594],{"class":31,"line":10019},[29,42566,42358],{"class":309},[29,42568,38586],{"class":39},[29,42570,686],{"class":309},[29,42572,926],{"class":39},[29,42574,42367],{"class":309},[29,42576,32199],{"class":39},[29,42578,686],{"class":309},[29,42580,42581],{"class":39},"288",[29,42583,42376],{"class":309},[29,42585,505],{"class":39},[29,42587,686],{"class":309},[29,42589,511],{"class":39},[29,42591,42385],{"class":309},[29,42593,511],{"class":39},[29,42595,38176],{"class":309},[29,42597,42598,42600,42603,42605,42607,42609,42611,42613,42616,42618,42620,42622,42624,42626,42628],{"class":31,"line":10025},[29,42599,42358],{"class":309},[29,42601,42602],{"class":39},"528",[29,42604,686],{"class":309},[29,42606,34999],{"class":39},[29,42608,42367],{"class":309},[29,42610,21223],{"class":39},[29,42612,686],{"class":309},[29,42614,42615],{"class":39},"320",[29,42617,42376],{"class":309},[29,42619,505],{"class":39},[29,42621,686],{"class":309},[29,42623,32199],{"class":39},[29,42625,42385],{"class":309},[29,42627,32199],{"class":39},[29,42629,38176],{"class":309},[29,42631,42632,42634,42636,42638,42640,42642,42644,42646,42648,42650,42652,42654,42656],{"class":31,"line":10039},[29,42633,38226],{"class":309},[29,42635,31003],{"class":5391},[29,42637,355],{"class":305},[29,42639,380],{"class":39},[29,42641,686],{"class":309},[29,42643,31058],{"class":5391},[29,42645,355],{"class":305},[29,42647,386],{"class":39},[29,42649,686],{"class":309},[29,42651,31012],{"class":5391},[29,42653,355],{"class":305},[29,42655,525],{"class":39},[29,42657,316],{"class":309},[29,42659,42660],{"class":31,"line":10045},[29,42661,38255],{"class":309},[29,42663,42664,42666,42669,42671],{"class":31,"line":10072},[29,42665,30974],{"class":39},[29,42667,42668],{"class":309},".b5",[29,42670,355],{"class":305},[29,42672,38138],{"class":309},[29,42674,42675,42677,42680,42682,42684,42686,42688,42690,42692,42694,42696,42698,42700,42702,42704],{"class":31,"line":10081},[29,42676,42358],{"class":309},[29,42678,42679],{"class":39},"832",[29,42681,686],{"class":309},[29,42683,34999],{"class":39},[29,42685,42367],{"class":309},[29,42687,21223],{"class":39},[29,42689,686],{"class":309},[29,42691,42615],{"class":39},[29,42693,42376],{"class":309},[29,42695,505],{"class":39},[29,42697,686],{"class":309},[29,42699,32199],{"class":39},[29,42701,42385],{"class":309},[29,42703,32199],{"class":39},[29,42705,38176],{"class":309},[29,42707,42708,42710,42712,42714,42716,42718,42720,42722,42724,42726,42728,42730,42732,42734,42736],{"class":31,"line":10087},[29,42709,42358],{"class":309},[29,42711,42679],{"class":39},[29,42713,686],{"class":309},[29,42715,35069],{"class":39},[29,42717,42367],{"class":309},[29,42719,42288],{"class":39},[29,42721,686],{"class":309},[29,42723,35069],{"class":39},[29,42725,42376],{"class":309},[29,42727,915],{"class":39},[29,42729,686],{"class":309},[29,42731,32199],{"class":39},[29,42733,42385],{"class":309},[29,42735,32199],{"class":39},[29,42737,38176],{"class":309},[29,42739,42740,42743,42745,42747,42749],{"class":31,"line":10095},[29,42741,42742],{"class":309},"            nn.AdaptiveAvgPool2d((",[29,42744,525],{"class":39},[29,42746,686],{"class":309},[29,42748,525],{"class":39},[29,42750,42751],{"class":309},")),\n",[29,42753,42754],{"class":31,"line":10100},[29,42755,38919],{"class":309},[29,42757,42758,42760,42763,42765,42767],{"class":31,"line":16779},[29,42759,38924],{"class":309},[29,42761,42762],{"class":39},"1024",[29,42764,686],{"class":309},[29,42766,754],{"class":39},[29,42768,316],{"class":309},[29,42770,42771],{"class":31,"line":16785},[29,42772,38255],{"class":309},[29,42774,42775],{"class":31,"line":16808},[29,42776,42777],{"class":367},"        # 对模型参数初始化\n",[29,42779,42780,42782,42784,42786,42788],{"class":31,"line":16814},[29,42781,3578],{"class":305},[29,42783,38997],{"class":309},[29,42785,26172],{"class":305},[29,42787,39002],{"class":39},[29,42789,39005],{"class":309},[29,42791,42792,42794,42796],{"class":31,"line":16837},[29,42793,4817],{"class":305},[29,42795,39017],{"class":39},[29,42797,39020],{"class":309},[29,42799,42800,42802,42805,42807,42810,42812,42814,42816,42818],{"class":31,"line":16851},[29,42801,39030],{"class":309},[29,42803,42804],{"class":5391},"mode",[29,42806,355],{"class":305},[29,42808,42809],{"class":103},"'fan_out'",[29,42811,686],{"class":309},[29,42813,39033],{"class":5391},[29,42815,355],{"class":305},[29,42817,39038],{"class":103},[29,42819,316],{"class":309},[29,42821,42822],{"class":31,"line":16871},[29,42823,42824],{"class":367},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[29,42826,42827],{"class":31,"line":16877},[29,42828,42829],{"class":367},"                # ② mode = 'fan_out'决定使用的fan值：\n",[29,42831,42832],{"class":31,"line":16888},[29,42833,42834],{"class":367},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[29,42836,42837],{"class":31,"line":16911},[29,42838,42839],{"class":367},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[29,42841,42842],{"class":31,"line":16933},[29,42843,42844],{"class":367},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[29,42846,42847],{"class":31,"line":16938},[29,42848,42849],{"class":367},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[29,42851,42852,42854,42856,42858,42860,42862],{"class":31,"line":16944},[29,42853,39050],{"class":305},[29,42855,39053],{"class":309},[29,42857,39056],{"class":305},[29,42859,39059],{"class":305},[29,42861,39062],{"class":39},[29,42863,3914],{"class":309},[29,42865,42866,42868,42870],{"class":31,"line":16958},[29,42867,39074],{"class":309},[29,42869,499],{"class":39},[29,42871,316],{"class":309},[29,42873,42874,42877,42879],{"class":31,"line":16971},[29,42875,42876],{"class":305},"                elif",[29,42878,39017],{"class":39},[29,42880,39093],{"class":309},[29,42882,42883,42886,42888,42890,42892],{"class":31,"line":16976},[29,42884,42885],{"class":309},"                    nn.init.normal_(m.weight,",[29,42887,499],{"class":39},[29,42889,686],{"class":309},[29,42891,39115],{"class":39},[29,42893,316],{"class":309},[29,42895,42896,42899,42901,42903,42905,42907],{"class":31,"line":16990},[29,42897,42898],{"class":305},"                    if",[29,42900,39053],{"class":309},[29,42902,39056],{"class":305},[29,42904,39059],{"class":305},[29,42906,39062],{"class":39},[29,42908,3914],{"class":309},[29,42910,42911,42914,42916],{"class":31,"line":16995},[29,42912,42913],{"class":309},"                        nn.init.constant_(m.bias,",[29,42915,499],{"class":39},[29,42917,316],{"class":309},[29,42919,42920],{"class":31,"line":17001},[29,42921,35294],{"class":367},[29,42923,42924,42926,42928],{"class":31,"line":17006},[29,42925,30930],{"class":305},[29,42927,31222],{"class":35},[29,42929,31225],{"class":309},[29,42931,42932,42934,42936,42938],{"class":31,"line":17020},[29,42933,31230],{"class":309},[29,42935,355],{"class":305},[29,42937,30952],{"class":39},[29,42939,42940],{"class":309},".b1(x)\n",[29,42942,42943,42945,42947,42949],{"class":31,"line":17025},[29,42944,31230],{"class":309},[29,42946,355],{"class":305},[29,42948,30952],{"class":39},[29,42950,42951],{"class":309},".b2(x)\n",[29,42953,42954,42956,42958,42960],{"class":31,"line":17030},[29,42955,31230],{"class":309},[29,42957,355],{"class":305},[29,42959,30952],{"class":39},[29,42961,42962],{"class":309},".b3(x)\n",[29,42964,42965,42967,42969,42971],{"class":31,"line":17044},[29,42966,31230],{"class":309},[29,42968,355],{"class":305},[29,42970,30952],{"class":39},[29,42972,42973],{"class":309},".b4(x)\n",[29,42975,42976,42978,42980,42982],{"class":31,"line":17056},[29,42977,31230],{"class":309},[29,42979,355],{"class":305},[29,42981,30952],{"class":39},[29,42983,42984],{"class":309},".b5(x)\n",[29,42986,42987,42989],{"class":31,"line":17061},[29,42988,14927],{"class":305},[29,42990,31338],{"class":309},[29,42992,42993],{"class":31,"line":17074},[29,42994,2575],{"emptyLinePlaceholder":233},[29,42996,42997],{"class":31,"line":17079},[29,42998,42999],{"class":367},"# 模型展示\n",[29,43001,43002,43004,43006,43008,43010],{"class":31,"line":17084},[29,43003,1707],{"class":305},[29,43005,31349],{"class":39},[29,43007,3124],{"class":305},[29,43009,31354],{"class":103},[29,43011,3914],{"class":309},[29,43013,43014,43016,43018,43020,43022,43024,43026,43028,43030],{"class":31,"line":17089},[29,43015,31366],{"class":309},[29,43017,355],{"class":305},[29,43019,30580],{"class":309},[29,43021,31373],{"class":103},[29,43023,1880],{"class":305},[29,43025,31378],{"class":309},[29,43027,1877],{"class":305},[29,43029,30605],{"class":103},[29,43031,316],{"class":309},[29,43033,43034,43036,43038],{"class":31,"line":17102},[29,43035,31418],{"class":309},[29,43037,355],{"class":305},[29,43039,43040],{"class":309},"GoogLeNet(Inception).to(device)\n",[29,43042,43043,43045,43047,43049,43051,43053,43055,43057],{"class":31,"line":17107},[29,43044,31428],{"class":39},[29,43046,31431],{"class":309},[29,43048,525],{"class":39},[29,43050,686],{"class":309},[29,43052,31630],{"class":39},[29,43054,686],{"class":309},[29,43056,31630],{"class":39},[29,43058,31444],{"class":309},[259,43060,43061],{"start":43},[178,43062,39312],{},[19,43064,43066],{"className":30507,"code":43065,"language":30509,"meta":24,"style":24},"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",[26,43067,43068,43074,43080,43090,43096,43106,43116,43126,43136,43146,43150,43161,43171,43175,43179,43183,43191,43203,43213,43229,43239,43271,43285,43295,43305,43309,43319,43333,43343,43353,43363,43369,43373,43377,43381,43385,43389,43397,43417,43421,43425,43429,43433,43437,43453,43457,43461,43469,43473,43477,43485,43489,43493,43497,43505,43509,43513,43517,43521,43529,43533,43541,43545,43553,43557,43565,43569,43577,43581,43585,43593,43597,43601,43605,43617,43641,43655,43659,43663,43667,43675,43679,43687,43691,43699,43703,43711,43715,43723,43727,43735,43739,43751,43755,43763,43767,43775,43779,43783,43787,43791,43799,43803,43819,43823,43831,43835,43839,43843,43847,43851,43855,43859,43875,43879,43891,43895,43907,43911,43923,43927,43935,43939,43947,43951,43955,43959,43965,43969,43977,43981,43997,44001,44009,44013,44029,44041,44045,44057,44061,44065,44073,44077,44081,44089,44093,44101,44105,44113,44117,44121,44163,44205,44209,44213,44229,44233,44249,44253,44257,44265,44269,44273,44285,44323,44327,44331,44339,44343,44357,44367,44373,44379,44385,44391,44395,44399,44405,44409,44413,44421,44425,44443,44447,44451,44455,44471,44475,44479,44483,44487,44491,44511,44531,44535,44539,44543,44551,44559,44563,44579,44599,44619,44623,44627,44635,44643,44647,44651,44655,44667,44671,44681,44689,44706],{"__ignoreMap":24},[29,43069,43070,43072],{"class":31,"line":32},[29,43071,30521],{"class":305},[29,43073,31951],{"class":309},[29,43075,43076,43078],{"class":31,"line":43},[29,43077,30521],{"class":305},[29,43079,31958],{"class":309},[29,43081,43082,43084,43086,43088],{"class":31,"line":51},[29,43083,30521],{"class":305},[29,43085,31969],{"class":309},[29,43087,31512],{"class":305},[29,43089,31974],{"class":309},[29,43091,43092,43094],{"class":31,"line":59},[29,43093,30521],{"class":305},[29,43095,30524],{"class":309},[29,43097,43098,43100,43102,43104],{"class":31,"line":67},[29,43099,30866],{"class":305},[29,43101,31544],{"class":309},[29,43103,30521],{"class":305},[29,43105,31991],{"class":309},[29,43107,43108,43110,43112,43114],{"class":31,"line":75},[29,43109,30866],{"class":305},[29,43111,31497],{"class":309},[29,43113,30521],{"class":305},[29,43115,31502],{"class":309},[29,43117,43118,43120,43122,43124],{"class":31,"line":83},[29,43119,30866],{"class":305},[29,43121,31527],{"class":309},[29,43123,30521],{"class":305},[29,43125,31532],{"class":309},[29,43127,43128,43130,43132,43134],{"class":31,"line":158},[29,43129,30521],{"class":305},[29,43131,31544],{"class":309},[29,43133,31512],{"class":305},[29,43135,31549],{"class":309},[29,43137,43138,43140,43142,43144],{"class":31,"line":166},[29,43139,30521],{"class":305},[29,43141,31561],{"class":309},[29,43143,31512],{"class":305},[29,43145,31566],{"class":309},[29,43147,43148],{"class":31,"line":1505},[29,43149,32036],{"class":367},[29,43151,43152,43154,43156,43158],{"class":31,"line":1788},[29,43153,30866],{"class":305},[29,43155,32043],{"class":309},[29,43157,30521],{"class":305},[29,43159,43160],{"class":309}," GoogLeNet, Inception\n",[29,43162,43163,43165,43167,43169],{"class":31,"line":1793},[29,43164,30866],{"class":305},[29,43166,30869],{"class":309},[29,43168,30521],{"class":305},[29,43170,30874],{"class":309},[29,43172,43173],{"class":31,"line":1799},[29,43174,2575],{"emptyLinePlaceholder":233},[29,43176,43177],{"class":31,"line":1804},[29,43178,2575],{"emptyLinePlaceholder":233},[29,43180,43181],{"class":31,"line":1818},[29,43182,32071],{"class":367},[29,43184,43185,43187,43189],{"class":31,"line":1823},[29,43186,32076],{"class":305},[29,43188,32079],{"class":35},[29,43190,32082],{"class":309},[29,43192,43193,43195,43197,43199,43201],{"class":31,"line":1829},[29,43194,32087],{"class":309},[29,43196,355],{"class":305},[29,43198,31584],{"class":309},[29,43200,31592],{"class":103},[29,43202,31595],{"class":309},[29,43204,43205,43207,43209,43211],{"class":31,"line":1850},[29,43206,32100],{"class":5391},[29,43208,355],{"class":305},[29,43210,31605],{"class":39},[29,43212,31595],{"class":309},[29,43214,43215,43217,43219,43221,43223,43225,43227],{"class":31,"line":1855},[29,43216,32111],{"class":5391},[29,43218,355],{"class":305},[29,43220,31622],{"class":309},[29,43222,31625],{"class":5391},[29,43224,355],{"class":305},[29,43226,35578],{"class":39},[29,43228,31633],{"class":309},[29,43230,43231,43233,43235,43237],{"class":31,"line":1869},[29,43232,32128],{"class":5391},[29,43234,355],{"class":305},[29,43236,31605],{"class":39},[29,43238,316],{"class":309},[29,43240,43241,43243,43245,43247,43249,43251,43253,43255,43257,43259,43261,43263,43265,43267,43269],{"class":31,"line":1874},[29,43242,32139],{"class":309},[29,43244,355],{"class":305},[29,43246,32144],{"class":309},[29,43248,32147],{"class":39},[29,43250,310],{"class":309},[29,43252,32152],{"class":39},[29,43254,763],{"class":305},[29,43256,7533],{"class":39},[29,43258,32159],{"class":309},[29,43260,32147],{"class":39},[29,43262,310],{"class":309},[29,43264,32166],{"class":39},[29,43266,763],{"class":305},[29,43268,7533],{"class":39},[29,43270,32173],{"class":309},[29,43272,43273,43275,43277,43279,43281,43283],{"class":31,"line":1903},[29,43274,32178],{"class":309},[29,43276,355],{"class":305},[29,43278,32183],{"class":309},[29,43280,31666],{"class":5391},[29,43282,355],{"class":305},[29,43284,31671],{"class":309},[29,43286,43287,43289,43291,43293],{"class":31,"line":1908},[29,43288,32194],{"class":5391},[29,43290,355],{"class":305},[29,43292,505],{"class":39},[29,43294,31595],{"class":309},[29,43296,43297,43299,43301,43303],{"class":31,"line":1925},[29,43298,32206],{"class":5391},[29,43300,355],{"class":305},[29,43302,31605],{"class":39},[29,43304,31595],{"class":309},[29,43306,43307],{"class":31,"line":1930},[29,43308,32217],{"class":367},[29,43310,43311,43313,43315,43317],{"class":31,"line":1935},[29,43312,32222],{"class":5391},[29,43314,355],{"class":305},[29,43316,703],{"class":39},[29,43318,316],{"class":309},[29,43320,43321,43323,43325,43327,43329,43331],{"class":31,"line":1940},[29,43322,32233],{"class":309},[29,43324,355],{"class":305},[29,43326,31663],{"class":309},[29,43328,31666],{"class":5391},[29,43330,355],{"class":305},[29,43332,32244],{"class":309},[29,43334,43335,43337,43339,43341],{"class":31,"line":1954},[29,43336,32249],{"class":5391},[29,43338,355],{"class":305},[29,43340,505],{"class":39},[29,43342,31595],{"class":309},[29,43344,43345,43347,43349,43351],{"class":31,"line":1959},[29,43346,32260],{"class":5391},[29,43348,355],{"class":305},[29,43350,31605],{"class":39},[29,43352,31595],{"class":309},[29,43354,43355,43357,43359,43361],{"class":31,"line":2752},[29,43356,32271],{"class":5391},[29,43358,355],{"class":305},[29,43360,703],{"class":39},[29,43362,316],{"class":309},[29,43364,43365,43367],{"class":31,"line":2766},[29,43366,4265],{"class":305},[29,43368,32284],{"class":309},[29,43370,43371],{"class":31,"line":2774},[29,43372,2575],{"emptyLinePlaceholder":233},[29,43374,43375],{"class":31,"line":2779},[29,43376,32293],{"class":367},[29,43378,43379],{"class":31,"line":2785},[29,43380,32298],{"class":367},[29,43382,43383],{"class":31,"line":2791},[29,43384,2575],{"emptyLinePlaceholder":233},[29,43386,43387],{"class":31,"line":2796},[29,43388,32307],{"class":367},[29,43390,43391,43393,43395],{"class":31,"line":8123},[29,43392,32076],{"class":305},[29,43394,32314],{"class":35},[29,43396,32317],{"class":309},[29,43398,43399,43401,43403,43405,43407,43409,43411,43413,43415],{"class":31,"line":8147},[29,43400,31366],{"class":309},[29,43402,355],{"class":305},[29,43404,30580],{"class":309},[29,43406,31373],{"class":103},[29,43408,1880],{"class":305},[29,43410,31378],{"class":309},[29,43412,1877],{"class":305},[29,43414,32336],{"class":103},[29,43416,316],{"class":309},[29,43418,43419],{"class":31,"line":8152},[29,43420,2575],{"emptyLinePlaceholder":233},[29,43422,43423],{"class":31,"line":8158},[29,43424,2575],{"emptyLinePlaceholder":233},[29,43426,43427],{"class":31,"line":8185},[29,43428,32351],{"class":367},[29,43430,43431],{"class":31,"line":8190},[29,43432,32356],{"class":367},[29,43434,43435],{"class":31,"line":8196},[29,43436,32361],{"class":367},[29,43438,43439,43441,43443,43445,43447,43449,43451],{"class":31,"line":8208},[29,43440,32366],{"class":309},[29,43442,355],{"class":305},[29,43444,32371],{"class":309},[29,43446,32374],{"class":5391},[29,43448,355],{"class":305},[29,43450,32379],{"class":39},[29,43452,316],{"class":309},[29,43454,43455],{"class":31,"line":8220},[29,43456,2575],{"emptyLinePlaceholder":233},[29,43458,43459],{"class":31,"line":8232},[29,43460,32390],{"class":367},[29,43462,43463,43465,43467],{"class":31,"line":9891},[29,43464,32395],{"class":309},[29,43466,355],{"class":305},[29,43468,32400],{"class":309},[29,43470,43471],{"class":31,"line":9916},[29,43472,2575],{"emptyLinePlaceholder":233},[29,43474,43475],{"class":31,"line":9939},[29,43476,32409],{"class":367},[29,43478,43479,43481,43483],{"class":31,"line":9963},[29,43480,31418],{"class":309},[29,43482,355],{"class":305},[29,43484,32418],{"class":309},[29,43486,43487],{"class":31,"line":9968},[29,43488,32423],{"class":367},[29,43490,43491],{"class":31,"line":9973},[29,43492,32428],{"class":367},[29,43494,43495],{"class":31,"line":9978},[29,43496,32433],{"class":367},[29,43498,43499,43501,43503],{"class":31,"line":9987},[29,43500,32438],{"class":309},[29,43502,355],{"class":305},[29,43504,32443],{"class":309},[29,43506,43507],{"class":31,"line":9992},[29,43508,2575],{"emptyLinePlaceholder":233},[29,43510,43511],{"class":31,"line":9998},[29,43512,2575],{"emptyLinePlaceholder":233},[29,43514,43515],{"class":31,"line":10019},[29,43516,32456],{"class":367},[29,43518,43519],{"class":31,"line":10025},[29,43520,32461],{"class":367},[29,43522,43523,43525,43527],{"class":31,"line":10039},[29,43524,32466],{"class":309},[29,43526,355],{"class":305},[29,43528,32471],{"class":39},[29,43530,43531],{"class":31,"line":10045},[29,43532,32476],{"class":367},[29,43534,43535,43537,43539],{"class":31,"line":10072},[29,43536,32481],{"class":309},[29,43538,355],{"class":305},[29,43540,32486],{"class":309},[29,43542,43543],{"class":31,"line":10081},[29,43544,32491],{"class":367},[29,43546,43547,43549,43551],{"class":31,"line":10087},[29,43548,32496],{"class":309},[29,43550,355],{"class":305},[29,43552,32486],{"class":309},[29,43554,43555],{"class":31,"line":10095},[29,43556,32505],{"class":367},[29,43558,43559,43561,43563],{"class":31,"line":10100},[29,43560,32510],{"class":309},[29,43562,355],{"class":305},[29,43564,32486],{"class":309},[29,43566,43567],{"class":31,"line":16779},[29,43568,32519],{"class":367},[29,43570,43571,43573,43575],{"class":31,"line":16785},[29,43572,32524],{"class":309},[29,43574,355],{"class":305},[29,43576,32486],{"class":309},[29,43578,43579],{"class":31,"line":16808},[29,43580,2575],{"emptyLinePlaceholder":233},[29,43582,43583],{"class":31,"line":16814},[29,43584,32537],{"class":367},[29,43586,43587,43589,43591],{"class":31,"line":16837},[29,43588,32542],{"class":309},[29,43590,355],{"class":305},[29,43592,32547],{"class":309},[29,43594,43595],{"class":31,"line":16851},[29,43596,2575],{"emptyLinePlaceholder":233},[29,43598,43599],{"class":31,"line":16871},[29,43600,2575],{"emptyLinePlaceholder":233},[29,43602,43603],{"class":31,"line":16877},[29,43604,32560],{"class":367},[29,43606,43607,43609,43611,43613,43615],{"class":31,"line":16888},[29,43608,3376],{"class":305},[29,43610,32567],{"class":309},[29,43612,26172],{"class":305},[29,43614,32572],{"class":39},[29,43616,32575],{"class":309},[29,43618,43619,43621,43623,43625,43627,43629,43631,43633,43635,43637,43639],{"class":31,"line":16911},[29,43620,32580],{"class":39},[29,43622,310],{"class":309},[29,43624,32585],{"class":103},[29,43626,32588],{"class":39},[29,43628,892],{"class":103},[29,43630,32588],{"class":39},[29,43632,559],{"class":103},[29,43634,32597],{"class":309},[29,43636,840],{"class":305},[29,43638,525],{"class":39},[29,43640,30626],{"class":309},[29,43642,43643,43645,43647,43649,43651,43653],{"class":31,"line":16933},[29,43644,32580],{"class":39},[29,43646,310],{"class":309},[29,43648,32612],{"class":103},[29,43650,763],{"class":305},[29,43652,754],{"class":39},[29,43654,316],{"class":309},[29,43656,43657],{"class":31,"line":16938},[29,43658,2575],{"emptyLinePlaceholder":233},[29,43660,43661],{"class":31,"line":16944},[29,43662,32627],{"class":367},[29,43664,43665],{"class":31,"line":16958},[29,43666,32632],{"class":367},[29,43668,43669,43671,43673],{"class":31,"line":16971},[29,43670,32637],{"class":309},[29,43672,355],{"class":305},[29,43674,32471],{"class":39},[29,43676,43677],{"class":31,"line":16976},[29,43678,32646],{"class":367},[29,43680,43681,43683,43685],{"class":31,"line":16990},[29,43682,32651],{"class":309},[29,43684,355],{"class":305},[29,43686,3260],{"class":39},[29,43688,43689],{"class":31,"line":16995},[29,43690,32660],{"class":367},[29,43692,43693,43695,43697],{"class":31,"line":17001},[29,43694,32665],{"class":309},[29,43696,355],{"class":305},[29,43698,32471],{"class":39},[29,43700,43701],{"class":31,"line":17006},[29,43702,32674],{"class":367},[29,43704,43705,43707,43709],{"class":31,"line":17020},[29,43706,32679],{"class":309},[29,43708,355],{"class":305},[29,43710,3260],{"class":39},[29,43712,43713],{"class":31,"line":17025},[29,43714,32688],{"class":367},[29,43716,43717,43719,43721],{"class":31,"line":17030},[29,43718,32693],{"class":309},[29,43720,355],{"class":305},[29,43722,3260],{"class":39},[29,43724,43725],{"class":31,"line":17044},[29,43726,32702],{"class":367},[29,43728,43729,43731,43733],{"class":31,"line":17056},[29,43730,32707],{"class":309},[29,43732,355],{"class":305},[29,43734,3260],{"class":39},[29,43736,43737],{"class":31,"line":17061},[29,43738,32716],{"class":367},[29,43740,43741,43743,43745,43747,43749],{"class":31,"line":17074},[29,43742,3578],{"class":305},[29,43744,31730],{"class":309},[29,43746,26172],{"class":305},[29,43748,31735],{"class":39},[29,43750,32729],{"class":309},[29,43752,43753],{"class":31,"line":17079},[29,43754,32734],{"class":367},[29,43756,43757,43759,43761],{"class":31,"line":17084},[29,43758,32739],{"class":309},[29,43760,355],{"class":305},[29,43762,32744],{"class":309},[29,43764,43765],{"class":31,"line":17089},[29,43766,32749],{"class":367},[29,43768,43769,43771,43773],{"class":31,"line":17102},[29,43770,32754],{"class":309},[29,43772,355],{"class":305},[29,43774,32759],{"class":309},[29,43776,43777],{"class":31,"line":17107},[29,43778,32765],{"class":367},[29,43780,43781],{"class":31,"line":32762},[29,43782,32771],{"class":309},[29,43784,43785],{"class":31,"line":32768},[29,43786,32777],{"class":367},[29,43788,43789],{"class":31,"line":32774},[29,43790,32783],{"class":367},[29,43792,43793,43795,43797],{"class":31,"line":32780},[29,43794,32789],{"class":309},[29,43796,355],{"class":305},[29,43798,32794],{"class":309},[29,43800,43801],{"class":31,"line":32786},[29,43802,32800],{"class":367},[29,43804,43805,43807,43809,43811,43813,43815,43817],{"class":31,"line":32797},[29,43806,32806],{"class":309},[29,43808,355],{"class":305},[29,43810,32811],{"class":309},[29,43812,32814],{"class":5391},[29,43814,355],{"class":305},[29,43816,525],{"class":39},[29,43818,316],{"class":309},[29,43820,43821],{"class":31,"line":32803},[29,43822,32826],{"class":367},[29,43824,43825,43827,43829],{"class":31,"line":32823},[29,43826,32832],{"class":309},[29,43828,355],{"class":305},[29,43830,32837],{"class":309},[29,43832,43833],{"class":31,"line":32829},[29,43834,32843],{"class":367},[29,43836,43837],{"class":31,"line":32840},[29,43838,32849],{"class":309},[29,43840,43841],{"class":31,"line":32846},[29,43842,32855],{"class":367},[29,43844,43845],{"class":31,"line":32852},[29,43846,32861],{"class":309},[29,43848,43849],{"class":31,"line":32858},[29,43850,32867],{"class":367},[29,43852,43853],{"class":31,"line":32864},[29,43854,32873],{"class":309},[29,43856,43857],{"class":31,"line":32870},[29,43858,32879],{"class":367},[29,43860,43861,43863,43865,43867,43869,43871,43873],{"class":31,"line":32876},[29,43862,32885],{"class":309},[29,43864,9652],{"class":305},[29,43866,32890],{"class":309},[29,43868,763],{"class":305},[29,43870,32895],{"class":309},[29,43872,499],{"class":39},[29,43874,316],{"class":309},[29,43876,43877],{"class":31,"line":32882},[29,43878,32905],{"class":367},[29,43880,43881,43883,43885,43887,43889],{"class":31,"line":32902},[29,43882,32911],{"class":309},[29,43884,9652],{"class":305},[29,43886,32916],{"class":309},[29,43888,3124],{"class":305},[29,43890,32921],{"class":309},[29,43892,43893],{"class":31,"line":32908},[29,43894,32927],{"class":367},[29,43896,43897,43899,43901,43903,43905],{"class":31,"line":32924},[29,43898,32933],{"class":309},[29,43900,9652],{"class":305},[29,43902,32895],{"class":309},[29,43904,499],{"class":39},[29,43906,316],{"class":309},[29,43908,43909],{"class":31,"line":32930},[29,43910,32947],{"class":367},[29,43912,43913,43915,43917,43919,43921],{"class":31,"line":32944},[29,43914,3578],{"class":305},[29,43916,32955],{"class":309},[29,43918,26172],{"class":305},[29,43920,31735],{"class":39},[29,43922,32962],{"class":309},[29,43924,43925],{"class":31,"line":32950},[29,43926,32968],{"class":367},[29,43928,43929,43931,43933],{"class":31,"line":32965},[29,43930,32739],{"class":309},[29,43932,355],{"class":305},[29,43934,32744],{"class":309},[29,43936,43937],{"class":31,"line":32971},[29,43938,32983],{"class":367},[29,43940,43941,43943,43945],{"class":31,"line":32980},[29,43942,32754],{"class":309},[29,43944,355],{"class":305},[29,43946,32759],{"class":309},[29,43948,43949],{"class":31,"line":32986},[29,43950,32998],{"class":367},[29,43952,43953],{"class":31,"line":32995},[29,43954,33004],{"class":309},[29,43956,43957],{"class":31,"line":33001},[29,43958,36485],{"class":367},[29,43960,43961,43963],{"class":31,"line":33007},[29,43962,33010],{"class":305},[29,43964,33013],{"class":309},[29,43966,43967],{"class":31,"line":33016},[29,43968,33019],{"class":367},[29,43970,43971,43973,43975],{"class":31,"line":33022},[29,43972,36500],{"class":309},[29,43974,355],{"class":305},[29,43976,32794],{"class":309},[29,43978,43979],{"class":31,"line":33033},[29,43980,33036],{"class":367},[29,43982,43983,43985,43987,43989,43991,43993,43995],{"class":31,"line":33039},[29,43984,36513],{"class":309},[29,43986,355],{"class":305},[29,43988,32811],{"class":309},[29,43990,32814],{"class":5391},[29,43992,355],{"class":305},[29,43994,525],{"class":39},[29,43996,316],{"class":309},[29,43998,43999],{"class":31,"line":33058},[29,44000,33061],{"class":367},[29,44002,44003,44005,44007],{"class":31,"line":33064},[29,44004,36534],{"class":309},[29,44006,355],{"class":305},[29,44008,32837],{"class":309},[29,44010,44011],{"class":31,"line":33075},[29,44012,33078],{"class":367},[29,44014,44015,44017,44019,44021,44023,44025,44027],{"class":31,"line":33081},[29,44016,36547],{"class":309},[29,44018,9652],{"class":305},[29,44020,36552],{"class":309},[29,44022,763],{"class":305},[29,44024,32895],{"class":309},[29,44026,499],{"class":39},[29,44028,316],{"class":309},[29,44030,44031,44033,44035,44037,44039],{"class":31,"line":33101},[29,44032,36565],{"class":309},[29,44034,9652],{"class":305},[29,44036,32916],{"class":309},[29,44038,3124],{"class":305},[29,44040,32921],{"class":309},[29,44042,44043],{"class":31,"line":33117},[29,44044,36578],{"class":367},[29,44046,44047,44049,44051,44053,44055],{"class":31,"line":33123},[29,44048,36583],{"class":309},[29,44050,9652],{"class":305},[29,44052,32895],{"class":309},[29,44054,499],{"class":39},[29,44056,316],{"class":309},[29,44058,44059],{"class":31,"line":33137},[29,44060,33140],{"class":367},[29,44062,44063],{"class":31,"line":33143},[29,44064,33146],{"class":367},[29,44066,44067,44069,44071],{"class":31,"line":33149},[29,44068,33152],{"class":309},[29,44070,892],{"class":305},[29,44072,33157],{"class":309},[29,44074,44075],{"class":31,"line":33160},[29,44076,33163],{"class":367},[29,44078,44079],{"class":31,"line":33166},[29,44080,33169],{"class":367},[29,44082,44083,44085,44087],{"class":31,"line":33172},[29,44084,33175],{"class":309},[29,44086,892],{"class":305},[29,44088,33157],{"class":309},[29,44090,44091],{"class":31,"line":33182},[29,44092,33185],{"class":367},[29,44094,44095,44097,44099],{"class":31,"line":33188},[29,44096,33191],{"class":309},[29,44098,892],{"class":305},[29,44100,33196],{"class":309},[29,44102,44103],{"class":31,"line":33199},[29,44104,33202],{"class":367},[29,44106,44107,44109,44111],{"class":31,"line":33205},[29,44108,33208],{"class":309},[29,44110,892],{"class":305},[29,44112,33196],{"class":309},[29,44114,44115],{"class":31,"line":33215},[29,44116,2575],{"emptyLinePlaceholder":233},[29,44118,44119],{"class":31,"line":33220},[29,44120,33223],{"class":367},[29,44122,44123,44125,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161],{"class":31,"line":33226},[29,44124,32580],{"class":39},[29,44126,310],{"class":309},[29,44128,3767],{"class":103},[29,44130,32588],{"class":39},[29,44132,33237],{"class":103},[29,44134,1204],{"class":39},[29,44136,33242],{"class":305},[29,44138,1254],{"class":39},[29,44140,33247],{"class":103},[29,44142,1204],{"class":39},[29,44144,33242],{"class":305},[29,44146,1254],{"class":39},[29,44148,3767],{"class":103},[29,44150,33258],{"class":309},[29,44152,840],{"class":305},[29,44154,525],{"class":39},[29,44156,33265],{"class":309},[29,44158,840],{"class":305},[29,44160,525],{"class":39},[29,44162,33272],{"class":309},[29,44164,44165,44167,44169,44171,44173,44175,44177,44179,44181,44183,44185,44187,44189,44191,44193,44195,44197,44199,44201,44203],{"class":31,"line":33275},[29,44166,32580],{"class":39},[29,44168,310],{"class":309},[29,44170,3767],{"class":103},[29,44172,32588],{"class":39},[29,44174,33286],{"class":103},[29,44176,1204],{"class":39},[29,44178,33242],{"class":305},[29,44180,1254],{"class":39},[29,44182,33295],{"class":103},[29,44184,1204],{"class":39},[29,44186,33242],{"class":305},[29,44188,1254],{"class":39},[29,44190,3767],{"class":103},[29,44192,33306],{"class":309},[29,44194,840],{"class":305},[29,44196,525],{"class":39},[29,44198,33313],{"class":309},[29,44200,840],{"class":305},[29,44202,525],{"class":39},[29,44204,33272],{"class":309},[29,44206,44207],{"class":31,"line":33322},[29,44208,2575],{"emptyLinePlaceholder":233},[29,44210,44211],{"class":31,"line":33327},[29,44212,33330],{"class":367},[29,44214,44215,44217,44219,44221,44223,44225,44227],{"class":31,"line":33333},[29,44216,2672],{"class":305},[29,44218,33338],{"class":309},[29,44220,840],{"class":305},[29,44222,525],{"class":39},[29,44224,1248],{"class":309},[29,44226,1268],{"class":305},[29,44228,33349],{"class":309},[29,44230,44231],{"class":31,"line":33352},[29,44232,33355],{"class":367},[29,44234,44235,44237,44239,44241,44243,44245,44247],{"class":31,"line":33358},[29,44236,33361],{"class":309},[29,44238,349],{"class":39},[29,44240,355],{"class":305},[29,44242,33368],{"class":309},[29,44244,840],{"class":305},[29,44246,525],{"class":39},[29,44248,33375],{"class":309},[29,44250,44251],{"class":31,"line":33378},[29,44252,33381],{"class":367},[29,44254,44255],{"class":31,"line":33384},[29,44256,33387],{"class":367},[29,44258,44259,44261,44263],{"class":31,"line":33390},[29,44260,33393],{"class":309},[29,44262,355],{"class":305},[29,44264,32443],{"class":309},[29,44266,44267],{"class":31,"line":33400},[29,44268,2575],{"emptyLinePlaceholder":233},[29,44270,44271],{"class":31,"line":33405},[29,44272,33408],{"class":367},[29,44274,44275,44277,44279,44281,44283],{"class":31,"line":33411},[29,44276,33414],{"class":309},[29,44278,355],{"class":305},[29,44280,33419],{"class":309},[29,44282,840],{"class":305},[29,44284,33424],{"class":309},[29,44286,44287,44289,44291,44293,44295,44297,44299,44301,44303,44305,44307,44309,44311,44313,44315,44317,44319,44321],{"class":31,"line":33427},[29,44288,32580],{"class":39},[29,44290,310],{"class":309},[29,44292,33434],{"class":103},[29,44294,1204],{"class":39},[29,44296,33439],{"class":305},[29,44298,1254],{"class":39},[29,44300,852],{"class":103},[29,44302,1204],{"class":39},[29,44304,33439],{"class":305},[29,44306,1254],{"class":39},[29,44308,33452],{"class":103},[29,44310,33455],{"class":309},[29,44312,33458],{"class":305},[29,44314,1215],{"class":39},[29,44316,33463],{"class":309},[29,44318,636],{"class":305},[29,44320,1215],{"class":39},[29,44322,30626],{"class":309},[29,44324,44325],{"class":31,"line":33472},[29,44326,36862],{"class":367},[29,44328,44329],{"class":31,"line":33478},[29,44330,36867],{"class":367},[29,44332,44333,44335,44337],{"class":31,"line":33484},[29,44334,36872],{"class":309},[29,44336,33496],{"class":103},[29,44338,316],{"class":309},[29,44340,44341],{"class":31,"line":33490},[29,44342,33516],{"class":367},[29,44344,44345,44347,44349,44351,44353,44355],{"class":31,"line":33501},[29,44346,33522],{"class":309},[29,44348,355],{"class":305},[29,44350,33527],{"class":309},[29,44352,33530],{"class":5391},[29,44354,355],{"class":305},[29,44356,1722],{"class":309},[29,44358,44359,44361,44363,44365],{"class":31,"line":33507},[29,44360,33540],{"class":103},[29,44362,1167],{"class":309},[29,44364,33545],{"class":39},[29,44366,33548],{"class":309},[29,44368,44369,44371],{"class":31,"line":33513},[29,44370,33554],{"class":103},[29,44372,33557],{"class":309},[29,44374,44375,44377],{"class":31,"line":33519},[29,44376,33563],{"class":103},[29,44378,33566],{"class":309},[29,44380,44381,44383],{"class":31,"line":33537},[29,44382,33572],{"class":103},[29,44384,33575],{"class":309},[29,44386,44387,44389],{"class":31,"line":33551},[29,44388,33581],{"class":103},[29,44390,33584],{"class":309},[29,44392,44393],{"class":31,"line":33560},[29,44394,33590],{"class":309},[29,44396,44397],{"class":31,"line":33569},[29,44398,33596],{"class":367},[29,44400,44401,44403],{"class":31,"line":33578},[29,44402,4265],{"class":305},[29,44404,33604],{"class":309},[29,44406,44407],{"class":31,"line":33587},[29,44408,2575],{"emptyLinePlaceholder":233},[29,44410,44411],{"class":31,"line":33593},[29,44412,33615],{"class":367},[29,44414,44415,44417,44419],{"class":31,"line":33599},[29,44416,32076],{"class":305},[29,44418,33623],{"class":35},[29,44420,33626],{"class":309},[29,44422,44423],{"class":31,"line":33607},[29,44424,33632],{"class":367},[29,44426,44427,44429,44431,44433,44435,44437,44439,44441],{"class":31,"line":33612},[29,44428,33638],{"class":309},[29,44430,31822],{"class":5391},[29,44432,355],{"class":305},[29,44434,310],{"class":309},[29,44436,806],{"class":39},[29,44438,686],{"class":309},[29,44440,601],{"class":39},[29,44442,30626],{"class":309},[29,44444,44445],{"class":31,"line":33618},[29,44446,33658],{"class":367},[29,44448,44449],{"class":31,"line":33629},[29,44450,33664],{"class":367},[29,44452,44453],{"class":31,"line":33635},[29,44454,33670],{"class":367},[29,44456,44457,44459,44461,44463,44465,44467,44469],{"class":31,"line":33655},[29,44458,31856],{"class":309},[29,44460,525],{"class":39},[29,44462,686],{"class":309},[29,44464,386],{"class":39},[29,44466,686],{"class":309},[29,44468,525],{"class":39},[29,44470,316],{"class":309},[29,44472,44473],{"class":31,"line":33661},[29,44474,33693],{"class":367},[29,44476,44477],{"class":31,"line":33667},[29,44478,33699],{"class":367},[29,44480,44481],{"class":31,"line":33673},[29,44482,33705],{"class":367},[29,44484,44485],{"class":31,"line":33690},[29,44486,33711],{"class":367},[29,44488,44489],{"class":31,"line":33696},[29,44490,33717],{"class":367},[29,44492,44493,44495,44497,44499,44501,44503,44505,44507,44509],{"class":31,"line":33702},[29,44494,33723],{"class":309},[29,44496,33726],{"class":103},[29,44498,33729],{"class":309},[29,44500,33732],{"class":103},[29,44502,686],{"class":309},[29,44504,33737],{"class":5391},[29,44506,355],{"class":305},[29,44508,33742],{"class":103},[29,44510,316],{"class":309},[29,44512,44513,44515,44517,44519,44521,44523,44525,44527,44529],{"class":31,"line":33708},[29,44514,33723],{"class":309},[29,44516,33726],{"class":103},[29,44518,33754],{"class":309},[29,44520,33757],{"class":103},[29,44522,686],{"class":309},[29,44524,33737],{"class":5391},[29,44526,355],{"class":305},[29,44528,33766],{"class":103},[29,44530,316],{"class":309},[29,44532,44533],{"class":31,"line":33714},[29,44534,33774],{"class":367},[29,44536,44537],{"class":31,"line":33720},[29,44538,33780],{"class":309},[29,44540,44541],{"class":31,"line":33747},[29,44542,33786],{"class":367},[29,44544,44545,44547,44549],{"class":31,"line":33771},[29,44546,33792],{"class":309},[29,44548,33795],{"class":103},[29,44550,316],{"class":309},[29,44552,44553,44555,44557],{"class":31,"line":33777},[29,44554,33803],{"class":309},[29,44556,33806],{"class":103},[29,44558,316],{"class":309},[29,44560,44561],{"class":31,"line":33783},[29,44562,33814],{"class":367},[29,44564,44565,44567,44569,44571,44573,44575,44577],{"class":31,"line":33789},[29,44566,31856],{"class":309},[29,44568,525],{"class":39},[29,44570,686],{"class":309},[29,44572,386],{"class":39},[29,44574,686],{"class":309},[29,44576,386],{"class":39},[29,44578,316],{"class":309},[29,44580,44581,44583,44585,44587,44589,44591,44593,44595,44597],{"class":31,"line":33800},[29,44582,33723],{"class":309},[29,44584,33726],{"class":103},[29,44586,33841],{"class":309},[29,44588,33732],{"class":103},[29,44590,686],{"class":309},[29,44592,33737],{"class":5391},[29,44594,355],{"class":305},[29,44596,33852],{"class":103},[29,44598,316],{"class":309},[29,44600,44601,44603,44605,44607,44609,44611,44613,44615,44617],{"class":31,"line":33811},[29,44602,33723],{"class":309},[29,44604,33726],{"class":103},[29,44606,33864],{"class":309},[29,44608,33757],{"class":103},[29,44610,686],{"class":309},[29,44612,33737],{"class":5391},[29,44614,355],{"class":305},[29,44616,33875],{"class":103},[29,44618,316],{"class":309},[29,44620,44621],{"class":31,"line":33817},[29,44622,33883],{"class":367},[29,44624,44625],{"class":31,"line":33834},[29,44626,33780],{"class":309},[29,44628,44629,44631,44633],{"class":31,"line":33857},[29,44630,33792],{"class":309},[29,44632,33726],{"class":103},[29,44634,316],{"class":309},[29,44636,44637,44639,44641],{"class":31,"line":33880},[29,44638,33803],{"class":309},[29,44640,33905],{"class":103},[29,44642,316],{"class":309},[29,44644,44645],{"class":31,"line":33886},[29,44646,33913],{"class":309},[29,44648,44649],{"class":31,"line":33891},[29,44650,2575],{"emptyLinePlaceholder":233},[29,44652,44653],{"class":31,"line":33900},[29,44654,33924],{"class":367},[29,44656,44657,44659,44661,44663,44665],{"class":31,"line":33910},[29,44658,1707],{"class":305},[29,44660,31349],{"class":39},[29,44662,3124],{"class":305},[29,44664,31354],{"class":103},[29,44666,3914],{"class":309},[29,44668,44669],{"class":31,"line":33916},[29,44670,33943],{"class":367},[29,44672,44673,44676,44678],{"class":31,"line":33921},[29,44674,44675],{"class":309},"    GoogLeNet",[29,44677,355],{"class":305},[29,44679,44680],{"class":309},"GoogLeNet(Inception)\n",[29,44682,44683,44685,44687],{"class":31,"line":33927},[29,44684,33960],{"class":309},[29,44686,355],{"class":305},[29,44688,33965],{"class":309},[29,44690,44691,44693,44695,44698,44700,44702,44704],{"class":31,"line":33940},[29,44692,33522],{"class":309},[29,44694,355],{"class":305},[29,44696,44697],{"class":309},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[29,44699,33978],{"class":5391},[29,44701,355],{"class":305},[29,44703,1259],{"class":39},[29,44705,316],{"class":309},[29,44707,44708],{"class":31,"line":33946},[29,44709,33990],{"class":309},[259,44711,44712],{"start":51},[178,44713,40703],{},[19,44715,44717],{"className":30507,"code":44716,"language":30509,"meta":24,"style":24},"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",[26,44718,44719,44725,44735,44745,44749,44759,44770,44774,44778,44782,44790,44806,44816,44832,44842,44856,44860,44870,44880,44890,44896,44900,44904,44912,44916,44932,44940,44944,44948,44956,44964,44968,44972,44976,44980,44986,44990,45000,45008,45016,45020,45024,45028,45036,45040,45056,45060,45064,45068,45080,45084,45096,45100,45104,45116,45120,45130,45134,45138,45150,45154,45162,45166,45170,45178,45182,45190,45194,45198,45202,45206,45210,45226,45234,45238,45242,45290,45296,45300,45310,45318,45326,45330,45334,45338,45342,45350,45354,45370,45374,45382,45390],{"__ignoreMap":24},[29,44720,44721,44723],{"class":31,"line":32},[29,44722,30521],{"class":305},[29,44724,30524],{"class":309},[29,44726,44727,44729,44731,44733],{"class":31,"line":43},[29,44728,30521],{"class":305},[29,44730,31544],{"class":309},[29,44732,31512],{"class":305},[29,44734,31549],{"class":309},[29,44736,44737,44739,44741,44743],{"class":31,"line":51},[29,44738,30866],{"class":305},[29,44740,31527],{"class":309},[29,44742,30521],{"class":305},[29,44744,31532],{"class":309},[29,44746,44747],{"class":31,"line":59},[29,44748,34051],{"class":367},[29,44750,44751,44753,44755,44757],{"class":31,"line":67},[29,44752,30866],{"class":305},[29,44754,31497],{"class":309},[29,44756,30521],{"class":305},[29,44758,31502],{"class":309},[29,44760,44761,44763,44765,44767],{"class":31,"line":75},[29,44762,30866],{"class":305},[29,44764,32043],{"class":309},[29,44766,30521],{"class":305},[29,44768,44769],{"class":309}," GoogLeNet,Inception\n",[29,44771,44772],{"class":31,"line":83},[29,44773,2575],{"emptyLinePlaceholder":233},[29,44775,44776],{"class":31,"line":158},[29,44777,2575],{"emptyLinePlaceholder":233},[29,44779,44780],{"class":31,"line":166},[29,44781,34080],{"class":367},[29,44783,44784,44786,44788],{"class":31,"line":1505},[29,44785,32076],{"class":305},[29,44787,34087],{"class":35},[29,44789,32082],{"class":309},[29,44791,44792,44794,44796,44798,44800,44802,44804],{"class":31,"line":1788},[29,44793,34094],{"class":309},[29,44795,355],{"class":305},[29,44797,31584],{"class":309},[29,44799,31587],{"class":5391},[29,44801,355],{"class":305},[29,44803,31592],{"class":103},[29,44805,31595],{"class":309},[29,44807,44808,44810,44812,44814],{"class":31,"line":1793},[29,44809,34111],{"class":5391},[29,44811,355],{"class":305},[29,44813,34116],{"class":39},[29,44815,31595],{"class":309},[29,44817,44818,44820,44822,44824,44826,44828,44830],{"class":31,"line":1799},[29,44819,34123],{"class":5391},[29,44821,355],{"class":305},[29,44823,31622],{"class":309},[29,44825,31625],{"class":5391},[29,44827,355],{"class":305},[29,44829,35578],{"class":39},[29,44831,31633],{"class":309},[29,44833,44834,44836,44838,44840],{"class":31,"line":1804},[29,44835,34140],{"class":5391},[29,44837,355],{"class":305},[29,44839,31605],{"class":39},[29,44841,316],{"class":309},[29,44843,44844,44846,44848,44850,44852,44854],{"class":31,"line":1818},[29,44845,34151],{"class":309},[29,44847,355],{"class":305},[29,44849,31663],{"class":309},[29,44851,31666],{"class":5391},[29,44853,355],{"class":305},[29,44855,34162],{"class":309},[29,44857,44858],{"class":31,"line":1823},[29,44859,34167],{"class":367},[29,44861,44862,44864,44866,44868],{"class":31,"line":1829},[29,44863,34172],{"class":5391},[29,44865,355],{"class":305},[29,44867,525],{"class":39},[29,44869,31595],{"class":309},[29,44871,44872,44874,44876,44878],{"class":31,"line":1850},[29,44873,34183],{"class":5391},[29,44875,355],{"class":305},[29,44877,31605],{"class":39},[29,44879,31595],{"class":309},[29,44881,44882,44884,44886,44888],{"class":31,"line":1855},[29,44883,34194],{"class":5391},[29,44885,355],{"class":305},[29,44887,499],{"class":39},[29,44889,316],{"class":309},[29,44891,44892,44894],{"class":31,"line":1869},[29,44893,4265],{"class":305},[29,44895,34207],{"class":309},[29,44897,44898],{"class":31,"line":1874},[29,44899,2575],{"emptyLinePlaceholder":233},[29,44901,44902],{"class":31,"line":1903},[29,44903,34216],{"class":367},[29,44905,44906,44908,44910],{"class":31,"line":1908},[29,44907,32076],{"class":305},[29,44909,34223],{"class":35},[29,44911,34226],{"class":309},[29,44913,44914],{"class":31,"line":1925},[29,44915,34231],{"class":367},[29,44917,44918,44920,44922,44924,44926,44928,44930],{"class":31,"line":1930},[29,44919,31366],{"class":309},[29,44921,355],{"class":305},[29,44923,31373],{"class":103},[29,44925,1880],{"class":305},[29,44927,31378],{"class":309},[29,44929,1877],{"class":305},[29,44931,34248],{"class":103},[29,44933,44934,44936,44938],{"class":31,"line":1935},[29,44935,31418],{"class":309},[29,44937,355],{"class":305},[29,44939,32418],{"class":309},[29,44941,44942],{"class":31,"line":1940},[29,44943,2575],{"emptyLinePlaceholder":233},[29,44945,44946],{"class":31,"line":1954},[29,44947,34265],{"class":367},[29,44949,44950,44952,44954],{"class":31,"line":1959},[29,44951,34270],{"class":309},[29,44953,355],{"class":305},[29,44955,32471],{"class":39},[29,44957,44958,44960,44962],{"class":31,"line":2752},[29,44959,34279],{"class":309},[29,44961,355],{"class":305},[29,44963,3260],{"class":39},[29,44965,44966],{"class":31,"line":2766},[29,44967,2575],{"emptyLinePlaceholder":233},[29,44969,44970],{"class":31,"line":2774},[29,44971,34292],{"class":367},[29,44973,44974],{"class":31,"line":2779},[29,44975,34297],{"class":367},[29,44977,44978],{"class":31,"line":2785},[29,44979,34302],{"class":367},[29,44981,44982,44984],{"class":31,"line":2791},[29,44983,34307],{"class":305},[29,44985,33013],{"class":309},[29,44987,44988],{"class":31,"line":2796},[29,44989,34314],{"class":367},[29,44991,44992,44994,44996,44998],{"class":31,"line":8123},[29,44993,3578],{"class":305},[29,44995,34321],{"class":309},[29,44997,26172],{"class":305},[29,44999,34326],{"class":309},[29,45001,45002,45004,45006],{"class":31,"line":8147},[29,45003,34331],{"class":309},[29,45005,355],{"class":305},[29,45007,34336],{"class":309},[29,45009,45010,45012,45014],{"class":31,"line":8152},[29,45011,34341],{"class":309},[29,45013,355],{"class":305},[29,45015,34346],{"class":309},[29,45017,45018],{"class":31,"line":8158},[29,45019,34351],{"class":367},[29,45021,45022],{"class":31,"line":8185},[29,45023,33004],{"class":309},[29,45025,45026],{"class":31,"line":8190},[29,45027,34360],{"class":367},[29,45029,45030,45032,45034],{"class":31,"line":8196},[29,45031,32789],{"class":309},[29,45033,355],{"class":305},[29,45035,34369],{"class":309},[29,45037,45038],{"class":31,"line":8208},[29,45039,34374],{"class":367},[29,45041,45042,45044,45046,45048,45050,45052,45054],{"class":31,"line":8220},[29,45043,32806],{"class":309},[29,45045,355],{"class":305},[29,45047,32811],{"class":309},[29,45049,32814],{"class":5391},[29,45051,355],{"class":305},[29,45053,525],{"class":39},[29,45055,316],{"class":309},[29,45057,45058],{"class":31,"line":8232},[29,45059,34395],{"class":367},[29,45061,45062],{"class":31,"line":9891},[29,45063,34400],{"class":367},[29,45065,45066],{"class":31,"line":9916},[29,45067,34405],{"class":367},[29,45069,45070,45072,45074,45076,45078],{"class":31,"line":9939},[29,45071,34410],{"class":309},[29,45073,9652],{"class":305},[29,45075,32916],{"class":309},[29,45077,3124],{"class":305},[29,45079,34419],{"class":309},[29,45081,45082],{"class":31,"line":9963},[29,45083,34424],{"class":367},[29,45085,45086,45088,45090,45092,45094],{"class":31,"line":9968},[29,45087,34429],{"class":309},[29,45089,9652],{"class":305},[29,45091,34434],{"class":309},[29,45093,499],{"class":39},[29,45095,316],{"class":309},[29,45097,45098],{"class":31,"line":9973},[29,45099,2575],{"emptyLinePlaceholder":233},[29,45101,45102],{"class":31,"line":9978},[29,45103,34447],{"class":367},[29,45105,45106,45108,45110,45112,45114],{"class":31,"line":9987},[29,45107,34452],{"class":309},[29,45109,355],{"class":305},[29,45111,34457],{"class":309},[29,45113,892],{"class":305},[29,45115,34462],{"class":309},[29,45117,45118],{"class":31,"line":9992},[29,45119,34467],{"class":367},[29,45121,45122,45124,45126,45128],{"class":31,"line":9998},[29,45123,32580],{"class":39},[29,45125,310],{"class":309},[29,45127,34476],{"class":103},[29,45129,34479],{"class":309},[29,45131,45132],{"class":31,"line":10019},[29,45133,2575],{"emptyLinePlaceholder":233},[29,45135,45136],{"class":31,"line":10025},[29,45137,34488],{"class":367},[29,45139,45140,45142,45144,45146,45148],{"class":31,"line":10039},[29,45141,1707],{"class":305},[29,45143,31349],{"class":39},[29,45145,3124],{"class":305},[29,45147,31354],{"class":103},[29,45149,3914],{"class":309},[29,45151,45152],{"class":31,"line":10045},[29,45153,34505],{"class":367},[29,45155,45156,45158,45160],{"class":31,"line":10072},[29,45157,31418],{"class":309},[29,45159,355],{"class":305},[29,45161,44680],{"class":309},[29,45163,45164],{"class":31,"line":10081},[29,45165,34518],{"class":367},[29,45167,45168],{"class":31,"line":10087},[29,45169,34523],{"class":367},[29,45171,45172,45174,45176],{"class":31,"line":10095},[29,45173,34528],{"class":309},[29,45175,34531],{"class":103},[29,45177,30626],{"class":309},[29,45179,45180],{"class":31,"line":10100},[29,45181,34538],{"class":367},[29,45183,45184,45186,45188],{"class":31,"line":16779},[29,45185,34151],{"class":309},[29,45187,355],{"class":305},[29,45189,34547],{"class":309},[29,45191,45192],{"class":31,"line":16785},[29,45193,34552],{"class":367},[29,45195,45196],{"class":31,"line":16808},[29,45197,34557],{"class":309},[29,45199,45200],{"class":31,"line":16814},[29,45201,2575],{"emptyLinePlaceholder":233},[29,45203,45204],{"class":31,"line":16837},[29,45205,34566],{"class":367},[29,45207,45208],{"class":31,"line":16851},[29,45209,34571],{"class":367},[29,45211,45212,45214,45216,45218,45220,45222,45224],{"class":31,"line":16871},[29,45213,31366],{"class":309},[29,45215,355],{"class":305},[29,45217,31373],{"class":103},[29,45219,1880],{"class":305},[29,45221,31378],{"class":309},[29,45223,1877],{"class":305},[29,45225,34248],{"class":103},[29,45227,45228,45230,45232],{"class":31,"line":16877},[29,45229,31418],{"class":309},[29,45231,355],{"class":305},[29,45233,32418],{"class":309},[29,45235,45236],{"class":31,"line":16888},[29,45237,34600],{"class":367},[29,45239,45240],{"class":31,"line":16911},[29,45241,34605],{"class":367},[29,45243,45244,45246,45248,45250,45252,45254,45256,45258,45260,45262,45264,45266,45268,45270,45272,45274,45276,45278,45280,45282,45284,45286,45288],{"class":31,"line":16933},[29,45245,34610],{"class":309},[29,45247,355],{"class":305},[29,45249,1198],{"class":309},[29,45251,34617],{"class":103},[29,45253,686],{"class":309},[29,45255,34622],{"class":103},[29,45257,686],{"class":309},[29,45259,34627],{"class":103},[29,45261,686],{"class":309},[29,45263,34632],{"class":103},[29,45265,686],{"class":309},[29,45267,34637],{"class":103},[29,45269,686],{"class":309},[29,45271,34642],{"class":103},[29,45273,686],{"class":309},[29,45275,34647],{"class":103},[29,45277,686],{"class":309},[29,45279,34652],{"class":103},[29,45281,686],{"class":309},[29,45283,34657],{"class":103},[29,45285,686],{"class":309},[29,45287,34662],{"class":103},[29,45289,33375],{"class":309},[29,45291,45292,45294],{"class":31,"line":16938},[29,45293,34307],{"class":305},[29,45295,33013],{"class":309},[29,45297,45298],{"class":31,"line":16944},[29,45299,34675],{"class":367},[29,45301,45302,45304,45306,45308],{"class":31,"line":16958},[29,45303,3578],{"class":305},[29,45305,34682],{"class":309},[29,45307,26172],{"class":305},[29,45309,34326],{"class":309},[29,45311,45312,45314,45316],{"class":31,"line":16971},[29,45313,32739],{"class":309},[29,45315,355],{"class":305},[29,45317,32744],{"class":309},[29,45319,45320,45322,45324],{"class":31,"line":16976},[29,45321,32754],{"class":309},[29,45323,355],{"class":305},[29,45325,32759],{"class":309},[29,45327,45328],{"class":31,"line":16990},[29,45329,2575],{"emptyLinePlaceholder":233},[29,45331,45332],{"class":31,"line":16995},[29,45333,34711],{"class":367},[29,45335,45336],{"class":31,"line":17001},[29,45337,33004],{"class":309},[29,45339,45340],{"class":31,"line":17006},[29,45341,34720],{"class":367},[29,45343,45344,45346,45348],{"class":31,"line":17020},[29,45345,32789],{"class":309},[29,45347,355],{"class":305},[29,45349,32794],{"class":309},[29,45351,45352],{"class":31,"line":17025},[29,45353,34733],{"class":367},[29,45355,45356,45358,45360,45362,45364,45366,45368],{"class":31,"line":17030},[29,45357,32806],{"class":309},[29,45359,355],{"class":305},[29,45361,32811],{"class":309},[29,45363,32814],{"class":5391},[29,45365,355],{"class":305},[29,45367,525],{"class":39},[29,45369,316],{"class":309},[29,45371,45372],{"class":31,"line":17044},[29,45373,34754],{"class":367},[29,45375,45376,45378,45380],{"class":31,"line":17056},[29,45377,34759],{"class":309},[29,45379,355],{"class":305},[29,45381,34764],{"class":309},[29,45383,45384,45386,45388],{"class":31,"line":17061},[29,45385,34769],{"class":309},[29,45387,355],{"class":305},[29,45389,34774],{"class":309},[29,45391,45392,45394,45396,45398,45400,45402,45404,45406],{"class":31,"line":17074},[29,45393,34779],{"class":39},[29,45395,310],{"class":309},[29,45397,34784],{"class":103},[29,45399,34787],{"class":309},[29,45401,34790],{"class":103},[29,45403,686],{"class":309},[29,45405,34795],{"class":103},[29,45407,34798],{"class":309},[275,45409,45411],{"id":45410},"_24训练自己的数据集","2.4.训练自己的数据集",[171,45413,45414],{},"猫狗分类任务",[171,45416,45417],{},"划分数据集和验证集",[19,45419,45421],{"className":30507,"code":45420,"language":30509,"meta":24,"style":24},"# 创建脚本，用于划分数据集和验证集\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",[26,45422,45423,45428,45435,45440,45451,45458,45462,45472,45486,45495,45499,45504,45514,45534,45538,45543,45553,45564,45577,45581,45586,45595,45605,45616,45620,45625,45635,45639,45644,45649,45654,45659,45664,45668,45678,45705,45718,45730,45757,45762,45767,45781,45786,45798,45813,45828,45836,45840,45845,45851,45863,45876,45881,45886,45891,45941,45947,45951],{"__ignoreMap":24},[29,45424,45425],{"class":31,"line":32},[29,45426,45427],{"class":367},"# 创建脚本，用于划分数据集和验证集\n",[29,45429,45430,45432],{"class":31,"line":43},[29,45431,30521],{"class":305},[29,45433,45434],{"class":309}," os\n",[29,45436,45437],{"class":31,"line":51},[29,45438,45439],{"class":367},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[29,45441,45442,45444,45447,45449],{"class":31,"line":59},[29,45443,30866],{"class":305},[29,45445,45446],{"class":309}," shutil ",[29,45448,30521],{"class":305},[29,45450,31951],{"class":309},[29,45452,45453,45455],{"class":31,"line":67},[29,45454,30521],{"class":305},[29,45456,45457],{"class":309}," random\n",[29,45459,45460],{"class":31,"line":75},[29,45461,2575],{"emptyLinePlaceholder":233},[29,45463,45464,45466,45469],{"class":31,"line":83},[29,45465,32076],{"class":305},[29,45467,45468],{"class":35}," mkfile",[29,45470,45471],{"class":309},"(file):\n",[29,45473,45474,45476,45478,45481,45484],{"class":31,"line":158},[29,45475,3276],{"class":305},[29,45477,39059],{"class":305},[29,45479,45480],{"class":309}," os.path.exists(",[29,45482,45483],{"class":5391},"file",[29,45485,30915],{"class":309},[29,45487,45488,45491,45493],{"class":31,"line":166},[29,45489,45490],{"class":309},"        os.makedirs(",[29,45492,45483],{"class":5391},[29,45494,316],{"class":309},[29,45496,45497],{"class":31,"line":1505},[29,45498,2575],{"emptyLinePlaceholder":233},[29,45500,45501],{"class":31,"line":1788},[29,45502,45503],{"class":367},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[29,45505,45506,45509,45511],{"class":31,"line":1793},[29,45507,45508],{"class":309},"file_path",[29,45510,355],{"class":305},[29,45512,45513],{"class":103},"'data_cat_dog'\n",[29,45515,45516,45519,45521,45524,45526,45529,45531],{"class":31,"line":1799},[29,45517,45518],{"class":309},"flower_class",[29,45520,355],{"class":305},[29,45522,45523],{"class":309},"[cla ",[29,45525,3200],{"class":305},[29,45527,45528],{"class":309}," cla ",[29,45530,26172],{"class":305},[29,45532,45533],{"class":309}," os.listdir(file_path)]\n",[29,45535,45536],{"class":31,"line":1804},[29,45537,2575],{"emptyLinePlaceholder":233},[29,45539,45540],{"class":31,"line":1818},[29,45541,45542],{"class":367},"# 创建训练集train文件夹\n",[29,45544,45545,45548,45551],{"class":31,"line":1823},[29,45546,45547],{"class":309},"mkfile(",[29,45549,45550],{"class":103},"'data\u002Ftrain'",[29,45552,316],{"class":309},[29,45554,45555,45557,45559,45561],{"class":31,"line":1829},[29,45556,3200],{"class":305},[29,45558,45528],{"class":309},[29,45560,26172],{"class":305},[29,45562,45563],{"class":309}," flower_class:\n",[29,45565,45566,45569,45572,45574],{"class":31,"line":1850},[29,45567,45568],{"class":309},"    mkfile(",[29,45570,45571],{"class":103},"'data\u002Ftrain\u002F'",[29,45573,789],{"class":305},[29,45575,45576],{"class":309},"cla)\n",[29,45578,45579],{"class":31,"line":1855},[29,45580,2575],{"emptyLinePlaceholder":233},[29,45582,45583],{"class":31,"line":1869},[29,45584,45585],{"class":367},"# 创建验证集val文件夹\n",[29,45587,45588,45590,45593],{"class":31,"line":1874},[29,45589,45547],{"class":309},[29,45591,45592],{"class":103},"'data\u002Ftest'",[29,45594,316],{"class":309},[29,45596,45597,45599,45601,45603],{"class":31,"line":1903},[29,45598,3200],{"class":305},[29,45600,45528],{"class":309},[29,45602,26172],{"class":305},[29,45604,45563],{"class":309},[29,45606,45607,45609,45612,45614],{"class":31,"line":1908},[29,45608,45568],{"class":309},[29,45610,45611],{"class":103},"'data\u002Ftest\u002F'",[29,45613,789],{"class":305},[29,45615,45576],{"class":309},[29,45617,45618],{"class":31,"line":1925},[29,45619,2575],{"emptyLinePlaceholder":233},[29,45621,45622],{"class":31,"line":1930},[29,45623,45624],{"class":367},"# 划分比例，训练集：测试集=9：1\n",[29,45626,45627,45630,45632],{"class":31,"line":1935},[29,45628,45629],{"class":309},"split_rate",[29,45631,355],{"class":305},[29,45633,45634],{"class":39},"0.1\n",[29,45636,45637],{"class":31,"line":1940},[29,45638,2575],{"emptyLinePlaceholder":233},[29,45640,45641],{"class":31,"line":1954},[29,45642,45643],{"class":367},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[29,45645,45646],{"class":31,"line":1959},[29,45647,45648],{"class":367},"# cla_path：当前类别的原始图片路径\n",[29,45650,45651],{"class":31,"line":2752},[29,45652,45653],{"class":367},"# images：当前类别下所有图片的文件名列表\n",[29,45655,45656],{"class":31,"line":2766},[29,45657,45658],{"class":367},"# num：该类别图片总数\n",[29,45660,45661],{"class":31,"line":2774},[29,45662,45663],{"class":367},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[29,45665,45666],{"class":31,"line":2779},[29,45667,2575],{"emptyLinePlaceholder":233},[29,45669,45670,45672,45674,45676],{"class":31,"line":2785},[29,45671,3200],{"class":305},[29,45673,45528],{"class":309},[29,45675,26172],{"class":305},[29,45677,45563],{"class":309},[29,45679,45680,45683,45685,45688,45690,45693,45696,45698,45700,45702],{"class":31,"line":2791},[29,45681,45682],{"class":309},"    cla_path ",[29,45684,355],{"class":305},[29,45686,45687],{"class":309}," file_path ",[29,45689,789],{"class":305},[29,45691,45692],{"class":103}," '\u002F'",[29,45694,45695],{"class":305}," +",[29,45697,45528],{"class":309},[29,45699,789],{"class":305},[29,45701,45692],{"class":103},[29,45703,45704],{"class":367},"  # 某一类别的子目录\n",[29,45706,45707,45710,45712,45715],{"class":31,"line":2796},[29,45708,45709],{"class":309},"    images ",[29,45711,355],{"class":305},[29,45713,45714],{"class":309}," os.listdir(cla_path)  ",[29,45716,45717],{"class":367},"# iamges 列表存储了该目录下所有图像的名称\n",[29,45719,45720,45723,45725,45727],{"class":31,"line":8123},[29,45721,45722],{"class":309},"    num ",[29,45724,355],{"class":305},[29,45726,7506],{"class":39},[29,45728,45729],{"class":309},"(images)\n",[29,45731,45732,45735,45737,45740,45742,45744,45746,45749,45751,45754],{"class":31,"line":8147},[29,45733,45734],{"class":309},"    eval_index ",[29,45736,355],{"class":305},[29,45738,45739],{"class":309}," random.sample(images, ",[29,45741,801],{"class":5391},[29,45743,355],{"class":305},[29,45745,313],{"class":39},[29,45747,45748],{"class":309},"(num ",[29,45750,763],{"class":305},[29,45752,45753],{"class":309}," split_rate))  ",[29,45755,45756],{"class":367},"# 从images列表中随机抽取 k 个图像名称\n",[29,45758,45759],{"class":31,"line":8152},[29,45760,45761],{"class":367},"    # 遍历该类别下的所有图片\n",[29,45763,45764],{"class":31,"line":8158},[29,45765,45766],{"class":367},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[29,45768,45769,45771,45774,45776,45778],{"class":31,"line":8185},[29,45770,3376],{"class":305},[29,45772,45773],{"class":309}," index, image ",[29,45775,26172],{"class":305},[29,45777,31735],{"class":39},[29,45779,45780],{"class":309},"(images):\n",[29,45782,45783],{"class":31,"line":8190},[29,45784,45785],{"class":367},"        # eval_index 中保存验证集val的图像名称\n",[29,45787,45788,45790,45793,45795],{"class":31,"line":8196},[29,45789,2672],{"class":305},[29,45791,45792],{"class":309}," image ",[29,45794,26172],{"class":305},[29,45796,45797],{"class":309}," eval_index:\n",[29,45799,45800,45803,45805,45808,45810],{"class":31,"line":8208},[29,45801,45802],{"class":309},"            image_path ",[29,45804,355],{"class":305},[29,45806,45807],{"class":309}," cla_path ",[29,45809,789],{"class":305},[29,45811,45812],{"class":309}," image\n",[29,45814,45815,45818,45820,45823,45825],{"class":31,"line":8220},[29,45816,45817],{"class":309},"            new_path ",[29,45819,355],{"class":305},[29,45821,45822],{"class":103}," 'data\u002Ftest\u002F'",[29,45824,45695],{"class":305},[29,45826,45827],{"class":309}," cla\n",[29,45829,45830,45833],{"class":31,"line":8232},[29,45831,45832],{"class":309},"            copy(image_path, new_path)  ",[29,45834,45835],{"class":367},"# 将选中的图像复制到新路径\n",[29,45837,45838],{"class":31,"line":9891},[29,45839,2575],{"emptyLinePlaceholder":233},[29,45841,45842],{"class":31,"line":9916},[29,45843,45844],{"class":367},"        # 其余的图像保存在训练集train中\n",[29,45846,45847,45849],{"class":31,"line":9939},[29,45848,2709],{"class":305},[29,45850,3914],{"class":309},[29,45852,45853,45855,45857,45859,45861],{"class":31,"line":9963},[29,45854,45802],{"class":309},[29,45856,355],{"class":305},[29,45858,45807],{"class":309},[29,45860,789],{"class":305},[29,45862,45812],{"class":309},[29,45864,45865,45867,45869,45872,45874],{"class":31,"line":9968},[29,45866,45817],{"class":309},[29,45868,355],{"class":305},[29,45870,45871],{"class":103}," 'data\u002Ftrain\u002F'",[29,45873,45695],{"class":305},[29,45875,45827],{"class":309},[29,45877,45878],{"class":31,"line":9973},[29,45879,45880],{"class":309},"            copy(image_path, new_path)\n",[29,45882,45883],{"class":31,"line":9978},[29,45884,45885],{"class":367},"            # 打印进度条信息\n",[29,45887,45888],{"class":31,"line":9987},[29,45889,45890],{"class":367},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[29,45892,45893,45895,45897,45899,45902,45904,45906,45909,45911,45913,45915,45918,45921,45923,45925,45928,45931,45933,45935,45938],{"class":31,"line":9992},[29,45894,32580],{"class":39},[29,45896,310],{"class":309},[29,45898,559],{"class":103},[29,45900,45901],{"class":39},"\\r",[29,45903,1198],{"class":103},[29,45905,32588],{"class":39},[29,45907,45908],{"class":103},"] processing [",[29,45910,32588],{"class":39},[29,45912,892],{"class":103},[29,45914,32588],{"class":39},[29,45916,45917],{"class":103},"]\"",[29,45919,45920],{"class":309},".format(cla, index ",[29,45922,789],{"class":305},[29,45924,25247],{"class":39},[29,45926,45927],{"class":309},", num), ",[29,45929,45930],{"class":5391},"end",[29,45932,355],{"class":305},[29,45934,7827],{"class":103},[29,45936,45937],{"class":309},")  ",[29,45939,45940],{"class":367},"# processing bar\n",[29,45942,45943,45945],{"class":31,"line":9998},[29,45944,31428],{"class":39},[29,45946,2151],{"class":309},[29,45948,45949],{"class":31,"line":10019},[29,45950,2575],{"emptyLinePlaceholder":233},[29,45952,45953,45955,45957,45960],{"class":31,"line":10025},[29,45954,30544],{"class":39},[29,45956,310],{"class":309},[29,45958,45959],{"class":103},"\"processing done!\"",[29,45961,316],{"class":309},[171,45963,45964],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22173,45966,45968],{"id":45967},"_242模型代码","2.4.2.模型代码",[171,45970,45971],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[19,45973,45975],{"className":30507,"code":45974,"language":30509,"meta":24,"style":24},"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",[26,45976,45977,45983,45993,46003,46007,46023,46031,46045,46055,46059,46089,46093,46127,46173,46177,46211,46257,46261,46265,46299,46329,46333,46341,46355,46377,46399,46417,46421,46435,46439,46443,46459,46463,46471,46485,46495,46539,46543,46571,46575,46585,46613,46617,46653,46657,46685,46689,46699,46731,46763,46791,46795,46805,46837,46869,46901,46933,46965,46993,46997,47007,47039,47071,47083,47087,47099,47103,47107,47119,47127,47147,47151,47155,47159,47163,47167,47171,47185,47193,47201,47213,47227,47235,47239,47247,47257,47267,47277,47287,47297,47303,47307,47311,47323,47343,47351],{"__ignoreMap":24},[29,45978,45979,45981],{"class":31,"line":32},[29,45980,30521],{"class":305},[29,45982,30524],{"class":309},[29,45984,45985,45987,45989,45991],{"class":31,"line":43},[29,45986,30866],{"class":305},[29,45988,30869],{"class":309},[29,45990,30521],{"class":305},[29,45992,30874],{"class":309},[29,45994,45995,45997,45999,46001],{"class":31,"line":51},[29,45996,30866],{"class":305},[29,45998,30886],{"class":309},[29,46000,30521],{"class":305},[29,46002,30891],{"class":309},[29,46004,46005],{"class":31,"line":59},[29,46006,2575],{"emptyLinePlaceholder":233},[29,46008,46009,46011,46013,46015,46017,46019,46021],{"class":31,"line":67},[29,46010,14869],{"class":305},[29,46012,41622],{"class":35},[29,46014,310],{"class":309},[29,46016,30907],{"class":35},[29,46018,866],{"class":309},[29,46020,30912],{"class":35},[29,46022,30915],{"class":309},[29,46024,46025,46027,46029],{"class":31,"line":75},[29,46026,30930],{"class":305},[29,46028,30933],{"class":39},[29,46030,41641],{"class":309},[29,46032,46033,46035,46037,46039,46041,46043],{"class":31,"line":83},[29,46034,30946],{"class":39},[29,46036,41648],{"class":309},[29,46038,30952],{"class":39},[29,46040,30955],{"class":309},[29,46042,30958],{"class":39},[29,46044,2151],{"class":309},[29,46046,46047,46049,46051,46053],{"class":31,"line":158},[29,46048,30974],{"class":39},[29,46050,34900],{"class":309},[29,46052,355],{"class":305},[29,46054,34905],{"class":309},[29,46056,46057],{"class":31,"line":166},[29,46058,41671],{"class":367},[29,46060,46061,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087],{"class":31,"line":1505},[29,46062,30974],{"class":39},[29,46064,41678],{"class":309},[29,46066,355],{"class":305},[29,46068,30982],{"class":309},[29,46070,30985],{"class":5391},[29,46072,355],{"class":305},[29,46074,41689],{"class":309},[29,46076,30994],{"class":5391},[29,46078,355],{"class":305},[29,46080,41696],{"class":309},[29,46082,31003],{"class":5391},[29,46084,355],{"class":305},[29,46086,525],{"class":39},[29,46088,316],{"class":309},[29,46090,46091],{"class":31,"line":1788},[29,46092,41709],{"class":367},[29,46094,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125],{"class":31,"line":1793},[29,46096,30974],{"class":39},[29,46098,41716],{"class":309},[29,46100,355],{"class":305},[29,46102,30982],{"class":309},[29,46104,30985],{"class":5391},[29,46106,355],{"class":305},[29,46108,41689],{"class":309},[29,46110,30994],{"class":5391},[29,46112,355],{"class":305},[29,46114,41733],{"class":309},[29,46116,499],{"class":39},[29,46118,41738],{"class":309},[29,46120,31003],{"class":5391},[29,46122,355],{"class":305},[29,46124,525],{"class":39},[29,46126,316],{"class":309},[29,46128,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171],{"class":31,"line":1799},[29,46130,30974],{"class":39},[29,46132,41753],{"class":309},[29,46134,355],{"class":305},[29,46136,30982],{"class":309},[29,46138,30985],{"class":5391},[29,46140,355],{"class":305},[29,46142,41733],{"class":309},[29,46144,499],{"class":39},[29,46146,41738],{"class":309},[29,46148,30994],{"class":5391},[29,46150,355],{"class":305},[29,46152,41733],{"class":309},[29,46154,525],{"class":39},[29,46156,41738],{"class":309},[29,46158,31003],{"class":5391},[29,46160,355],{"class":305},[29,46162,380],{"class":39},[29,46164,686],{"class":309},[29,46166,31012],{"class":5391},[29,46168,355],{"class":305},[29,46170,525],{"class":39},[29,46172,316],{"class":309},[29,46174,46175],{"class":31,"line":1804},[29,46176,41798],{"class":367},[29,46178,46179,46181,46183,46185,46187,46189,46191,46193,46195,46197,46199,46201,46203,46205,46207,46209],{"class":31,"line":1818},[29,46180,30974],{"class":39},[29,46182,41805],{"class":309},[29,46184,355],{"class":305},[29,46186,30982],{"class":309},[29,46188,30985],{"class":5391},[29,46190,355],{"class":305},[29,46192,41689],{"class":309},[29,46194,30994],{"class":5391},[29,46196,355],{"class":305},[29,46198,41822],{"class":309},[29,46200,499],{"class":39},[29,46202,41738],{"class":309},[29,46204,31003],{"class":5391},[29,46206,355],{"class":305},[29,46208,525],{"class":39},[29,46210,316],{"class":309},[29,46212,46213,46215,46217,46219,46221,46223,46225,46227,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249,46251,46253,46255],{"class":31,"line":1823},[29,46214,30974],{"class":39},[29,46216,41841],{"class":309},[29,46218,355],{"class":305},[29,46220,30982],{"class":309},[29,46222,30985],{"class":5391},[29,46224,355],{"class":305},[29,46226,41822],{"class":309},[29,46228,499],{"class":39},[29,46230,41738],{"class":309},[29,46232,30994],{"class":5391},[29,46234,355],{"class":305},[29,46236,41822],{"class":309},[29,46238,525],{"class":39},[29,46240,41738],{"class":309},[29,46242,31003],{"class":5391},[29,46244,355],{"class":305},[29,46246,627],{"class":39},[29,46248,686],{"class":309},[29,46250,31012],{"class":5391},[29,46252,355],{"class":305},[29,46254,386],{"class":39},[29,46256,316],{"class":309},[29,46258,46259],{"class":31,"line":1829},[29,46260,41886],{"class":367},[29,46262,46263],{"class":31,"line":1850},[29,46264,41891],{"class":367},[29,46266,46267,46269,46271,46273,46275,46277,46279,46281,46283,46285,46287,46289,46291,46293,46295,46297],{"class":31,"line":1855},[29,46268,30974],{"class":39},[29,46270,41898],{"class":309},[29,46272,355],{"class":305},[29,46274,34958],{"class":309},[29,46276,31003],{"class":5391},[29,46278,355],{"class":305},[29,46280,380],{"class":39},[29,46282,686],{"class":309},[29,46284,31058],{"class":5391},[29,46286,355],{"class":305},[29,46288,525],{"class":39},[29,46290,686],{"class":309},[29,46292,31012],{"class":5391},[29,46294,355],{"class":305},[29,46296,525],{"class":39},[29,46298,316],{"class":309},[29,46300,46301,46303,46305,46307,46309,46311,46313,46315,46317,46319,46321,46323,46325,46327],{"class":31,"line":1869},[29,46302,30974],{"class":39},[29,46304,41933],{"class":309},[29,46306,355],{"class":305},[29,46308,30982],{"class":309},[29,46310,30985],{"class":5391},[29,46312,355],{"class":305},[29,46314,41689],{"class":309},[29,46316,30994],{"class":5391},[29,46318,355],{"class":305},[29,46320,41950],{"class":309},[29,46322,31003],{"class":5391},[29,46324,355],{"class":305},[29,46326,525],{"class":39},[29,46328,316],{"class":309},[29,46330,46331],{"class":31,"line":1874},[29,46332,2575],{"emptyLinePlaceholder":233},[29,46334,46335,46337,46339],{"class":31,"line":1903},[29,46336,30930],{"class":305},[29,46338,31222],{"class":35},[29,46340,31225],{"class":309},[29,46342,46343,46345,46347,46349,46351,46353],{"class":31,"line":1908},[29,46344,41975],{"class":309},[29,46346,355],{"class":305},[29,46348,30952],{"class":39},[29,46350,35313],{"class":309},[29,46352,30952],{"class":39},[29,46354,41986],{"class":309},[29,46356,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375],{"class":31,"line":1925},[29,46358,7260],{"class":309},[29,46360,355],{"class":305},[29,46362,30952],{"class":39},[29,46364,35313],{"class":309},[29,46366,30952],{"class":39},[29,46368,42001],{"class":309},[29,46370,30952],{"class":39},[29,46372,35313],{"class":309},[29,46374,30952],{"class":39},[29,46376,42010],{"class":309},[29,46378,46379,46381,46383,46385,46387,46389,46391,46393,46395,46397],{"class":31,"line":1930},[29,46380,42015],{"class":309},[29,46382,355],{"class":305},[29,46384,30952],{"class":39},[29,46386,35313],{"class":309},[29,46388,30952],{"class":39},[29,46390,42026],{"class":309},[29,46392,30952],{"class":39},[29,46394,35313],{"class":309},[29,46396,30952],{"class":39},[29,46398,42035],{"class":309},[29,46400,46401,46403,46405,46407,46409,46411,46413,46415],{"class":31,"line":1935},[29,46402,42040],{"class":309},[29,46404,355],{"class":305},[29,46406,30952],{"class":39},[29,46408,35313],{"class":309},[29,46410,30952],{"class":39},[29,46412,42051],{"class":309},[29,46414,30952],{"class":39},[29,46416,42056],{"class":309},[29,46418,46419],{"class":31,"line":1940},[29,46420,42061],{"class":367},[29,46422,46423,46425,46427,46429,46431,46433],{"class":31,"line":1954},[29,46424,14927],{"class":305},[29,46426,42068],{"class":309},[29,46428,32814],{"class":5391},[29,46430,355],{"class":305},[29,46432,525],{"class":39},[29,46434,316],{"class":309},[29,46436,46437],{"class":31,"line":1959},[29,46438,2575],{"emptyLinePlaceholder":233},[29,46440,46441],{"class":31,"line":2752},[29,46442,42089],{"class":367},[29,46444,46445,46447,46449,46451,46453,46455,46457],{"class":31,"line":2766},[29,46446,14869],{"class":305},[29,46448,42096],{"class":35},[29,46450,310],{"class":309},[29,46452,30907],{"class":35},[29,46454,866],{"class":309},[29,46456,30912],{"class":35},[29,46458,30915],{"class":309},[29,46460,46461],{"class":31,"line":2774},[29,46462,42111],{"class":367},[29,46464,46465,46467,46469],{"class":31,"line":2779},[29,46466,30930],{"class":305},[29,46468,30933],{"class":39},[29,46470,42120],{"class":309},[29,46472,46473,46475,46477,46479,46481,46483],{"class":31,"line":2785},[29,46474,30946],{"class":39},[29,46476,42127],{"class":309},[29,46478,30952],{"class":39},[29,46480,30955],{"class":309},[29,46482,30958],{"class":39},[29,46484,2151],{"class":309},[29,46486,46487,46489,46491,46493],{"class":31,"line":2791},[29,46488,30974],{"class":39},[29,46490,42142],{"class":309},[29,46492,355],{"class":305},[29,46494,38138],{"class":309},[29,46496,46497,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537],{"class":31,"line":2796},[29,46498,38143],{"class":309},[29,46500,30985],{"class":5391},[29,46502,355],{"class":305},[29,46504,380],{"class":39},[29,46506,686],{"class":309},[29,46508,30994],{"class":5391},[29,46510,355],{"class":305},[29,46512,511],{"class":39},[29,46514,686],{"class":309},[29,46516,31003],{"class":5391},[29,46518,355],{"class":305},[29,46520,677],{"class":39},[29,46522,686],{"class":309},[29,46524,31058],{"class":5391},[29,46526,355],{"class":305},[29,46528,386],{"class":39},[29,46530,686],{"class":309},[29,46532,31012],{"class":5391},[29,46534,355],{"class":305},[29,46536,380],{"class":39},[29,46538,38176],{"class":309},[29,46540,46541],{"class":31,"line":8123},[29,46542,38181],{"class":309},[29,46544,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565,46567,46569],{"class":31,"line":8147},[29,46546,38226],{"class":309},[29,46548,31003],{"class":5391},[29,46550,355],{"class":305},[29,46552,380],{"class":39},[29,46554,686],{"class":309},[29,46556,31058],{"class":5391},[29,46558,355],{"class":305},[29,46560,386],{"class":39},[29,46562,686],{"class":309},[29,46564,31012],{"class":5391},[29,46566,355],{"class":305},[29,46568,525],{"class":39},[29,46570,316],{"class":309},[29,46572,46573],{"class":31,"line":8152},[29,46574,38255],{"class":309},[29,46576,46577,46579,46581,46583],{"class":31,"line":8158},[29,46578,30974],{"class":39},[29,46580,42233],{"class":309},[29,46582,355],{"class":305},[29,46584,38138],{"class":309},[29,46586,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611],{"class":31,"line":8185},[29,46588,38143],{"class":309},[29,46590,30985],{"class":5391},[29,46592,355],{"class":305},[29,46594,511],{"class":39},[29,46596,686],{"class":309},[29,46598,30994],{"class":5391},[29,46600,355],{"class":305},[29,46602,511],{"class":39},[29,46604,686],{"class":309},[29,46606,31003],{"class":5391},[29,46608,355],{"class":305},[29,46610,525],{"class":39},[29,46612,38176],{"class":309},[29,46614,46615],{"class":31,"line":8190},[29,46616,38181],{"class":309},[29,46618,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651],{"class":31,"line":8196},[29,46620,38143],{"class":309},[29,46622,30985],{"class":5391},[29,46624,355],{"class":305},[29,46626,511],{"class":39},[29,46628,686],{"class":309},[29,46630,30994],{"class":5391},[29,46632,355],{"class":305},[29,46634,42288],{"class":39},[29,46636,686],{"class":309},[29,46638,31003],{"class":5391},[29,46640,355],{"class":305},[29,46642,380],{"class":39},[29,46644,686],{"class":309},[29,46646,31012],{"class":5391},[29,46648,355],{"class":305},[29,46650,525],{"class":39},[29,46652,38176],{"class":309},[29,46654,46655],{"class":31,"line":8208},[29,46656,38181],{"class":309},[29,46658,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683],{"class":31,"line":8220},[29,46660,38226],{"class":309},[29,46662,31003],{"class":5391},[29,46664,355],{"class":305},[29,46666,380],{"class":39},[29,46668,686],{"class":309},[29,46670,31058],{"class":5391},[29,46672,355],{"class":305},[29,46674,386],{"class":39},[29,46676,686],{"class":309},[29,46678,31012],{"class":5391},[29,46680,355],{"class":305},[29,46682,525],{"class":39},[29,46684,316],{"class":309},[29,46686,46687],{"class":31,"line":8232},[29,46688,38255],{"class":309},[29,46690,46691,46693,46695,46697],{"class":31,"line":9891},[29,46692,30974],{"class":39},[29,46694,42349],{"class":309},[29,46696,355],{"class":305},[29,46698,38138],{"class":309},[29,46700,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729],{"class":31,"line":9916},[29,46702,42358],{"class":309},[29,46704,42288],{"class":39},[29,46706,686],{"class":309},[29,46708,511],{"class":39},[29,46710,42367],{"class":309},[29,46712,517],{"class":39},[29,46714,686],{"class":309},[29,46716,32199],{"class":39},[29,46718,42376],{"class":309},[29,46720,909],{"class":39},[29,46722,686],{"class":309},[29,46724,505],{"class":39},[29,46726,42385],{"class":309},[29,46728,505],{"class":39},[29,46730,38176],{"class":309},[29,46732,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761],{"class":31,"line":9939},[29,46734,42358],{"class":309},[29,46736,34999],{"class":39},[29,46738,686],{"class":309},[29,46740,32199],{"class":39},[29,46742,42367],{"class":309},[29,46744,32199],{"class":39},[29,46746,686],{"class":309},[29,46748,42288],{"class":39},[29,46750,42376],{"class":309},[29,46752,505],{"class":39},[29,46754,686],{"class":309},[29,46756,517],{"class":39},[29,46758,42385],{"class":309},[29,46760,511],{"class":39},[29,46762,38176],{"class":309},[29,46764,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789],{"class":31,"line":9963},[29,46766,38226],{"class":309},[29,46768,31003],{"class":5391},[29,46770,355],{"class":305},[29,46772,380],{"class":39},[29,46774,686],{"class":309},[29,46776,31058],{"class":5391},[29,46778,355],{"class":305},[29,46780,386],{"class":39},[29,46782,686],{"class":309},[29,46784,31012],{"class":5391},[29,46786,355],{"class":305},[29,46788,525],{"class":39},[29,46790,316],{"class":309},[29,46792,46793],{"class":31,"line":9968},[29,46794,38255],{"class":309},[29,46796,46797,46799,46801,46803],{"class":31,"line":9973},[29,46798,30974],{"class":39},[29,46800,42460],{"class":309},[29,46802,355],{"class":305},[29,46804,38138],{"class":309},[29,46806,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835],{"class":31,"line":9978},[29,46808,42358],{"class":309},[29,46810,42471],{"class":39},[29,46812,686],{"class":309},[29,46814,42288],{"class":39},[29,46816,42367],{"class":309},[29,46818,517],{"class":39},[29,46820,686],{"class":309},[29,46822,42484],{"class":39},[29,46824,42376],{"class":309},[29,46826,909],{"class":39},[29,46828,686],{"class":309},[29,46830,915],{"class":39},[29,46832,42385],{"class":309},[29,46834,511],{"class":39},[29,46836,38176],{"class":309},[29,46838,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867],{"class":31,"line":9987},[29,46840,42358],{"class":309},[29,46842,38586],{"class":39},[29,46844,686],{"class":309},[29,46846,21223],{"class":39},[29,46848,42367],{"class":309},[29,46850,926],{"class":39},[29,46852,686],{"class":309},[29,46854,31630],{"class":39},[29,46856,42376],{"class":309},[29,46858,1108],{"class":39},[29,46860,686],{"class":309},[29,46862,511],{"class":39},[29,46864,42385],{"class":309},[29,46866,511],{"class":39},[29,46868,38176],{"class":309},[29,46870,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899],{"class":31,"line":9992},[29,46872,42358],{"class":309},[29,46874,38586],{"class":39},[29,46876,686],{"class":309},[29,46878,32199],{"class":39},[29,46880,42367],{"class":309},[29,46882,32199],{"class":39},[29,46884,686],{"class":309},[29,46886,34999],{"class":39},[29,46888,42376],{"class":309},[29,46890,1108],{"class":39},[29,46892,686],{"class":309},[29,46894,511],{"class":39},[29,46896,42385],{"class":309},[29,46898,511],{"class":39},[29,46900,38176],{"class":309},[29,46902,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931],{"class":31,"line":9998},[29,46904,42358],{"class":309},[29,46906,38586],{"class":39},[29,46908,686],{"class":309},[29,46910,926],{"class":39},[29,46912,42367],{"class":309},[29,46914,32199],{"class":39},[29,46916,686],{"class":309},[29,46918,42581],{"class":39},[29,46920,42376],{"class":309},[29,46922,505],{"class":39},[29,46924,686],{"class":309},[29,46926,511],{"class":39},[29,46928,42385],{"class":309},[29,46930,511],{"class":39},[29,46932,38176],{"class":309},[29,46934,46935,46937,46939,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959,46961,46963],{"class":31,"line":10019},[29,46936,42358],{"class":309},[29,46938,42602],{"class":39},[29,46940,686],{"class":309},[29,46942,34999],{"class":39},[29,46944,42367],{"class":309},[29,46946,21223],{"class":39},[29,46948,686],{"class":309},[29,46950,42615],{"class":39},[29,46952,42376],{"class":309},[29,46954,505],{"class":39},[29,46956,686],{"class":309},[29,46958,32199],{"class":39},[29,46960,42385],{"class":309},[29,46962,32199],{"class":39},[29,46964,38176],{"class":309},[29,46966,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987,46989,46991],{"class":31,"line":10025},[29,46968,38226],{"class":309},[29,46970,31003],{"class":5391},[29,46972,355],{"class":305},[29,46974,380],{"class":39},[29,46976,686],{"class":309},[29,46978,31058],{"class":5391},[29,46980,355],{"class":305},[29,46982,386],{"class":39},[29,46984,686],{"class":309},[29,46986,31012],{"class":5391},[29,46988,355],{"class":305},[29,46990,525],{"class":39},[29,46992,316],{"class":309},[29,46994,46995],{"class":31,"line":10039},[29,46996,38255],{"class":309},[29,46998,46999,47001,47003,47005],{"class":31,"line":10045},[29,47000,30974],{"class":39},[29,47002,42668],{"class":309},[29,47004,355],{"class":305},[29,47006,38138],{"class":309},[29,47008,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029,47031,47033,47035,47037],{"class":31,"line":10072},[29,47010,42358],{"class":309},[29,47012,42679],{"class":39},[29,47014,686],{"class":309},[29,47016,34999],{"class":39},[29,47018,42367],{"class":309},[29,47020,21223],{"class":39},[29,47022,686],{"class":309},[29,47024,42615],{"class":39},[29,47026,42376],{"class":309},[29,47028,505],{"class":39},[29,47030,686],{"class":309},[29,47032,32199],{"class":39},[29,47034,42385],{"class":309},[29,47036,32199],{"class":39},[29,47038,38176],{"class":309},[29,47040,47041,47043,47045,47047,47049,47051,47053,47055,47057,47059,47061,47063,47065,47067,47069],{"class":31,"line":10081},[29,47042,42358],{"class":309},[29,47044,42679],{"class":39},[29,47046,686],{"class":309},[29,47048,35069],{"class":39},[29,47050,42367],{"class":309},[29,47052,42288],{"class":39},[29,47054,686],{"class":309},[29,47056,35069],{"class":39},[29,47058,42376],{"class":309},[29,47060,915],{"class":39},[29,47062,686],{"class":309},[29,47064,32199],{"class":39},[29,47066,42385],{"class":309},[29,47068,32199],{"class":39},[29,47070,38176],{"class":309},[29,47072,47073,47075,47077,47079,47081],{"class":31,"line":10087},[29,47074,42742],{"class":309},[29,47076,525],{"class":39},[29,47078,686],{"class":309},[29,47080,525],{"class":39},[29,47082,42751],{"class":309},[29,47084,47085],{"class":31,"line":10095},[29,47086,38919],{"class":309},[29,47088,47089,47091,47093,47095,47097],{"class":31,"line":10100},[29,47090,38924],{"class":309},[29,47092,42762],{"class":39},[29,47094,686],{"class":309},[29,47096,386],{"class":39},[29,47098,316],{"class":309},[29,47100,47101],{"class":31,"line":16779},[29,47102,38255],{"class":309},[29,47104,47105],{"class":31,"line":16785},[29,47106,42777],{"class":367},[29,47108,47109,47111,47113,47115,47117],{"class":31,"line":16808},[29,47110,3578],{"class":305},[29,47112,38997],{"class":309},[29,47114,26172],{"class":305},[29,47116,39002],{"class":39},[29,47118,39005],{"class":309},[29,47120,47121,47123,47125],{"class":31,"line":16814},[29,47122,4817],{"class":305},[29,47124,39017],{"class":39},[29,47126,39020],{"class":309},[29,47128,47129,47131,47133,47135,47137,47139,47141,47143,47145],{"class":31,"line":16837},[29,47130,39030],{"class":309},[29,47132,42804],{"class":5391},[29,47134,355],{"class":305},[29,47136,42809],{"class":103},[29,47138,686],{"class":309},[29,47140,39033],{"class":5391},[29,47142,355],{"class":305},[29,47144,39038],{"class":103},[29,47146,316],{"class":309},[29,47148,47149],{"class":31,"line":16851},[29,47150,42824],{"class":367},[29,47152,47153],{"class":31,"line":16871},[29,47154,42829],{"class":367},[29,47156,47157],{"class":31,"line":16877},[29,47158,42834],{"class":367},[29,47160,47161],{"class":31,"line":16888},[29,47162,42839],{"class":367},[29,47164,47165],{"class":31,"line":16911},[29,47166,42844],{"class":367},[29,47168,47169],{"class":31,"line":16933},[29,47170,42849],{"class":367},[29,47172,47173,47175,47177,47179,47181,47183],{"class":31,"line":16938},[29,47174,39050],{"class":305},[29,47176,39053],{"class":309},[29,47178,39056],{"class":305},[29,47180,39059],{"class":305},[29,47182,39062],{"class":39},[29,47184,3914],{"class":309},[29,47186,47187,47189,47191],{"class":31,"line":16944},[29,47188,39074],{"class":309},[29,47190,499],{"class":39},[29,47192,316],{"class":309},[29,47194,47195,47197,47199],{"class":31,"line":16958},[29,47196,42876],{"class":305},[29,47198,39017],{"class":39},[29,47200,39093],{"class":309},[29,47202,47203,47205,47207,47209,47211],{"class":31,"line":16971},[29,47204,42885],{"class":309},[29,47206,499],{"class":39},[29,47208,686],{"class":309},[29,47210,39115],{"class":39},[29,47212,316],{"class":309},[29,47214,47215,47217,47219,47221,47223,47225],{"class":31,"line":16976},[29,47216,42898],{"class":305},[29,47218,39053],{"class":309},[29,47220,39056],{"class":305},[29,47222,39059],{"class":305},[29,47224,39062],{"class":39},[29,47226,3914],{"class":309},[29,47228,47229,47231,47233],{"class":31,"line":16990},[29,47230,42913],{"class":309},[29,47232,499],{"class":39},[29,47234,316],{"class":309},[29,47236,47237],{"class":31,"line":16995},[29,47238,35294],{"class":367},[29,47240,47241,47243,47245],{"class":31,"line":17001},[29,47242,30930],{"class":305},[29,47244,31222],{"class":35},[29,47246,31225],{"class":309},[29,47248,47249,47251,47253,47255],{"class":31,"line":17006},[29,47250,31230],{"class":309},[29,47252,355],{"class":305},[29,47254,30952],{"class":39},[29,47256,42940],{"class":309},[29,47258,47259,47261,47263,47265],{"class":31,"line":17020},[29,47260,31230],{"class":309},[29,47262,355],{"class":305},[29,47264,30952],{"class":39},[29,47266,42951],{"class":309},[29,47268,47269,47271,47273,47275],{"class":31,"line":17025},[29,47270,31230],{"class":309},[29,47272,355],{"class":305},[29,47274,30952],{"class":39},[29,47276,42962],{"class":309},[29,47278,47279,47281,47283,47285],{"class":31,"line":17030},[29,47280,31230],{"class":309},[29,47282,355],{"class":305},[29,47284,30952],{"class":39},[29,47286,42973],{"class":309},[29,47288,47289,47291,47293,47295],{"class":31,"line":17044},[29,47290,31230],{"class":309},[29,47292,355],{"class":305},[29,47294,30952],{"class":39},[29,47296,42984],{"class":309},[29,47298,47299,47301],{"class":31,"line":17056},[29,47300,14927],{"class":305},[29,47302,31338],{"class":309},[29,47304,47305],{"class":31,"line":17061},[29,47306,2575],{"emptyLinePlaceholder":233},[29,47308,47309],{"class":31,"line":17074},[29,47310,42999],{"class":367},[29,47312,47313,47315,47317,47319,47321],{"class":31,"line":17079},[29,47314,1707],{"class":305},[29,47316,31349],{"class":39},[29,47318,3124],{"class":305},[29,47320,31354],{"class":103},[29,47322,3914],{"class":309},[29,47324,47325,47327,47329,47331,47333,47335,47337,47339,47341],{"class":31,"line":17084},[29,47326,31366],{"class":309},[29,47328,355],{"class":305},[29,47330,30580],{"class":309},[29,47332,31373],{"class":103},[29,47334,1880],{"class":305},[29,47336,31378],{"class":309},[29,47338,1877],{"class":305},[29,47340,30605],{"class":103},[29,47342,316],{"class":309},[29,47344,47345,47347,47349],{"class":31,"line":17089},[29,47346,31418],{"class":309},[29,47348,355],{"class":305},[29,47350,43040],{"class":309},[29,47352,47353,47355,47357,47359,47361,47363,47365,47367],{"class":31,"line":17102},[29,47354,31428],{"class":39},[29,47356,31431],{"class":309},[29,47358,525],{"class":39},[29,47360,686],{"class":309},[29,47362,31630],{"class":39},[29,47364,686],{"class":309},[29,47366,31630],{"class":39},[29,47368,31444],{"class":309},[22173,47370,47372],{"id":47371},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[171,47374,47375],{},"计算图片的均值与方差，用于训练中归一化处理操作",[19,47377,47379],{"className":30507,"code":47378,"language":30509,"meta":24,"style":24},"# 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",[26,47380,47381,47386,47399,47404,47410,47415,47425,47429,47434,47444,47448,47453,47463,47480,47484,47489,47501,47513,47544,47553,47563,47573,47577,47582,47597,47601,47606,47611,47616,47626,47631,47656,47660,47665,47680,47684,47697,47701,47706,47711,47716,47721,47726,47736,47746,47769,47777,47785,47793,47797,47809,47813,47818,47822,47826,47833,47853,47877,47884,47898,47903,47908,47912,47926,47930,47942],{"__ignoreMap":24},[29,47382,47383],{"class":31,"line":32},[29,47384,47385],{"class":367},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[29,47387,47388,47390,47393,47396],{"class":31,"line":43},[29,47389,30866],{"class":305},[29,47391,47392],{"class":39}," PIL",[29,47394,47395],{"class":305}," import",[29,47397,47398],{"class":309}," Image\n",[29,47400,47401],{"class":31,"line":51},[29,47402,47403],{"class":367},"# os 用来处理文件夹和文件路径\n",[29,47405,47406,47408],{"class":31,"line":59},[29,47407,30521],{"class":305},[29,47409,45434],{"class":309},[29,47411,47412],{"class":31,"line":67},[29,47413,47414],{"class":367},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[29,47416,47417,47419,47421,47423],{"class":31,"line":75},[29,47418,30521],{"class":305},[29,47420,31509],{"class":309},[29,47422,31512],{"class":305},[29,47424,31515],{"class":309},[29,47426,47427],{"class":31,"line":83},[29,47428,2575],{"emptyLinePlaceholder":233},[29,47430,47431],{"class":31,"line":158},[29,47432,47433],{"class":367},"# 文件夹路径，包含所有图片文件\n",[29,47435,47436,47439,47441],{"class":31,"line":166},[29,47437,47438],{"class":309},"folder_path ",[29,47440,355],{"class":305},[29,47442,47443],{"class":103}," 'data_cat_dog'\n",[29,47445,47446],{"class":31,"line":1505},[29,47447,2575],{"emptyLinePlaceholder":233},[29,47449,47450],{"class":31,"line":1788},[29,47451,47452],{"class":367},"# 初始化累积变量\n",[29,47454,47455,47458,47460],{"class":31,"line":1793},[29,47456,47457],{"class":309},"total_pixels ",[29,47459,355],{"class":305},[29,47461,47462],{"class":39}," 0\n",[29,47464,47465,47468,47470,47473,47475,47477],{"class":31,"line":1799},[29,47466,47467],{"class":309},"sum_normalized_pixel_values ",[29,47469,355],{"class":305},[29,47471,47472],{"class":309}," np.zeros(",[29,47474,380],{"class":39},[29,47476,45937],{"class":309},[29,47478,47479],{"class":367},"# 如果是RGB图像，需要三个通道的均值和方差\n",[29,47481,47482],{"class":31,"line":1804},[29,47483,2575],{"emptyLinePlaceholder":233},[29,47485,47486],{"class":31,"line":1818},[29,47487,47488],{"class":367},"# 遍历文件夹中的图片文件\n",[29,47490,47491,47493,47496,47498],{"class":31,"line":1823},[29,47492,3200],{"class":305},[29,47494,47495],{"class":309}," root, dirs, files ",[29,47497,26172],{"class":305},[29,47499,47500],{"class":309}," os.walk(folder_path):\n",[29,47502,47503,47505,47508,47510],{"class":31,"line":1829},[29,47504,3376],{"class":305},[29,47506,47507],{"class":309}," filename ",[29,47509,26172],{"class":305},[29,47511,47512],{"class":309}," files:\n",[29,47514,47515,47517,47520,47523,47525,47528,47530,47533,47535,47538,47541],{"class":31,"line":1850},[29,47516,2672],{"class":305},[29,47518,47519],{"class":309}," filename.endswith((",[29,47521,47522],{"class":103},"'.jpg'",[29,47524,12610],{"class":309},[29,47526,47527],{"class":103},"'.jpeg'",[29,47529,12610],{"class":309},[29,47531,47532],{"class":103},"'.png'",[29,47534,12610],{"class":309},[29,47536,47537],{"class":103},"'.bmp'",[29,47539,47540],{"class":309},")):  ",[29,47542,47543],{"class":367},"# 可根据实际情况添加其他格式\n",[29,47545,47546,47548,47550],{"class":31,"line":1855},[29,47547,45802],{"class":309},[29,47549,355],{"class":305},[29,47551,47552],{"class":309}," os.path.join(root, filename)\n",[29,47554,47555,47558,47560],{"class":31,"line":1869},[29,47556,47557],{"class":309},"            image ",[29,47559,355],{"class":305},[29,47561,47562],{"class":309}," Image.open(image_path)\n",[29,47564,47565,47568,47570],{"class":31,"line":1874},[29,47566,47567],{"class":309},"            image_array ",[29,47569,355],{"class":305},[29,47571,47572],{"class":309}," np.array(image)\n",[29,47574,47575],{"class":31,"line":1903},[29,47576,2575],{"emptyLinePlaceholder":233},[29,47578,47579],{"class":31,"line":1908},[29,47580,47581],{"class":367},"            # 归一化像素值到0-1之间\n",[29,47583,47584,47587,47589,47592,47594],{"class":31,"line":1925},[29,47585,47586],{"class":309},"            normalized_image_array ",[29,47588,355],{"class":305},[29,47590,47591],{"class":309}," image_array ",[29,47593,892],{"class":305},[29,47595,47596],{"class":39}," 255.0\n",[29,47598,47599],{"class":31,"line":1930},[29,47600,2575],{"emptyLinePlaceholder":233},[29,47602,47603],{"class":31,"line":1935},[29,47604,47605],{"class":367},"            # print(image_path)\n",[29,47607,47608],{"class":31,"line":1940},[29,47609,47610],{"class":367},"            # print(normalized_image_array.shape)\n",[29,47612,47613],{"class":31,"line":1954},[29,47614,47615],{"class":367},"            # 累积归一化后的像素值和像素数量\n",[29,47617,47618,47621,47623],{"class":31,"line":1959},[29,47619,47620],{"class":309},"            total_pixels ",[29,47622,9652],{"class":305},[29,47624,47625],{"class":309}," normalized_image_array.size\n",[29,47627,47628],{"class":31,"line":2752},[29,47629,47630],{"class":367},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[29,47632,47633,47636,47638,47641,47644,47646,47648,47650,47652,47654],{"class":31,"line":2766},[29,47634,47635],{"class":309},"            sum_normalized_pixel_values ",[29,47637,9652],{"class":305},[29,47639,47640],{"class":309}," np.sum(normalized_image_array, ",[29,47642,47643],{"class":5391},"axis",[29,47645,355],{"class":305},[29,47647,310],{"class":309},[29,47649,499],{"class":39},[29,47651,12610],{"class":309},[29,47653,525],{"class":39},[29,47655,30626],{"class":309},[29,47657,47658],{"class":31,"line":2774},[29,47659,2575],{"emptyLinePlaceholder":233},[29,47661,47662],{"class":31,"line":2779},[29,47663,47664],{"class":367},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[29,47666,47667,47670,47672,47675,47677],{"class":31,"line":2785},[29,47668,47669],{"class":309},"mean ",[29,47671,355],{"class":305},[29,47673,47674],{"class":309}," sum_normalized_pixel_values ",[29,47676,892],{"class":305},[29,47678,47679],{"class":309}," total_pixels\n",[29,47681,47682],{"class":31,"line":2791},[29,47683,2575],{"emptyLinePlaceholder":233},[29,47685,47686,47689,47691,47693,47695],{"class":31,"line":2796},[29,47687,47688],{"class":309},"sum_squared_diff ",[29,47690,355],{"class":305},[29,47692,47472],{"class":309},[29,47694,380],{"class":39},[29,47696,316],{"class":309},[29,47698,47699],{"class":31,"line":8123},[29,47700,2575],{"emptyLinePlaceholder":233},[29,47702,47703],{"class":31,"line":8147},[29,47704,47705],{"class":367},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[29,47707,47708],{"class":31,"line":8152},[29,47709,47710],{"class":367},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[29,47712,47713],{"class":31,"line":8158},[29,47714,47715],{"class":367},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[29,47717,47718],{"class":31,"line":8185},[29,47719,47720],{"class":367},"# Image.open(image_path)：打开图片\n",[29,47722,47723],{"class":31,"line":8190},[29,47724,47725],{"class":367},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[29,47727,47728,47730,47732,47734],{"class":31,"line":8196},[29,47729,3200],{"class":305},[29,47731,47495],{"class":309},[29,47733,26172],{"class":305},[29,47735,47500],{"class":309},[29,47737,47738,47740,47742,47744],{"class":31,"line":8208},[29,47739,3376],{"class":305},[29,47741,47507],{"class":309},[29,47743,26172],{"class":305},[29,47745,47512],{"class":309},[29,47747,47748,47750,47752,47754,47756,47758,47760,47762,47764,47766],{"class":31,"line":8220},[29,47749,2672],{"class":305},[29,47751,47519],{"class":309},[29,47753,47522],{"class":103},[29,47755,12610],{"class":309},[29,47757,47527],{"class":103},[29,47759,12610],{"class":309},[29,47761,47532],{"class":103},[29,47763,12610],{"class":309},[29,47765,47537],{"class":103},[29,47767,47768],{"class":309},")):\n",[29,47770,47771,47773,47775],{"class":31,"line":8232},[29,47772,45802],{"class":309},[29,47774,355],{"class":305},[29,47776,47552],{"class":309},[29,47778,47779,47781,47783],{"class":31,"line":9891},[29,47780,47557],{"class":309},[29,47782,355],{"class":305},[29,47784,47562],{"class":309},[29,47786,47787,47789,47791],{"class":31,"line":9916},[29,47788,47567],{"class":309},[29,47790,355],{"class":305},[29,47792,47572],{"class":309},[29,47794,47795],{"class":31,"line":9939},[29,47796,47581],{"class":367},[29,47798,47799,47801,47803,47805,47807],{"class":31,"line":9963},[29,47800,47586],{"class":309},[29,47802,355],{"class":305},[29,47804,47591],{"class":309},[29,47806,892],{"class":305},[29,47808,47596],{"class":39},[29,47810,47811],{"class":31,"line":9968},[29,47812,47610],{"class":367},[29,47814,47815],{"class":31,"line":9973},[29,47816,47817],{"class":367},"            # print(mean.shape)\n",[29,47819,47820],{"class":31,"line":9978},[29,47821,47605],{"class":367},[29,47823,47824],{"class":31,"line":9987},[29,47825,2575],{"emptyLinePlaceholder":233},[29,47827,47828,47831],{"class":31,"line":9992},[29,47829,47830],{"class":305},"            try",[29,47832,3914],{"class":309},[29,47834,47835,47838,47840,47843,47845,47848,47850],{"class":31,"line":9998},[29,47836,47837],{"class":309},"                diff ",[29,47839,355],{"class":305},[29,47841,47842],{"class":309}," (normalized_image_array ",[29,47844,840],{"class":305},[29,47846,47847],{"class":309}," mean) ",[29,47849,10836],{"class":305},[29,47851,47852],{"class":39}," 2\n",[29,47854,47855,47858,47860,47863,47865,47867,47869,47871,47873,47875],{"class":31,"line":10019},[29,47856,47857],{"class":309},"                sum_squared_diff ",[29,47859,9652],{"class":305},[29,47861,47862],{"class":309}," np.sum(diff, ",[29,47864,47643],{"class":5391},[29,47866,355],{"class":305},[29,47868,310],{"class":309},[29,47870,499],{"class":39},[29,47872,12610],{"class":309},[29,47874,525],{"class":39},[29,47876,30626],{"class":309},[29,47878,47879,47882],{"class":31,"line":10025},[29,47880,47881],{"class":305},"            except",[29,47883,3914],{"class":309},[29,47885,47886,47889,47891,47893,47896],{"class":31,"line":10039},[29,47887,47888],{"class":39},"                print",[29,47890,310],{"class":309},[29,47892,361],{"class":305},[29,47894,47895],{"class":103},"\"捕获到自定义异常\"",[29,47897,316],{"class":309},[29,47899,47900],{"class":31,"line":10045},[29,47901,47902],{"class":367},"            # diff = (normalized_image_array - mean) ** 2\n",[29,47904,47905],{"class":31,"line":10072},[29,47906,47907],{"class":367},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[29,47909,47910],{"class":31,"line":10081},[29,47911,2575],{"emptyLinePlaceholder":233},[29,47913,47914,47917,47919,47922,47924],{"class":31,"line":10087},[29,47915,47916],{"class":309},"variance ",[29,47918,355],{"class":305},[29,47920,47921],{"class":309}," sum_squared_diff ",[29,47923,892],{"class":305},[29,47925,47679],{"class":309},[29,47927,47928],{"class":31,"line":10095},[29,47929,2575],{"emptyLinePlaceholder":233},[29,47931,47932,47934,47936,47939],{"class":31,"line":10100},[29,47933,30544],{"class":39},[29,47935,310],{"class":309},[29,47937,47938],{"class":103},"\"Mean:\"",[29,47940,47941],{"class":309},", mean)\n",[29,47943,47944,47946,47948,47951],{"class":31,"line":16779},[29,47945,30544],{"class":39},[29,47947,310],{"class":309},[29,47949,47950],{"class":103},"\"Variance:\"",[29,47952,47953],{"class":309},", variance)\n",[19,47955,47957],{"className":30507,"code":47956,"language":30509,"meta":24,"style":24},"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",[26,47958,47959,47965,47971,47981,47987,47997,48011,48021,48031,48041,48045,48055,48065,48069,48073,48081,48086,48091,48110,48114,48119,48124,48129,48134,48175,48180,48190,48195,48208,48213,48218,48223,48228,48233,48237,48242,48247,48269,48273,48305,48319,48329,48339,48343,48353,48367,48377,48387,48397,48403,48407,48411,48415,48419,48423,48431,48451,48455,48459,48463,48467,48483,48487,48491,48499,48503,48507,48515,48519,48523,48527,48535,48539,48543,48547,48555,48559,48567,48571,48579,48583,48591,48595,48603,48607,48611,48619,48623,48627,48639,48663,48677,48681,48685,48689,48697,48701,48709,48713,48721,48725,48733,48737,48745,48749,48757,48761,48773,48777,48785,48789,48797,48801,48805,48809,48813,48821,48825,48841,48845,48853,48857,48861,48865,48869,48873,48877,48881,48897,48901,48913,48917,48929,48933,48945,48949,48957,48961,48969,48973,48977,48981,48987,48991,48999,49003,49019,49023,49031,49035,49051,49063,49067,49079,49083,49087,49095,49099,49103,49111,49115,49123,49127,49135,49139,49143,49185,49227,49231,49235,49251,49255,49271,49275,49279,49287,49291,49295,49307,49345,49349,49353,49361,49365,49379,49389,49395,49401,49407,49413,49417,49421,49427,49431,49435,49443,49447,49465,49469,49473,49477,49493,49497,49501,49505,49509,49513,49533,49553,49557,49561,49565,49573,49581,49585,49601,49621,49641,49645,49650,49659,49668,49673,49678,49683,49696,49701,49710,49719,49736],{"__ignoreMap":24},[29,47960,47961,47963],{"class":31,"line":32},[29,47962,30521],{"class":305},[29,47964,31951],{"class":309},[29,47966,47967,47969],{"class":31,"line":43},[29,47968,30521],{"class":305},[29,47970,31958],{"class":309},[29,47972,47973,47975,47977,47979],{"class":31,"line":51},[29,47974,30521],{"class":305},[29,47976,31969],{"class":309},[29,47978,31512],{"class":305},[29,47980,31974],{"class":309},[29,47982,47983,47985],{"class":31,"line":59},[29,47984,30521],{"class":305},[29,47986,30524],{"class":309},[29,47988,47989,47991,47993,47995],{"class":31,"line":67},[29,47990,30866],{"class":305},[29,47992,31544],{"class":309},[29,47994,30521],{"class":305},[29,47996,31991],{"class":309},[29,47998,47999,48001,48003,48005,48008],{"class":31,"line":75},[29,48000,30866],{"class":305},[29,48002,31497],{"class":309},[29,48004,30521],{"class":305},[29,48006,48007],{"class":309}," ImageFolder ",[29,48009,48010],{"class":367},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[29,48012,48013,48015,48017,48019],{"class":31,"line":83},[29,48014,30866],{"class":305},[29,48016,31527],{"class":309},[29,48018,30521],{"class":305},[29,48020,31532],{"class":309},[29,48022,48023,48025,48027,48029],{"class":31,"line":158},[29,48024,30521],{"class":305},[29,48026,31544],{"class":309},[29,48028,31512],{"class":305},[29,48030,31549],{"class":309},[29,48032,48033,48035,48037,48039],{"class":31,"line":166},[29,48034,30521],{"class":305},[29,48036,31561],{"class":309},[29,48038,31512],{"class":305},[29,48040,31566],{"class":309},[29,48042,48043],{"class":31,"line":1505},[29,48044,32036],{"class":367},[29,48046,48047,48049,48051,48053],{"class":31,"line":1788},[29,48048,30866],{"class":305},[29,48050,32043],{"class":309},[29,48052,30521],{"class":305},[29,48054,43160],{"class":309},[29,48056,48057,48059,48061,48063],{"class":31,"line":1793},[29,48058,30866],{"class":305},[29,48060,30869],{"class":309},[29,48062,30521],{"class":305},[29,48064,30874],{"class":309},[29,48066,48067],{"class":31,"line":1799},[29,48068,2575],{"emptyLinePlaceholder":233},[29,48070,48071],{"class":31,"line":1804},[29,48072,32071],{"class":367},[29,48074,48075,48077,48079],{"class":31,"line":1818},[29,48076,32076],{"class":305},[29,48078,32079],{"class":35},[29,48080,32082],{"class":309},[29,48082,48083],{"class":31,"line":1823},[29,48084,48085],{"class":367},"    # 导入自己的数据集，并进行数据处理\n",[29,48087,48088],{"class":31,"line":1829},[29,48089,48090],{"class":367},"    # 定义数据集的路径\n",[29,48092,48093,48096,48098,48100,48102,48104,48108],{"class":31,"line":1850},[29,48094,48095],{"class":39},"    ROOT_PATH",[29,48097,355],{"class":305},[29,48099,978],{"class":305},[29,48101,559],{"class":103},[29,48103,866],{"class":39},[29,48105,48107],{"class":48106},"sA_wV","\u002Fdata\u002Ftrain",[29,48109,25262],{"class":103},[29,48111,48112],{"class":31,"line":1855},[29,48113,2575],{"emptyLinePlaceholder":233},[29,48115,48116],{"class":31,"line":1869},[29,48117,48118],{"class":367},"    # 定义归一化方法\n",[29,48120,48121],{"class":31,"line":1874},[29,48122,48123],{"class":367},"    # 这里需要先计算一下数据集的均值和方差\n",[29,48125,48126],{"class":31,"line":1903},[29,48127,48128],{"class":367},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[29,48130,48131],{"class":31,"line":1908},[29,48132,48133],{"class":367},"    # 第一个参数是均值，第二个参数是方差\n",[29,48135,48136,48139,48141,48144,48147,48149,48152,48154,48157,48160,48163,48165,48168,48170,48173],{"class":31,"line":1925},[29,48137,48138],{"class":309},"    normalize",[29,48140,355],{"class":305},[29,48142,48143],{"class":309},"transforms.Normalize([",[29,48145,48146],{"class":39},"0.162",[29,48148,686],{"class":309},[29,48150,48151],{"class":39},"0.151",[29,48153,686],{"class":309},[29,48155,48156],{"class":39},"0.138",[29,48158,48159],{"class":309},"],[",[29,48161,48162],{"class":39},"0.058",[29,48164,686],{"class":309},[29,48166,48167],{"class":39},"0.052",[29,48169,686],{"class":309},[29,48171,48172],{"class":39},"0.048",[29,48174,4832],{"class":309},[29,48176,48177],{"class":31,"line":1930},[29,48178,48179],{"class":367},"    # 定义数据集处理方法变量\n",[29,48181,48182,48185,48187],{"class":31,"line":1935},[29,48183,48184],{"class":309},"    train_transform",[29,48186,355],{"class":305},[29,48188,48189],{"class":309},"transforms.Compose([\n",[29,48191,48192],{"class":31,"line":1940},[29,48193,48194],{"class":367},"        # 调整图像大小为224*224\n",[29,48196,48197,48200,48202,48204,48206],{"class":31,"line":1954},[29,48198,48199],{"class":309},"        transforms.Resize((",[29,48201,31630],{"class":39},[29,48203,686],{"class":309},[29,48205,31630],{"class":39},[29,48207,42751],{"class":309},[29,48209,48210],{"class":31,"line":1959},[29,48211,48212],{"class":367},"        # 将图像转换为张量\n",[29,48214,48215],{"class":31,"line":2752},[29,48216,48217],{"class":309},"        transforms.ToTensor(),\n",[29,48219,48220],{"class":31,"line":2766},[29,48221,48222],{"class":309},"        normalize])\n",[29,48224,48225],{"class":31,"line":2774},[29,48226,48227],{"class":367},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[29,48229,48230],{"class":31,"line":2779},[29,48231,48232],{"class":367},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[29,48234,48235],{"class":31,"line":2785},[29,48236,2575],{"emptyLinePlaceholder":233},[29,48238,48239],{"class":31,"line":2791},[29,48240,48241],{"class":367},"    # 加载数据集\n",[29,48243,48244],{"class":31,"line":2796},[29,48245,48246],{"class":367},"    # 传入数据集路径与处理方法\n",[29,48248,48249,48251,48253,48256,48259,48261,48264,48266],{"class":31,"line":8123},[29,48250,32087],{"class":309},[29,48252,355],{"class":305},[29,48254,48255],{"class":309},"ImageFolder(",[29,48257,48258],{"class":39},"ROOT_PATH",[29,48260,686],{"class":309},[29,48262,48263],{"class":5391},"transform",[29,48265,355],{"class":305},[29,48267,48268],{"class":309},"train_transform)\n",[29,48270,48271],{"class":31,"line":8147},[29,48272,2575],{"emptyLinePlaceholder":233},[29,48274,48275,48277,48279,48281,48283,48285,48287,48289,48291,48293,48295,48297,48299,48301,48303],{"class":31,"line":8152},[29,48276,32139],{"class":309},[29,48278,355],{"class":305},[29,48280,32144],{"class":309},[29,48282,32147],{"class":39},[29,48284,310],{"class":309},[29,48286,32152],{"class":39},[29,48288,763],{"class":305},[29,48290,7533],{"class":39},[29,48292,32159],{"class":309},[29,48294,32147],{"class":39},[29,48296,310],{"class":309},[29,48298,32166],{"class":39},[29,48300,763],{"class":305},[29,48302,7533],{"class":39},[29,48304,32173],{"class":309},[29,48306,48307,48309,48311,48313,48315,48317],{"class":31,"line":8158},[29,48308,32178],{"class":309},[29,48310,355],{"class":305},[29,48312,32183],{"class":309},[29,48314,31666],{"class":5391},[29,48316,355],{"class":305},[29,48318,31671],{"class":309},[29,48320,48321,48323,48325,48327],{"class":31,"line":8185},[29,48322,32194],{"class":5391},[29,48324,355],{"class":305},[29,48326,505],{"class":39},[29,48328,31595],{"class":309},[29,48330,48331,48333,48335,48337],{"class":31,"line":8190},[29,48332,32206],{"class":5391},[29,48334,355],{"class":305},[29,48336,31605],{"class":39},[29,48338,31595],{"class":309},[29,48340,48341],{"class":31,"line":8196},[29,48342,32217],{"class":367},[29,48344,48345,48347,48349,48351],{"class":31,"line":8208},[29,48346,32222],{"class":5391},[29,48348,355],{"class":305},[29,48350,703],{"class":39},[29,48352,316],{"class":309},[29,48354,48355,48357,48359,48361,48363,48365],{"class":31,"line":8220},[29,48356,32233],{"class":309},[29,48358,355],{"class":305},[29,48360,31663],{"class":309},[29,48362,31666],{"class":5391},[29,48364,355],{"class":305},[29,48366,32244],{"class":309},[29,48368,48369,48371,48373,48375],{"class":31,"line":8232},[29,48370,32249],{"class":5391},[29,48372,355],{"class":305},[29,48374,505],{"class":39},[29,48376,31595],{"class":309},[29,48378,48379,48381,48383,48385],{"class":31,"line":9891},[29,48380,32260],{"class":5391},[29,48382,355],{"class":305},[29,48384,31605],{"class":39},[29,48386,31595],{"class":309},[29,48388,48389,48391,48393,48395],{"class":31,"line":9916},[29,48390,32271],{"class":5391},[29,48392,355],{"class":305},[29,48394,703],{"class":39},[29,48396,316],{"class":309},[29,48398,48399,48401],{"class":31,"line":9939},[29,48400,4265],{"class":305},[29,48402,32284],{"class":309},[29,48404,48405],{"class":31,"line":9963},[29,48406,2575],{"emptyLinePlaceholder":233},[29,48408,48409],{"class":31,"line":9968},[29,48410,32293],{"class":367},[29,48412,48413],{"class":31,"line":9973},[29,48414,32298],{"class":367},[29,48416,48417],{"class":31,"line":9978},[29,48418,2575],{"emptyLinePlaceholder":233},[29,48420,48421],{"class":31,"line":9987},[29,48422,32307],{"class":367},[29,48424,48425,48427,48429],{"class":31,"line":9992},[29,48426,32076],{"class":305},[29,48428,32314],{"class":35},[29,48430,32317],{"class":309},[29,48432,48433,48435,48437,48439,48441,48443,48445,48447,48449],{"class":31,"line":9998},[29,48434,31366],{"class":309},[29,48436,355],{"class":305},[29,48438,30580],{"class":309},[29,48440,31373],{"class":103},[29,48442,1880],{"class":305},[29,48444,31378],{"class":309},[29,48446,1877],{"class":305},[29,48448,32336],{"class":103},[29,48450,316],{"class":309},[29,48452,48453],{"class":31,"line":10019},[29,48454,2575],{"emptyLinePlaceholder":233},[29,48456,48457],{"class":31,"line":10025},[29,48458,32351],{"class":367},[29,48460,48461],{"class":31,"line":10039},[29,48462,32356],{"class":367},[29,48464,48465],{"class":31,"line":10045},[29,48466,32361],{"class":367},[29,48468,48469,48471,48473,48475,48477,48479,48481],{"class":31,"line":10072},[29,48470,32366],{"class":309},[29,48472,355],{"class":305},[29,48474,32371],{"class":309},[29,48476,32374],{"class":5391},[29,48478,355],{"class":305},[29,48480,32379],{"class":39},[29,48482,316],{"class":309},[29,48484,48485],{"class":31,"line":10081},[29,48486,2575],{"emptyLinePlaceholder":233},[29,48488,48489],{"class":31,"line":10087},[29,48490,32390],{"class":367},[29,48492,48493,48495,48497],{"class":31,"line":10095},[29,48494,32395],{"class":309},[29,48496,355],{"class":305},[29,48498,32400],{"class":309},[29,48500,48501],{"class":31,"line":10100},[29,48502,2575],{"emptyLinePlaceholder":233},[29,48504,48505],{"class":31,"line":16779},[29,48506,32409],{"class":367},[29,48508,48509,48511,48513],{"class":31,"line":16785},[29,48510,31418],{"class":309},[29,48512,355],{"class":305},[29,48514,32418],{"class":309},[29,48516,48517],{"class":31,"line":16808},[29,48518,32423],{"class":367},[29,48520,48521],{"class":31,"line":16814},[29,48522,32428],{"class":367},[29,48524,48525],{"class":31,"line":16837},[29,48526,32433],{"class":367},[29,48528,48529,48531,48533],{"class":31,"line":16851},[29,48530,32438],{"class":309},[29,48532,355],{"class":305},[29,48534,32443],{"class":309},[29,48536,48537],{"class":31,"line":16871},[29,48538,2575],{"emptyLinePlaceholder":233},[29,48540,48541],{"class":31,"line":16877},[29,48542,32456],{"class":367},[29,48544,48545],{"class":31,"line":16888},[29,48546,32461],{"class":367},[29,48548,48549,48551,48553],{"class":31,"line":16911},[29,48550,32466],{"class":309},[29,48552,355],{"class":305},[29,48554,32471],{"class":39},[29,48556,48557],{"class":31,"line":16933},[29,48558,32476],{"class":367},[29,48560,48561,48563,48565],{"class":31,"line":16938},[29,48562,32481],{"class":309},[29,48564,355],{"class":305},[29,48566,32486],{"class":309},[29,48568,48569],{"class":31,"line":16944},[29,48570,32491],{"class":367},[29,48572,48573,48575,48577],{"class":31,"line":16958},[29,48574,32496],{"class":309},[29,48576,355],{"class":305},[29,48578,32486],{"class":309},[29,48580,48581],{"class":31,"line":16971},[29,48582,32505],{"class":367},[29,48584,48585,48587,48589],{"class":31,"line":16976},[29,48586,32510],{"class":309},[29,48588,355],{"class":305},[29,48590,32486],{"class":309},[29,48592,48593],{"class":31,"line":16990},[29,48594,32519],{"class":367},[29,48596,48597,48599,48601],{"class":31,"line":16995},[29,48598,32524],{"class":309},[29,48600,355],{"class":305},[29,48602,32486],{"class":309},[29,48604,48605],{"class":31,"line":17001},[29,48606,2575],{"emptyLinePlaceholder":233},[29,48608,48609],{"class":31,"line":17006},[29,48610,32537],{"class":367},[29,48612,48613,48615,48617],{"class":31,"line":17020},[29,48614,32542],{"class":309},[29,48616,355],{"class":305},[29,48618,32547],{"class":309},[29,48620,48621],{"class":31,"line":17025},[29,48622,2575],{"emptyLinePlaceholder":233},[29,48624,48625],{"class":31,"line":17030},[29,48626,32560],{"class":367},[29,48628,48629,48631,48633,48635,48637],{"class":31,"line":17044},[29,48630,3376],{"class":305},[29,48632,32567],{"class":309},[29,48634,26172],{"class":305},[29,48636,32572],{"class":39},[29,48638,32575],{"class":309},[29,48640,48641,48643,48645,48647,48649,48651,48653,48655,48657,48659,48661],{"class":31,"line":17056},[29,48642,32580],{"class":39},[29,48644,310],{"class":309},[29,48646,32585],{"class":103},[29,48648,32588],{"class":39},[29,48650,892],{"class":103},[29,48652,32588],{"class":39},[29,48654,559],{"class":103},[29,48656,32597],{"class":309},[29,48658,840],{"class":305},[29,48660,525],{"class":39},[29,48662,30626],{"class":309},[29,48664,48665,48667,48669,48671,48673,48675],{"class":31,"line":17061},[29,48666,32580],{"class":39},[29,48668,310],{"class":309},[29,48670,32612],{"class":103},[29,48672,763],{"class":305},[29,48674,754],{"class":39},[29,48676,316],{"class":309},[29,48678,48679],{"class":31,"line":17074},[29,48680,2575],{"emptyLinePlaceholder":233},[29,48682,48683],{"class":31,"line":17079},[29,48684,32627],{"class":367},[29,48686,48687],{"class":31,"line":17084},[29,48688,32632],{"class":367},[29,48690,48691,48693,48695],{"class":31,"line":17089},[29,48692,32637],{"class":309},[29,48694,355],{"class":305},[29,48696,32471],{"class":39},[29,48698,48699],{"class":31,"line":17102},[29,48700,32646],{"class":367},[29,48702,48703,48705,48707],{"class":31,"line":17107},[29,48704,32651],{"class":309},[29,48706,355],{"class":305},[29,48708,3260],{"class":39},[29,48710,48711],{"class":31,"line":32762},[29,48712,32660],{"class":367},[29,48714,48715,48717,48719],{"class":31,"line":32768},[29,48716,32665],{"class":309},[29,48718,355],{"class":305},[29,48720,32471],{"class":39},[29,48722,48723],{"class":31,"line":32774},[29,48724,32674],{"class":367},[29,48726,48727,48729,48731],{"class":31,"line":32780},[29,48728,32679],{"class":309},[29,48730,355],{"class":305},[29,48732,3260],{"class":39},[29,48734,48735],{"class":31,"line":32786},[29,48736,32688],{"class":367},[29,48738,48739,48741,48743],{"class":31,"line":32797},[29,48740,32693],{"class":309},[29,48742,355],{"class":305},[29,48744,3260],{"class":39},[29,48746,48747],{"class":31,"line":32803},[29,48748,32702],{"class":367},[29,48750,48751,48753,48755],{"class":31,"line":32823},[29,48752,32707],{"class":309},[29,48754,355],{"class":305},[29,48756,3260],{"class":39},[29,48758,48759],{"class":31,"line":32829},[29,48760,32716],{"class":367},[29,48762,48763,48765,48767,48769,48771],{"class":31,"line":32840},[29,48764,3578],{"class":305},[29,48766,31730],{"class":309},[29,48768,26172],{"class":305},[29,48770,31735],{"class":39},[29,48772,32729],{"class":309},[29,48774,48775],{"class":31,"line":32846},[29,48776,32734],{"class":367},[29,48778,48779,48781,48783],{"class":31,"line":32852},[29,48780,32739],{"class":309},[29,48782,355],{"class":305},[29,48784,32744],{"class":309},[29,48786,48787],{"class":31,"line":32858},[29,48788,32749],{"class":367},[29,48790,48791,48793,48795],{"class":31,"line":32864},[29,48792,32754],{"class":309},[29,48794,355],{"class":305},[29,48796,32759],{"class":309},[29,48798,48799],{"class":31,"line":32870},[29,48800,32765],{"class":367},[29,48802,48803],{"class":31,"line":32876},[29,48804,32771],{"class":309},[29,48806,48807],{"class":31,"line":32882},[29,48808,32777],{"class":367},[29,48810,48811],{"class":31,"line":32902},[29,48812,32783],{"class":367},[29,48814,48815,48817,48819],{"class":31,"line":32908},[29,48816,32789],{"class":309},[29,48818,355],{"class":305},[29,48820,32794],{"class":309},[29,48822,48823],{"class":31,"line":32924},[29,48824,32800],{"class":367},[29,48826,48827,48829,48831,48833,48835,48837,48839],{"class":31,"line":32930},[29,48828,32806],{"class":309},[29,48830,355],{"class":305},[29,48832,32811],{"class":309},[29,48834,32814],{"class":5391},[29,48836,355],{"class":305},[29,48838,525],{"class":39},[29,48840,316],{"class":309},[29,48842,48843],{"class":31,"line":32944},[29,48844,32826],{"class":367},[29,48846,48847,48849,48851],{"class":31,"line":32950},[29,48848,32832],{"class":309},[29,48850,355],{"class":305},[29,48852,32837],{"class":309},[29,48854,48855],{"class":31,"line":32965},[29,48856,32843],{"class":367},[29,48858,48859],{"class":31,"line":32971},[29,48860,32849],{"class":309},[29,48862,48863],{"class":31,"line":32980},[29,48864,32855],{"class":367},[29,48866,48867],{"class":31,"line":32986},[29,48868,32861],{"class":309},[29,48870,48871],{"class":31,"line":32995},[29,48872,32867],{"class":367},[29,48874,48875],{"class":31,"line":33001},[29,48876,32873],{"class":309},[29,48878,48879],{"class":31,"line":33007},[29,48880,32879],{"class":367},[29,48882,48883,48885,48887,48889,48891,48893,48895],{"class":31,"line":33016},[29,48884,32885],{"class":309},[29,48886,9652],{"class":305},[29,48888,32890],{"class":309},[29,48890,763],{"class":305},[29,48892,32895],{"class":309},[29,48894,499],{"class":39},[29,48896,316],{"class":309},[29,48898,48899],{"class":31,"line":33022},[29,48900,32905],{"class":367},[29,48902,48903,48905,48907,48909,48911],{"class":31,"line":33033},[29,48904,32911],{"class":309},[29,48906,9652],{"class":305},[29,48908,32916],{"class":309},[29,48910,3124],{"class":305},[29,48912,32921],{"class":309},[29,48914,48915],{"class":31,"line":33039},[29,48916,32927],{"class":367},[29,48918,48919,48921,48923,48925,48927],{"class":31,"line":33058},[29,48920,32933],{"class":309},[29,48922,9652],{"class":305},[29,48924,32895],{"class":309},[29,48926,499],{"class":39},[29,48928,316],{"class":309},[29,48930,48931],{"class":31,"line":33064},[29,48932,32947],{"class":367},[29,48934,48935,48937,48939,48941,48943],{"class":31,"line":33075},[29,48936,3578],{"class":305},[29,48938,32955],{"class":309},[29,48940,26172],{"class":305},[29,48942,31735],{"class":39},[29,48944,32962],{"class":309},[29,48946,48947],{"class":31,"line":33081},[29,48948,32968],{"class":367},[29,48950,48951,48953,48955],{"class":31,"line":33101},[29,48952,32739],{"class":309},[29,48954,355],{"class":305},[29,48956,32744],{"class":309},[29,48958,48959],{"class":31,"line":33117},[29,48960,32983],{"class":367},[29,48962,48963,48965,48967],{"class":31,"line":33123},[29,48964,32754],{"class":309},[29,48966,355],{"class":305},[29,48968,32759],{"class":309},[29,48970,48971],{"class":31,"line":33137},[29,48972,32998],{"class":367},[29,48974,48975],{"class":31,"line":33143},[29,48976,33004],{"class":309},[29,48978,48979],{"class":31,"line":33149},[29,48980,36485],{"class":367},[29,48982,48983,48985],{"class":31,"line":33160},[29,48984,33010],{"class":305},[29,48986,33013],{"class":309},[29,48988,48989],{"class":31,"line":33166},[29,48990,33019],{"class":367},[29,48992,48993,48995,48997],{"class":31,"line":33172},[29,48994,36500],{"class":309},[29,48996,355],{"class":305},[29,48998,32794],{"class":309},[29,49000,49001],{"class":31,"line":33182},[29,49002,33036],{"class":367},[29,49004,49005,49007,49009,49011,49013,49015,49017],{"class":31,"line":33188},[29,49006,36513],{"class":309},[29,49008,355],{"class":305},[29,49010,32811],{"class":309},[29,49012,32814],{"class":5391},[29,49014,355],{"class":305},[29,49016,525],{"class":39},[29,49018,316],{"class":309},[29,49020,49021],{"class":31,"line":33199},[29,49022,33061],{"class":367},[29,49024,49025,49027,49029],{"class":31,"line":33205},[29,49026,36534],{"class":309},[29,49028,355],{"class":305},[29,49030,32837],{"class":309},[29,49032,49033],{"class":31,"line":33215},[29,49034,33078],{"class":367},[29,49036,49037,49039,49041,49043,49045,49047,49049],{"class":31,"line":33220},[29,49038,36547],{"class":309},[29,49040,9652],{"class":305},[29,49042,36552],{"class":309},[29,49044,763],{"class":305},[29,49046,32895],{"class":309},[29,49048,499],{"class":39},[29,49050,316],{"class":309},[29,49052,49053,49055,49057,49059,49061],{"class":31,"line":33226},[29,49054,36565],{"class":309},[29,49056,9652],{"class":305},[29,49058,32916],{"class":309},[29,49060,3124],{"class":305},[29,49062,32921],{"class":309},[29,49064,49065],{"class":31,"line":33275},[29,49066,36578],{"class":367},[29,49068,49069,49071,49073,49075,49077],{"class":31,"line":33322},[29,49070,36583],{"class":309},[29,49072,9652],{"class":305},[29,49074,32895],{"class":309},[29,49076,499],{"class":39},[29,49078,316],{"class":309},[29,49080,49081],{"class":31,"line":33327},[29,49082,33140],{"class":367},[29,49084,49085],{"class":31,"line":33333},[29,49086,33146],{"class":367},[29,49088,49089,49091,49093],{"class":31,"line":33352},[29,49090,33152],{"class":309},[29,49092,892],{"class":305},[29,49094,33157],{"class":309},[29,49096,49097],{"class":31,"line":33358},[29,49098,33163],{"class":367},[29,49100,49101],{"class":31,"line":33378},[29,49102,33169],{"class":367},[29,49104,49105,49107,49109],{"class":31,"line":33384},[29,49106,33175],{"class":309},[29,49108,892],{"class":305},[29,49110,33157],{"class":309},[29,49112,49113],{"class":31,"line":33390},[29,49114,33185],{"class":367},[29,49116,49117,49119,49121],{"class":31,"line":33400},[29,49118,33191],{"class":309},[29,49120,892],{"class":305},[29,49122,33196],{"class":309},[29,49124,49125],{"class":31,"line":33405},[29,49126,33202],{"class":367},[29,49128,49129,49131,49133],{"class":31,"line":33411},[29,49130,33208],{"class":309},[29,49132,892],{"class":305},[29,49134,33196],{"class":309},[29,49136,49137],{"class":31,"line":33427},[29,49138,2575],{"emptyLinePlaceholder":233},[29,49140,49141],{"class":31,"line":33472},[29,49142,33223],{"class":367},[29,49144,49145,49147,49149,49151,49153,49155,49157,49159,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183],{"class":31,"line":33478},[29,49146,32580],{"class":39},[29,49148,310],{"class":309},[29,49150,3767],{"class":103},[29,49152,32588],{"class":39},[29,49154,33237],{"class":103},[29,49156,1204],{"class":39},[29,49158,33242],{"class":305},[29,49160,1254],{"class":39},[29,49162,33247],{"class":103},[29,49164,1204],{"class":39},[29,49166,33242],{"class":305},[29,49168,1254],{"class":39},[29,49170,3767],{"class":103},[29,49172,33258],{"class":309},[29,49174,840],{"class":305},[29,49176,525],{"class":39},[29,49178,33265],{"class":309},[29,49180,840],{"class":305},[29,49182,525],{"class":39},[29,49184,33272],{"class":309},[29,49186,49187,49189,49191,49193,49195,49197,49199,49201,49203,49205,49207,49209,49211,49213,49215,49217,49219,49221,49223,49225],{"class":31,"line":33484},[29,49188,32580],{"class":39},[29,49190,310],{"class":309},[29,49192,3767],{"class":103},[29,49194,32588],{"class":39},[29,49196,33286],{"class":103},[29,49198,1204],{"class":39},[29,49200,33242],{"class":305},[29,49202,1254],{"class":39},[29,49204,33295],{"class":103},[29,49206,1204],{"class":39},[29,49208,33242],{"class":305},[29,49210,1254],{"class":39},[29,49212,3767],{"class":103},[29,49214,33306],{"class":309},[29,49216,840],{"class":305},[29,49218,525],{"class":39},[29,49220,33313],{"class":309},[29,49222,840],{"class":305},[29,49224,525],{"class":39},[29,49226,33272],{"class":309},[29,49228,49229],{"class":31,"line":33490},[29,49230,2575],{"emptyLinePlaceholder":233},[29,49232,49233],{"class":31,"line":33501},[29,49234,33330],{"class":367},[29,49236,49237,49239,49241,49243,49245,49247,49249],{"class":31,"line":33507},[29,49238,2672],{"class":305},[29,49240,33338],{"class":309},[29,49242,840],{"class":305},[29,49244,525],{"class":39},[29,49246,1248],{"class":309},[29,49248,1268],{"class":305},[29,49250,33349],{"class":309},[29,49252,49253],{"class":31,"line":33513},[29,49254,33355],{"class":367},[29,49256,49257,49259,49261,49263,49265,49267,49269],{"class":31,"line":33519},[29,49258,33361],{"class":309},[29,49260,349],{"class":39},[29,49262,355],{"class":305},[29,49264,33368],{"class":309},[29,49266,840],{"class":305},[29,49268,525],{"class":39},[29,49270,33375],{"class":309},[29,49272,49273],{"class":31,"line":33537},[29,49274,33381],{"class":367},[29,49276,49277],{"class":31,"line":33551},[29,49278,33387],{"class":367},[29,49280,49281,49283,49285],{"class":31,"line":33560},[29,49282,33393],{"class":309},[29,49284,355],{"class":305},[29,49286,32443],{"class":309},[29,49288,49289],{"class":31,"line":33569},[29,49290,2575],{"emptyLinePlaceholder":233},[29,49292,49293],{"class":31,"line":33578},[29,49294,33408],{"class":367},[29,49296,49297,49299,49301,49303,49305],{"class":31,"line":33587},[29,49298,33414],{"class":309},[29,49300,355],{"class":305},[29,49302,33419],{"class":309},[29,49304,840],{"class":305},[29,49306,33424],{"class":309},[29,49308,49309,49311,49313,49315,49317,49319,49321,49323,49325,49327,49329,49331,49333,49335,49337,49339,49341,49343],{"class":31,"line":33593},[29,49310,32580],{"class":39},[29,49312,310],{"class":309},[29,49314,33434],{"class":103},[29,49316,1204],{"class":39},[29,49318,33439],{"class":305},[29,49320,1254],{"class":39},[29,49322,852],{"class":103},[29,49324,1204],{"class":39},[29,49326,33439],{"class":305},[29,49328,1254],{"class":39},[29,49330,33452],{"class":103},[29,49332,33455],{"class":309},[29,49334,33458],{"class":305},[29,49336,1215],{"class":39},[29,49338,33463],{"class":309},[29,49340,636],{"class":305},[29,49342,1215],{"class":39},[29,49344,30626],{"class":309},[29,49346,49347],{"class":31,"line":33599},[29,49348,36862],{"class":367},[29,49350,49351],{"class":31,"line":33607},[29,49352,36867],{"class":367},[29,49354,49355,49357,49359],{"class":31,"line":33612},[29,49356,36872],{"class":309},[29,49358,33496],{"class":103},[29,49360,316],{"class":309},[29,49362,49363],{"class":31,"line":33618},[29,49364,33516],{"class":367},[29,49366,49367,49369,49371,49373,49375,49377],{"class":31,"line":33629},[29,49368,33522],{"class":309},[29,49370,355],{"class":305},[29,49372,33527],{"class":309},[29,49374,33530],{"class":5391},[29,49376,355],{"class":305},[29,49378,1722],{"class":309},[29,49380,49381,49383,49385,49387],{"class":31,"line":33635},[29,49382,33540],{"class":103},[29,49384,1167],{"class":309},[29,49386,33545],{"class":39},[29,49388,33548],{"class":309},[29,49390,49391,49393],{"class":31,"line":33655},[29,49392,33554],{"class":103},[29,49394,33557],{"class":309},[29,49396,49397,49399],{"class":31,"line":33661},[29,49398,33563],{"class":103},[29,49400,33566],{"class":309},[29,49402,49403,49405],{"class":31,"line":33667},[29,49404,33572],{"class":103},[29,49406,33575],{"class":309},[29,49408,49409,49411],{"class":31,"line":33673},[29,49410,33581],{"class":103},[29,49412,33584],{"class":309},[29,49414,49415],{"class":31,"line":33690},[29,49416,33590],{"class":309},[29,49418,49419],{"class":31,"line":33696},[29,49420,33596],{"class":367},[29,49422,49423,49425],{"class":31,"line":33702},[29,49424,4265],{"class":305},[29,49426,33604],{"class":309},[29,49428,49429],{"class":31,"line":33708},[29,49430,2575],{"emptyLinePlaceholder":233},[29,49432,49433],{"class":31,"line":33714},[29,49434,33615],{"class":367},[29,49436,49437,49439,49441],{"class":31,"line":33720},[29,49438,32076],{"class":305},[29,49440,33623],{"class":35},[29,49442,33626],{"class":309},[29,49444,49445],{"class":31,"line":33747},[29,49446,33632],{"class":367},[29,49448,49449,49451,49453,49455,49457,49459,49461,49463],{"class":31,"line":33771},[29,49450,33638],{"class":309},[29,49452,31822],{"class":5391},[29,49454,355],{"class":305},[29,49456,310],{"class":309},[29,49458,806],{"class":39},[29,49460,686],{"class":309},[29,49462,601],{"class":39},[29,49464,30626],{"class":309},[29,49466,49467],{"class":31,"line":33777},[29,49468,33658],{"class":367},[29,49470,49471],{"class":31,"line":33783},[29,49472,33664],{"class":367},[29,49474,49475],{"class":31,"line":33789},[29,49476,33670],{"class":367},[29,49478,49479,49481,49483,49485,49487,49489,49491],{"class":31,"line":33800},[29,49480,31856],{"class":309},[29,49482,525],{"class":39},[29,49484,686],{"class":309},[29,49486,386],{"class":39},[29,49488,686],{"class":309},[29,49490,525],{"class":39},[29,49492,316],{"class":309},[29,49494,49495],{"class":31,"line":33811},[29,49496,33693],{"class":367},[29,49498,49499],{"class":31,"line":33817},[29,49500,33699],{"class":367},[29,49502,49503],{"class":31,"line":33834},[29,49504,33705],{"class":367},[29,49506,49507],{"class":31,"line":33857},[29,49508,33711],{"class":367},[29,49510,49511],{"class":31,"line":33880},[29,49512,33717],{"class":367},[29,49514,49515,49517,49519,49521,49523,49525,49527,49529,49531],{"class":31,"line":33886},[29,49516,33723],{"class":309},[29,49518,33726],{"class":103},[29,49520,33729],{"class":309},[29,49522,33732],{"class":103},[29,49524,686],{"class":309},[29,49526,33737],{"class":5391},[29,49528,355],{"class":305},[29,49530,33742],{"class":103},[29,49532,316],{"class":309},[29,49534,49535,49537,49539,49541,49543,49545,49547,49549,49551],{"class":31,"line":33891},[29,49536,33723],{"class":309},[29,49538,33726],{"class":103},[29,49540,33754],{"class":309},[29,49542,33757],{"class":103},[29,49544,686],{"class":309},[29,49546,33737],{"class":5391},[29,49548,355],{"class":305},[29,49550,33766],{"class":103},[29,49552,316],{"class":309},[29,49554,49555],{"class":31,"line":33900},[29,49556,33774],{"class":367},[29,49558,49559],{"class":31,"line":33910},[29,49560,33780],{"class":309},[29,49562,49563],{"class":31,"line":33916},[29,49564,33786],{"class":367},[29,49566,49567,49569,49571],{"class":31,"line":33921},[29,49568,33792],{"class":309},[29,49570,33795],{"class":103},[29,49572,316],{"class":309},[29,49574,49575,49577,49579],{"class":31,"line":33927},[29,49576,33803],{"class":309},[29,49578,33806],{"class":103},[29,49580,316],{"class":309},[29,49582,49583],{"class":31,"line":33940},[29,49584,33814],{"class":367},[29,49586,49587,49589,49591,49593,49595,49597,49599],{"class":31,"line":33946},[29,49588,31856],{"class":309},[29,49590,525],{"class":39},[29,49592,686],{"class":309},[29,49594,386],{"class":39},[29,49596,686],{"class":309},[29,49598,386],{"class":39},[29,49600,316],{"class":309},[29,49602,49603,49605,49607,49609,49611,49613,49615,49617,49619],{"class":31,"line":33957},[29,49604,33723],{"class":309},[29,49606,33726],{"class":103},[29,49608,33841],{"class":309},[29,49610,33732],{"class":103},[29,49612,686],{"class":309},[29,49614,33737],{"class":5391},[29,49616,355],{"class":305},[29,49618,33852],{"class":103},[29,49620,316],{"class":309},[29,49622,49623,49625,49627,49629,49631,49633,49635,49637,49639],{"class":31,"line":33968},[29,49624,33723],{"class":309},[29,49626,33726],{"class":103},[29,49628,33864],{"class":309},[29,49630,33757],{"class":103},[29,49632,686],{"class":309},[29,49634,33737],{"class":5391},[29,49636,355],{"class":305},[29,49638,33875],{"class":103},[29,49640,316],{"class":309},[29,49642,49643],{"class":31,"line":33987},[29,49644,33883],{"class":367},[29,49646,49648],{"class":31,"line":49647},219,[29,49649,33780],{"class":309},[29,49651,49653,49655,49657],{"class":31,"line":49652},220,[29,49654,33792],{"class":309},[29,49656,33726],{"class":103},[29,49658,316],{"class":309},[29,49660,49662,49664,49666],{"class":31,"line":49661},221,[29,49663,33803],{"class":309},[29,49665,33905],{"class":103},[29,49667,316],{"class":309},[29,49669,49671],{"class":31,"line":49670},222,[29,49672,33913],{"class":309},[29,49674,49676],{"class":31,"line":49675},223,[29,49677,2575],{"emptyLinePlaceholder":233},[29,49679,49681],{"class":31,"line":49680},224,[29,49682,33924],{"class":367},[29,49684,49686,49688,49690,49692,49694],{"class":31,"line":49685},225,[29,49687,1707],{"class":305},[29,49689,31349],{"class":39},[29,49691,3124],{"class":305},[29,49693,31354],{"class":103},[29,49695,3914],{"class":309},[29,49697,49699],{"class":31,"line":49698},226,[29,49700,33943],{"class":367},[29,49702,49704,49706,49708],{"class":31,"line":49703},227,[29,49705,44675],{"class":309},[29,49707,355],{"class":305},[29,49709,44680],{"class":309},[29,49711,49713,49715,49717],{"class":31,"line":49712},228,[29,49714,33960],{"class":309},[29,49716,355],{"class":305},[29,49718,33965],{"class":309},[29,49720,49722,49724,49726,49728,49730,49732,49734],{"class":31,"line":49721},229,[29,49723,33522],{"class":309},[29,49725,355],{"class":305},[29,49727,44697],{"class":309},[29,49729,33978],{"class":5391},[29,49731,355],{"class":305},[29,49733,1215],{"class":39},[29,49735,316],{"class":309},[29,49737,49739],{"class":31,"line":49738},230,[29,49740,33990],{"class":309},[22173,49742,49744],{"id":49743},"_242测试代码","2.4.2.测试代码",[171,49746,49747],{},"使用测试集进行测试与推理",[19,49749,49751],{"className":30507,"code":49750,"language":30509,"meta":24,"style":24},"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",[26,49752,49753,49759,49769,49779,49790,49800,49804,49808,49816,49821,49825,49842,49846,49850,49854,49858,49862,49894,49898,49906,49910,49922,49926,49930,49934,49938,49942,49946,49950,49954,49972,49986,49990,50000,50010,50020,50026,50030,50034,50042,50046,50062,50070,50074,50078,50086,50094,50098,50102,50106,50110,50116,50120,50130,50138,50146,50150,50154,50158,50166,50170,50186,50190,50194,50198,50210,50214,50226,50230,50234,50246,50250,50260,50264,50268,50280,50284,50292,50296,50300,50308,50312,50320,50324,50328,50332,50336,50340,50356,50364,50368,50372,50390,50396,50400,50410,50418,50426,50430,50434,50438,50442,50450,50454,50470,50474,50482,50490],{"__ignoreMap":24},[29,49754,49755,49757],{"class":31,"line":32},[29,49756,30521],{"class":305},[29,49758,30524],{"class":309},[29,49760,49761,49763,49765,49767],{"class":31,"line":43},[29,49762,30521],{"class":305},[29,49764,31544],{"class":309},[29,49766,31512],{"class":305},[29,49768,31549],{"class":309},[29,49770,49771,49773,49775,49777],{"class":31,"line":51},[29,49772,30866],{"class":305},[29,49774,31527],{"class":309},[29,49776,30521],{"class":305},[29,49778,31532],{"class":309},[29,49780,49781,49783,49785,49787],{"class":31,"line":59},[29,49782,30866],{"class":305},[29,49784,31497],{"class":309},[29,49786,30521],{"class":305},[29,49788,49789],{"class":309}," ImageFolder\n",[29,49791,49792,49794,49796,49798],{"class":31,"line":67},[29,49793,30866],{"class":305},[29,49795,32043],{"class":309},[29,49797,30521],{"class":305},[29,49799,44769],{"class":309},[29,49801,49802],{"class":31,"line":75},[29,49803,2575],{"emptyLinePlaceholder":233},[29,49805,49806],{"class":31,"line":83},[29,49807,34080],{"class":367},[29,49809,49810,49812,49814],{"class":31,"line":158},[29,49811,32076],{"class":305},[29,49813,34087],{"class":35},[29,49815,32082],{"class":309},[29,49817,49818],{"class":31,"line":166},[29,49819,49820],{"class":367},"   # 导入自己的数据集，并进行数据处理\n",[29,49822,49823],{"class":31,"line":1505},[29,49824,48090],{"class":367},[29,49826,49827,49829,49831,49833,49835,49837,49840],{"class":31,"line":1788},[29,49828,48095],{"class":39},[29,49830,355],{"class":305},[29,49832,978],{"class":305},[29,49834,559],{"class":103},[29,49836,866],{"class":39},[29,49838,49839],{"class":48106},"\u002Fdata\u002Ftest",[29,49841,25262],{"class":103},[29,49843,49844],{"class":31,"line":1793},[29,49845,2575],{"emptyLinePlaceholder":233},[29,49847,49848],{"class":31,"line":1799},[29,49849,48118],{"class":367},[29,49851,49852],{"class":31,"line":1804},[29,49853,48123],{"class":367},[29,49855,49856],{"class":31,"line":1818},[29,49857,48128],{"class":367},[29,49859,49860],{"class":31,"line":1823},[29,49861,48133],{"class":367},[29,49863,49864,49866,49868,49870,49872,49874,49876,49878,49880,49882,49884,49886,49888,49890,49892],{"class":31,"line":1829},[29,49865,48138],{"class":309},[29,49867,355],{"class":305},[29,49869,48143],{"class":309},[29,49871,48146],{"class":39},[29,49873,686],{"class":309},[29,49875,48151],{"class":39},[29,49877,686],{"class":309},[29,49879,48156],{"class":39},[29,49881,48159],{"class":309},[29,49883,48162],{"class":39},[29,49885,686],{"class":309},[29,49887,48167],{"class":39},[29,49889,686],{"class":309},[29,49891,48172],{"class":39},[29,49893,4832],{"class":309},[29,49895,49896],{"class":31,"line":1850},[29,49897,48179],{"class":367},[29,49899,49900,49902,49904],{"class":31,"line":1855},[29,49901,48184],{"class":309},[29,49903,355],{"class":305},[29,49905,48189],{"class":309},[29,49907,49908],{"class":31,"line":1869},[29,49909,48194],{"class":367},[29,49911,49912,49914,49916,49918,49920],{"class":31,"line":1874},[29,49913,48199],{"class":309},[29,49915,31630],{"class":39},[29,49917,686],{"class":309},[29,49919,31630],{"class":39},[29,49921,42751],{"class":309},[29,49923,49924],{"class":31,"line":1903},[29,49925,48212],{"class":367},[29,49927,49928],{"class":31,"line":1908},[29,49929,48217],{"class":309},[29,49931,49932],{"class":31,"line":1925},[29,49933,48222],{"class":309},[29,49935,49936],{"class":31,"line":1930},[29,49937,48227],{"class":367},[29,49939,49940],{"class":31,"line":1935},[29,49941,48232],{"class":367},[29,49943,49944],{"class":31,"line":1940},[29,49945,2575],{"emptyLinePlaceholder":233},[29,49947,49948],{"class":31,"line":1954},[29,49949,48241],{"class":367},[29,49951,49952],{"class":31,"line":1959},[29,49953,48246],{"class":367},[29,49955,49956,49958,49960,49962,49964,49966,49968,49970],{"class":31,"line":2752},[29,49957,34094],{"class":309},[29,49959,355],{"class":305},[29,49961,48255],{"class":309},[29,49963,48258],{"class":39},[29,49965,686],{"class":309},[29,49967,48263],{"class":5391},[29,49969,355],{"class":305},[29,49971,48268],{"class":309},[29,49973,49974,49976,49978,49980,49982,49984],{"class":31,"line":2766},[29,49975,34151],{"class":309},[29,49977,355],{"class":305},[29,49979,31663],{"class":309},[29,49981,31666],{"class":5391},[29,49983,355],{"class":305},[29,49985,34162],{"class":309},[29,49987,49988],{"class":31,"line":2774},[29,49989,34167],{"class":367},[29,49991,49992,49994,49996,49998],{"class":31,"line":2779},[29,49993,34172],{"class":5391},[29,49995,355],{"class":305},[29,49997,525],{"class":39},[29,49999,31595],{"class":309},[29,50001,50002,50004,50006,50008],{"class":31,"line":2785},[29,50003,34183],{"class":5391},[29,50005,355],{"class":305},[29,50007,31605],{"class":39},[29,50009,31595],{"class":309},[29,50011,50012,50014,50016,50018],{"class":31,"line":2791},[29,50013,34194],{"class":5391},[29,50015,355],{"class":305},[29,50017,499],{"class":39},[29,50019,316],{"class":309},[29,50021,50022,50024],{"class":31,"line":2796},[29,50023,4265],{"class":305},[29,50025,34207],{"class":309},[29,50027,50028],{"class":31,"line":8123},[29,50029,2575],{"emptyLinePlaceholder":233},[29,50031,50032],{"class":31,"line":8147},[29,50033,34216],{"class":367},[29,50035,50036,50038,50040],{"class":31,"line":8152},[29,50037,32076],{"class":305},[29,50039,34223],{"class":35},[29,50041,34226],{"class":309},[29,50043,50044],{"class":31,"line":8158},[29,50045,34231],{"class":367},[29,50047,50048,50050,50052,50054,50056,50058,50060],{"class":31,"line":8185},[29,50049,31366],{"class":309},[29,50051,355],{"class":305},[29,50053,31373],{"class":103},[29,50055,1880],{"class":305},[29,50057,31378],{"class":309},[29,50059,1877],{"class":305},[29,50061,34248],{"class":103},[29,50063,50064,50066,50068],{"class":31,"line":8190},[29,50065,31418],{"class":309},[29,50067,355],{"class":305},[29,50069,32418],{"class":309},[29,50071,50072],{"class":31,"line":8196},[29,50073,2575],{"emptyLinePlaceholder":233},[29,50075,50076],{"class":31,"line":8208},[29,50077,34265],{"class":367},[29,50079,50080,50082,50084],{"class":31,"line":8220},[29,50081,34270],{"class":309},[29,50083,355],{"class":305},[29,50085,32471],{"class":39},[29,50087,50088,50090,50092],{"class":31,"line":8232},[29,50089,34279],{"class":309},[29,50091,355],{"class":305},[29,50093,3260],{"class":39},[29,50095,50096],{"class":31,"line":9891},[29,50097,2575],{"emptyLinePlaceholder":233},[29,50099,50100],{"class":31,"line":9916},[29,50101,34292],{"class":367},[29,50103,50104],{"class":31,"line":9939},[29,50105,34297],{"class":367},[29,50107,50108],{"class":31,"line":9963},[29,50109,34302],{"class":367},[29,50111,50112,50114],{"class":31,"line":9968},[29,50113,34307],{"class":305},[29,50115,33013],{"class":309},[29,50117,50118],{"class":31,"line":9973},[29,50119,34314],{"class":367},[29,50121,50122,50124,50126,50128],{"class":31,"line":9978},[29,50123,3578],{"class":305},[29,50125,34321],{"class":309},[29,50127,26172],{"class":305},[29,50129,34326],{"class":309},[29,50131,50132,50134,50136],{"class":31,"line":9987},[29,50133,34331],{"class":309},[29,50135,355],{"class":305},[29,50137,34336],{"class":309},[29,50139,50140,50142,50144],{"class":31,"line":9992},[29,50141,34341],{"class":309},[29,50143,355],{"class":305},[29,50145,34346],{"class":309},[29,50147,50148],{"class":31,"line":9998},[29,50149,34351],{"class":367},[29,50151,50152],{"class":31,"line":10019},[29,50153,33004],{"class":309},[29,50155,50156],{"class":31,"line":10025},[29,50157,34360],{"class":367},[29,50159,50160,50162,50164],{"class":31,"line":10039},[29,50161,32789],{"class":309},[29,50163,355],{"class":305},[29,50165,34369],{"class":309},[29,50167,50168],{"class":31,"line":10045},[29,50169,34374],{"class":367},[29,50171,50172,50174,50176,50178,50180,50182,50184],{"class":31,"line":10072},[29,50173,32806],{"class":309},[29,50175,355],{"class":305},[29,50177,32811],{"class":309},[29,50179,32814],{"class":5391},[29,50181,355],{"class":305},[29,50183,525],{"class":39},[29,50185,316],{"class":309},[29,50187,50188],{"class":31,"line":10081},[29,50189,34395],{"class":367},[29,50191,50192],{"class":31,"line":10087},[29,50193,34400],{"class":367},[29,50195,50196],{"class":31,"line":10095},[29,50197,34405],{"class":367},[29,50199,50200,50202,50204,50206,50208],{"class":31,"line":10100},[29,50201,34410],{"class":309},[29,50203,9652],{"class":305},[29,50205,32916],{"class":309},[29,50207,3124],{"class":305},[29,50209,34419],{"class":309},[29,50211,50212],{"class":31,"line":16779},[29,50213,34424],{"class":367},[29,50215,50216,50218,50220,50222,50224],{"class":31,"line":16785},[29,50217,34429],{"class":309},[29,50219,9652],{"class":305},[29,50221,34434],{"class":309},[29,50223,499],{"class":39},[29,50225,316],{"class":309},[29,50227,50228],{"class":31,"line":16808},[29,50229,2575],{"emptyLinePlaceholder":233},[29,50231,50232],{"class":31,"line":16814},[29,50233,34447],{"class":367},[29,50235,50236,50238,50240,50242,50244],{"class":31,"line":16837},[29,50237,34452],{"class":309},[29,50239,355],{"class":305},[29,50241,34457],{"class":309},[29,50243,892],{"class":305},[29,50245,34462],{"class":309},[29,50247,50248],{"class":31,"line":16851},[29,50249,34467],{"class":367},[29,50251,50252,50254,50256,50258],{"class":31,"line":16871},[29,50253,32580],{"class":39},[29,50255,310],{"class":309},[29,50257,34476],{"class":103},[29,50259,34479],{"class":309},[29,50261,50262],{"class":31,"line":16877},[29,50263,2575],{"emptyLinePlaceholder":233},[29,50265,50266],{"class":31,"line":16888},[29,50267,34488],{"class":367},[29,50269,50270,50272,50274,50276,50278],{"class":31,"line":16911},[29,50271,1707],{"class":305},[29,50273,31349],{"class":39},[29,50275,3124],{"class":305},[29,50277,31354],{"class":103},[29,50279,3914],{"class":309},[29,50281,50282],{"class":31,"line":16933},[29,50283,34505],{"class":367},[29,50285,50286,50288,50290],{"class":31,"line":16938},[29,50287,31418],{"class":309},[29,50289,355],{"class":305},[29,50291,44680],{"class":309},[29,50293,50294],{"class":31,"line":16944},[29,50295,34518],{"class":367},[29,50297,50298],{"class":31,"line":16958},[29,50299,34523],{"class":367},[29,50301,50302,50304,50306],{"class":31,"line":16971},[29,50303,34528],{"class":309},[29,50305,34531],{"class":103},[29,50307,30626],{"class":309},[29,50309,50310],{"class":31,"line":16976},[29,50311,34538],{"class":367},[29,50313,50314,50316,50318],{"class":31,"line":16990},[29,50315,34151],{"class":309},[29,50317,355],{"class":305},[29,50319,34547],{"class":309},[29,50321,50322],{"class":31,"line":16995},[29,50323,34552],{"class":367},[29,50325,50326],{"class":31,"line":17001},[29,50327,34557],{"class":309},[29,50329,50330],{"class":31,"line":17006},[29,50331,2575],{"emptyLinePlaceholder":233},[29,50333,50334],{"class":31,"line":17020},[29,50335,34566],{"class":367},[29,50337,50338],{"class":31,"line":17025},[29,50339,34571],{"class":367},[29,50341,50342,50344,50346,50348,50350,50352,50354],{"class":31,"line":17030},[29,50343,31366],{"class":309},[29,50345,355],{"class":305},[29,50347,31373],{"class":103},[29,50349,1880],{"class":305},[29,50351,31378],{"class":309},[29,50353,1877],{"class":305},[29,50355,34248],{"class":103},[29,50357,50358,50360,50362],{"class":31,"line":17044},[29,50359,31418],{"class":309},[29,50361,355],{"class":305},[29,50363,32418],{"class":309},[29,50365,50366],{"class":31,"line":17056},[29,50367,34600],{"class":367},[29,50369,50370],{"class":31,"line":17061},[29,50371,34605],{"class":367},[29,50373,50374,50376,50378,50380,50383,50385,50388],{"class":31,"line":17074},[29,50375,34610],{"class":309},[29,50377,355],{"class":305},[29,50379,1198],{"class":309},[29,50381,50382],{"class":103},"'猫'",[29,50384,686],{"class":309},[29,50386,50387],{"class":103},"'狗'",[29,50389,33375],{"class":309},[29,50391,50392,50394],{"class":31,"line":17079},[29,50393,34307],{"class":305},[29,50395,33013],{"class":309},[29,50397,50398],{"class":31,"line":17084},[29,50399,34675],{"class":367},[29,50401,50402,50404,50406,50408],{"class":31,"line":17089},[29,50403,3578],{"class":305},[29,50405,34682],{"class":309},[29,50407,26172],{"class":305},[29,50409,34326],{"class":309},[29,50411,50412,50414,50416],{"class":31,"line":17102},[29,50413,32739],{"class":309},[29,50415,355],{"class":305},[29,50417,32744],{"class":309},[29,50419,50420,50422,50424],{"class":31,"line":17107},[29,50421,32754],{"class":309},[29,50423,355],{"class":305},[29,50425,32759],{"class":309},[29,50427,50428],{"class":31,"line":32762},[29,50429,2575],{"emptyLinePlaceholder":233},[29,50431,50432],{"class":31,"line":32768},[29,50433,34711],{"class":367},[29,50435,50436],{"class":31,"line":32774},[29,50437,33004],{"class":309},[29,50439,50440],{"class":31,"line":32780},[29,50441,34720],{"class":367},[29,50443,50444,50446,50448],{"class":31,"line":32786},[29,50445,32789],{"class":309},[29,50447,355],{"class":305},[29,50449,32794],{"class":309},[29,50451,50452],{"class":31,"line":32797},[29,50453,34733],{"class":367},[29,50455,50456,50458,50460,50462,50464,50466,50468],{"class":31,"line":32803},[29,50457,32806],{"class":309},[29,50459,355],{"class":305},[29,50461,32811],{"class":309},[29,50463,32814],{"class":5391},[29,50465,355],{"class":305},[29,50467,525],{"class":39},[29,50469,316],{"class":309},[29,50471,50472],{"class":31,"line":32823},[29,50473,34754],{"class":367},[29,50475,50476,50478,50480],{"class":31,"line":32829},[29,50477,34759],{"class":309},[29,50479,355],{"class":305},[29,50481,34764],{"class":309},[29,50483,50484,50486,50488],{"class":31,"line":32840},[29,50485,34769],{"class":309},[29,50487,355],{"class":305},[29,50489,34774],{"class":309},[29,50491,50492,50494,50496,50498,50500,50502,50504,50506],{"class":31,"line":32846},[29,50493,34779],{"class":39},[29,50495,310],{"class":309},[29,50497,34784],{"class":103},[29,50499,34787],{"class":309},[29,50501,34790],{"class":103},[29,50503,686],{"class":309},[29,50505,34795],{"class":103},[29,50507,34798],{"class":309},[223,50509,50510],{},"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":24,"searchDepth":43,"depth":43,"links":50512},[50513,50514,50515,50516],{"id":30720,"depth":51,"text":30721},{"id":37968,"depth":51,"text":37969},{"id":41401,"depth":51,"text":41402},{"id":45410,"depth":51,"text":45411},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30712,"description":230},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50523,"title":50524,"body":50525,"description":230,"extension":231,"meta":50532,"navigation":233,"path":50533,"seo":50534,"stem":50535,"__hash__":50536},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50526,"toc":50530},[50527],[10,50528,50524],{"id":50529},"_3yolo模型学习",{"title":24,"searchDepth":43,"depth":43,"links":50531},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50524,"description":230},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50538,"title":50539,"body":50540,"description":50547,"extension":231,"meta":50548,"navigation":233,"path":50550,"seo":50551,"stem":50552,"__hash__":50553},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50541,"toc":50545},[50542],[171,50543,50544],{},"yolo模型还未补充",{"title":24,"searchDepth":43,"depth":43,"links":50546},[],"深度学习学习",{"category":50549},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50539,"description":50547},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50555,"title":50556,"body":50557,"description":230,"extension":231,"meta":50582,"navigation":233,"path":50583,"seo":50584,"stem":50585,"__hash__":50586},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50558,"toc":50580},[50559,50562,50565,50570,50577],[10,50560,50556],{"id":50561},"_1工具",[171,50563,50564],{},"提示错误插件：有问题会提前报错",[171,50566,50567],{},[1638,50568],{"alt":24,"src":50569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[171,50571,50572],{},[546,50573,50576],{"href":50574,"rel":50575},"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",[24038],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[171,50578,50579],{},"alt键加上下箭头可以实现语句的移动",{"title":24,"searchDepth":43,"depth":43,"links":50581},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50556,"description":230},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50588,"title":50589,"body":50590,"description":230,"extension":231,"meta":53454,"navigation":233,"path":53455,"seo":53456,"stem":53457,"__hash__":53458},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50591,"toc":53405},[50592,50595,50599,50603,50608,50611,50616,50620,50627,50632,50639,50644,50651,50656,50660,50665,50668,50672,50677,50681,50686,50689,50692,50695,50698,50701,50704,50707,50710,50715,50720,50725,50729,50732,50735,50739,50744,50747,50755,50760,50777,50785,50790,50795,50800,50805,50810,50813,50818,50823,50827,50836,50841,50846,50850,50855,50858,50862,50867,50875,50880,50885,50888,50893,50898,50903,50906,50909,50912,50917,50922,50925,50930,50933,50938,50941,50944,50947,50952,50955,50958,50973,50978,50983,50988,50991,50994,50997,51011,51014,51019,51024,51027,51030,51033,51036,51039,51042,51045,51049,51053,51058,51062,51065,51070,51075,51078,51083,51086,51090,51095,51098,51101,51104,51107,51110,51113,51116,51119,51122,51126,51131,51136,51141,51144,51147,51151,51156,51159,51163,51166,51169,51174,51177,51180,51184,51188,51191,51196,51201,51204,51233,51238,51243,51248,51253,51257,51262,51266,51271,51274,51278,51282,51287,51291,51296,51301,51305,51310,51313,51315,51318,51323,51327,51332,51336,51340,51345,51350,51355,51360,51364,51369,51374,51379,51382,51385,51390,51393,51398,51403,51408,51413,51417,52224,52228,52571,52576,52579,52582,52585,52588,52591,52594,52597,52600,52602,52605,52607,52610,52614,52619,52622,52625,52628,52632,52637,52642,52662,52665,52669,52674,52679,52696,52700,52729,52733,52755,52757,52796,52804,52810,52814,52817,52820,52825,52830,52833,52836,52839,52844,52849,52852,52855,52858,52861,52864,52867,52870,52873,52876,52879,52882,52884,52887,52890,52893,52896,52899,52902,52905,52908,52912,52917,52920,52925,52928,52931,52934,52937,52940,52943,52946,52948,52951,52954,52957,52960,52963,52966,52970,52973,52982,52985,52990,52993,52998,53001,53004,53007,53010,53013,53016,53019,53023,53027,53030,53033,53038,53043,53048,53052,53057,53062,53065,53068,53071,53074,53077,53082,53085,53090,53092,53097,53100,53104,53109,53112,53115,53120,53124,53127,53132,53135,53138,53167,53172,53175,53178,53181,53184,53187,53191,53194,53280,53284,53287,53292,53297,53304,53307,53310,53313,53316,53319,53324,53329,53332,53335,53338,53341,53344,53347,53350,53353,53356,53358,53361,53365,53370,53375,53380,53383,53388,53393,53396,53399,53402],[10,50593,50589],{"id":50594},"_2基础语法",[14,50596,50598],{"id":50597},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[275,50600,50602],{"id":50601},"_211-js组成","2.1.1 js组成",[259,50604,50605],{},[178,50606,50607],{},"js是编程语言，html和css不是编程语言，是标记语言",[171,50609,50610],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[259,50612,50613],{"start":43},[178,50614,50615],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[275,50617,50619],{"id":50618},"_212-js书写位置","2.1.2 js书写位置",[259,50621,50622],{},[178,50623,50624],{},[457,50625,50626],{},"内部 JavaScript",[171,50628,50629],{},[1638,50630],{"alt":24,"src":50631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[259,50633,50634],{"start":43},[178,50635,50636],{},[457,50637,50638],{},"外部 JavaScript",[171,50640,50641],{},[1638,50642],{"alt":24,"src":50643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[259,50645,50646],{"start":51},[178,50647,50648],{},[457,50649,50650],{},"内联 JavaScript",[171,50652,50653],{},[1638,50654],{"alt":24,"src":50655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[275,50657,50659],{"id":50658},"_213-javascript注释","2.1.3 JavaScript注释",[171,50661,50662],{},[1638,50663],{"alt":24,"src":50664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[171,50666,50667],{},"alt+shift+a一定要记住！",[275,50669,50671],{"id":50670},"_214-javascript结束符","2.1.4 JavaScript结束符",[171,50673,50674],{},[1638,50675],{"alt":24,"src":50676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[275,50678,50680],{"id":50679},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[259,50682,50683],{},[178,50684,50685],{},"输出语法：",[171,50687,50688],{},"①document.write('要出的内容')",[171,50690,50691],{},"向body内输出内容；",[171,50693,50694],{},"如果输出的内容写的是标签，也会被解析cheng",[171,50696,50697],{},"②alert('要出的内容')",[171,50699,50700],{},"页面弹出警告对话框",[171,50702,50703],{},"③console.log('控制台打印')",[171,50705,50706],{},"控制台输出语法，程序员调试使用",[171,50708,50709],{},"输入log就行，自动生成：",[171,50711,50712],{},[1638,50713],{"alt":24,"src":50714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[259,50716,50717],{"start":43},[178,50718,50719],{},"输入语法：",[171,50721,50722],{},[1638,50723],{"alt":24,"src":50724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[275,50726,50728],{"id":50727},"_2116-字面量","21.1.6 字面量",[171,50730,50731],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[171,50733,50734],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50736,50738],{"id":50737},"_22-变量","2.2 变量",[259,50740,50741],{},[178,50742,50743],{},"变量声明",[171,50745,50746],{},"let 变量名",[175,50748,50749,50752],{},[178,50750,50751],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[178,50753,50754],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[259,50756,50757],{"start":43},[178,50758,50759],{},"变量赋值",[19,50761,50765],{"className":50762,"code":50763,"language":50764,"meta":24,"style":24},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[26,50766,50767,50772],{"__ignoreMap":24},[29,50768,50769],{"class":31,"line":32},[29,50770,50771],{"class":309},"let age\n",[29,50773,50774],{"class":31,"line":43},[29,50775,50776],{"class":309},"age=18\n",[259,50778,50779,50782],{"start":51},[178,50780,50781],{},"连这些（变量的初始化）：let age=18",[178,50783,50784],{},"更新变量",[171,50786,50787],{},[1638,50788],{"alt":24,"src":50789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[259,50791,50792],{"start":67},[178,50793,50794],{},"声明多个变量",[171,50796,50797],{},[1638,50798],{"alt":24,"src":50799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[259,50801,50802],{"start":75},[178,50803,50804],{},"变量命名规则与规范",[171,50806,50807],{},[1638,50808],{"alt":24,"src":50809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[171,50811,50812],{},"遵守小驼峰！",[259,50814,50815],{"start":83},[178,50816,50817],{},"变量拓展-let和var的区别",[171,50819,50820],{},[1638,50821],{"alt":24,"src":50822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50824,50826],{"id":50825},"_23-数组","2.3 数组",[19,50828,50830],{"className":50762,"code":50829,"language":50764,"meta":24,"style":24},"let arr = []\n",[26,50831,50832],{"__ignoreMap":24},[29,50833,50834],{"class":31,"line":32},[29,50835,50829],{"class":309},[171,50837,50838],{},[1638,50839],{"alt":24,"src":50840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[171,50842,50843],{},[1638,50844],{"alt":24,"src":50845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50847,50849],{"id":50848},"_24-常量","2.4 常量",[171,50851,50852],{},[1638,50853],{"alt":24,"src":50854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[171,50856,50857],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50859,50861],{"id":50860},"_25-数据类型","2.5 数据类型",[171,50863,50864],{},[1638,50865],{"alt":24,"src":50866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[259,50868,50869,50872],{},[178,50870,50871],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[178,50873,50874],{},"算数运算符：",[171,50876,50877],{},[1638,50878],{"alt":24,"src":50879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[259,50881,50882],{"start":51},[178,50883,50884],{},"数字类型（Number）",[171,50886,50887],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[171,50889,50890],{},[1638,50891],{"alt":24,"src":50892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[259,50894,50895],{"start":59},[178,50896,50897],{},"字符串类型（string）",[171,50899,50900],{},[1638,50901],{"alt":24,"src":50902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[171,50904,50905],{},"反引号也是可以使用的",[171,50907,50908],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[171,50910,50911],{},"例如：document.write(\"我今年\"+age+\"岁\")",[259,50913,50914],{"start":67},[178,50915,50916],{},"模板字符串",[171,50918,50919],{},[1638,50920],{"alt":24,"src":50921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[171,50923,50924],{},"类似于python的字符串格式化",[259,50926,50927],{"start":75},[178,50928,50929],{},"布尔类型",[171,50931,50932],{},"true 和 false",[259,50934,50935],{"start":83},[178,50936,50937],{},"未定义类型（underfined）",[171,50939,50940],{},"表示没有赋值",[171,50942,50943],{},"未定义类型是比较特殊的类型，只有一个值undefined",[171,50945,50946],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[259,50948,50949],{"start":158},[178,50950,50951],{},"null（空类型）",[171,50953,50954],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[171,50956,50957],{},"赋值了，但是内容为空",[19,50959,50961],{"className":50762,"code":50960,"language":50764,"meta":24,"style":24},"typeof null\n输出的是'object'，是一个对象数据类型\n",[26,50962,50963,50968],{"__ignoreMap":24},[29,50964,50965],{"class":31,"line":32},[29,50966,50967],{"class":309},"typeof null\n",[29,50969,50970],{"class":31,"line":43},[29,50971,50972],{"class":309},"输出的是'object'，是一个对象数据类型\n",[259,50974,50975],{"start":166},[178,50976,50977],{},"控制台检测数据类型",[171,50979,50980],{},[1638,50981],{"alt":24,"src":50982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[259,50984,50985],{"start":1505},[178,50986,50987],{},"类型转换",[171,50989,50990],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[171,50992,50993],{},"转换方式：隐式转换和显示转换",[171,50995,50996],{},"①隐式转换",[175,50998,50999,51002,51005,51008],{},[178,51000,51001],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[178,51003,51004],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[178,51006,51007],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[178,51009,51010],{},"任何数据和字符串相加结果都是字符串",[171,51012,51013],{},"②显示转换",[171,51015,51016],{},[1638,51017],{"alt":24,"src":51018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[171,51020,51021],{},[1638,51022],{"alt":24,"src":51023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[171,51025,51026],{},"在输入的时候要用好隐式转换，简单写起来",[171,51028,51029],{},"let num = +prompt(’请输入数字：‘)",[171,51031,51032],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[171,51034,51035],{},"console.log(parseInt('12.333px'))",[171,51037,51038],{},"输出为：12",[171,51040,51041],{},"console.log(parseInt('a'a'a12.333px'))",[171,51043,51044],{},"输出：NaN",[14,51046,51048],{"id":51047},"_26-运算符","2.6 运算符",[275,51050,51052],{"id":51051},"_261-赋值运算符","2.6.1 赋值运算符",[171,51054,51055],{},[1638,51056],{"alt":24,"src":51057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[275,51059,51061],{"id":51060},"_262-一元运算符","2.6.2 一元运算符",[171,51063,51064],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[171,51066,51067],{},[1638,51068],{"alt":24,"src":51069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[171,51071,51072],{},[1638,51073],{"alt":24,"src":51074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[171,51076,51077],{},"两者的区别：",[171,51079,51080],{},[1638,51081],{"alt":24,"src":51082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[171,51084,51085],{},"前置先自加；后置后加，代码执行完之后再加",[275,51087,51089],{"id":51088},"_263-比较运算符","2.6.3 比较运算符",[171,51091,51092],{},[1638,51093],{"alt":24,"src":51094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[171,51096,51097],{},"比较运算符也有隐式转换",[171,51099,51100],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[171,51102,51103],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[171,51105,51106],{},"要使用三等，开发的时候",[171,51108,51109],{},"NaN不等于任何人，包括它自己",[171,51111,51112],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[171,51114,51115],{},"7\u002F10=0.7",[171,51117,51118],{},"最后：0.5+0.2=0.7",[171,51120,51121],{},"字符串比较，比较的是字符对应的ASCII码",[275,51123,51125],{"id":51124},"_264-逻辑运算符","2.6.4 逻辑运算符",[171,51127,51128],{},[1638,51129],{"alt":24,"src":51130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[171,51132,51133],{},[1638,51134],{"alt":24,"src":51135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[171,51137,51138],{},[1638,51139],{"alt":24,"src":51140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[171,51142,51143],{},"上述题目选D",[171,51145,51146],{},"与真2假1；或真1假2",[275,51148,51150],{"id":51149},"_265-运算符优先级","2.6.5 运算符优先级",[171,51152,51153],{},[1638,51154],{"alt":24,"src":51155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[171,51157,51158],{},"先算逻辑与，后算逻辑或",[14,51160,51162],{"id":51161},"_27-语句","2.7 语句",[171,51164,51165],{},"表达式：是可以被求值的代码，会有结果给我们",[171,51167,51168],{},"语句：语句是可以被执行的代码，例如prompt()",[171,51170,51171],{},[1638,51172],{"alt":24,"src":51173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[171,51175,51176],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[171,51178,51179],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[275,51181,51183],{"id":51182},"_271-分支语句","2.7.1 分支语句",[22173,51185,51187],{"id":51186},"_2711-if分支语句","2.7.1.1 if分支语句",[171,51189,51190],{},"if语句单行简单的话，可以不写{}，写在一行就行",[259,51192,51193],{},[178,51194,51195],{},"单分支语句",[171,51197,51198],{},[1638,51199],{"alt":24,"src":51200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[171,51202,51203],{},"除了0，所有数字都为真",[19,51205,51207],{"className":50762,"code":51206,"language":50764,"meta":24,"style":24},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[26,51208,51209,51214,51219,51224,51228],{"__ignoreMap":24},[29,51210,51211],{"class":31,"line":32},[29,51212,51213],{"class":309},"if（0) {\n",[29,51215,51216],{"class":31,"line":43},[29,51217,51218],{"class":309},"    let a=1\n",[29,51220,51221],{"class":31,"line":51},[29,51222,51223],{"class":309},"    alert(typeof a)\n",[29,51225,51226],{"class":31,"line":59},[29,51227,1741],{"class":309},[29,51229,51230],{"class":31,"line":67},[29,51231,51232],{"class":309},"不输出，括号为假\n",[259,51234,51235],{"start":43},[178,51236,51237],{},"双分支语句",[171,51239,51240],{},[1638,51241],{"alt":24,"src":51242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[259,51244,51245],{"start":51},[178,51246,51247],{},"多分支语句",[171,51249,51250],{},[1638,51251],{"alt":24,"src":51252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22173,51254,51256],{"id":51255},"_2712-三元运算符","2.7.1.2 三元运算符",[171,51258,51259],{},[1638,51260],{"alt":24,"src":51261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22173,51263,51265],{"id":51264},"_2713-switch语句","2.7.1.3 switch语句",[171,51267,51268],{},[1638,51269],{"alt":24,"src":51270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[171,51272,51273],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[275,51275,51277],{"id":51276},"_272-循环语句","2.7.2 循环语句",[22173,51279,51281],{"id":51280},"_2721-断点演示","2.7.2.1 断点演示",[171,51283,51284],{},[1638,51285],{"alt":24,"src":51286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22173,51288,51290],{"id":51289},"_2722-while循环","2.7.2.2 while循环",[171,51292,51293],{},[1638,51294],{"alt":24,"src":51295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[171,51297,51298],{},[1638,51299],{"alt":24,"src":51300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22173,51302,51304],{"id":51303},"_2723-for循环","2.7.2.3 for循环",[171,51306,51307],{},[1638,51308],{"alt":24,"src":51309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[171,51311,51312],{},"for(;;) {",[171,51314,1254],{},[171,51316,51317],{},"表示无限循环",[171,51319,51320],{},[1638,51321],{"alt":24,"src":51322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22173,51324,51326],{"id":51325},"_2724-循环的退出","2.7.2.4 循环的退出",[171,51328,51329],{},[1638,51330],{"alt":24,"src":51331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51333,51335],{"id":51334},"_28-数组","2.8 数组",[275,51337,51339],{"id":51338},"_281-基础认识","2.8.1 基础认识",[171,51341,51342],{},[1638,51343],{"alt":24,"src":51344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[171,51346,51347],{},[1638,51348],{"alt":24,"src":51349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[171,51351,51352],{},[1638,51353],{"alt":24,"src":51354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[171,51356,51357],{},[1638,51358],{"alt":24,"src":51359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[275,51361,51363],{"id":51362},"_282-操作数组","2.8.2 操作数组",[171,51365,51366],{},[1638,51367],{"alt":24,"src":51368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[259,51370,51371],{},[178,51372,51373],{},"添加元素",[171,51375,51376],{},[1638,51377],{"alt":24,"src":51378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[171,51380,51381],{},"console.log(arr.push('green'))",[171,51383,51384],{},"输出结果：为新数组的长度",[171,51386,51387],{},[1638,51388],{"alt":24,"src":51389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[171,51391,51392],{},"push用的非常多，一定要记住",[259,51394,51395],{},[178,51396,51397],{},"删除元素",[171,51399,51400],{},[1638,51401],{"alt":24,"src":51402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[171,51404,51405],{},[1638,51406],{"alt":24,"src":51407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[171,51409,51410],{},[1638,51411],{"alt":24,"src":51412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[275,51414,51416],{"id":51415},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[19,51418,51420],{"className":50762,"code":51419,"language":50764,"meta":24,"style":24},"\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",[26,51421,51422,51437,51453,51457,51466,51484,51508,51530,51544,51552,51559,51571,51582,51586,51590,51597,51609,51624,51637,51656,51673,51688,51700,51712,51724,51728,51732,51743,51753,51765,51777,51789,51800,51804,51808,51820,51824,51838,51842,51846,51857,51871,51883,51897,51901,51910,51919,51923,51932,51936,51945,51950,51955,51968,51996,52001,52006,52031,52036,52040,52045,52050,52065,52069,52074,52104,52116,52132,52148,52162,52167,52174,52178,52183,52196,52204,52212,52216],{"__ignoreMap":24},[29,51423,51424,51427,51431,51434],{"class":31,"line":32},[29,51425,51426],{"class":309},"\u003C!",[29,51428,51430],{"class":51429},"s9eBZ","DOCTYPE",[29,51432,51433],{"class":35}," html",[29,51435,51436],{"class":309},">\n",[29,51438,51439,51441,51443,51446,51448,51451],{"class":31,"line":43},[29,51440,1218],{"class":309},[29,51442,50764],{"class":51429},[29,51444,51445],{"class":35}," lang",[29,51447,355],{"class":309},[29,51449,51450],{"class":103},"\"en\"",[29,51452,51436],{"class":309},[29,51454,51455],{"class":31,"line":51},[29,51456,2575],{"emptyLinePlaceholder":233},[29,51458,51459,51461,51464],{"class":31,"line":59},[29,51460,1218],{"class":309},[29,51462,51463],{"class":51429},"head",[29,51465,51436],{"class":309},[29,51467,51468,51471,51474,51477,51479,51482],{"class":31,"line":67},[29,51469,51470],{"class":309},"    \u003C",[29,51472,51473],{"class":51429},"meta",[29,51475,51476],{"class":35}," charset",[29,51478,355],{"class":309},[29,51480,51481],{"class":103},"\"UTF-8\"",[29,51483,51436],{"class":309},[29,51485,51486,51488,51490,51493,51495,51498,51501,51503,51506],{"class":31,"line":75},[29,51487,51470],{"class":309},[29,51489,51473],{"class":51429},[29,51491,51492],{"class":35}," http-equiv",[29,51494,355],{"class":309},[29,51496,51497],{"class":103},"\"X-UA-Compatible\"",[29,51499,51500],{"class":35}," content",[29,51502,355],{"class":309},[29,51504,51505],{"class":103},"\"IE=edge\"",[29,51507,51436],{"class":309},[29,51509,51510,51512,51514,51516,51518,51521,51523,51525,51528],{"class":31,"line":83},[29,51511,51470],{"class":309},[29,51513,51473],{"class":51429},[29,51515,15095],{"class":35},[29,51517,355],{"class":309},[29,51519,51520],{"class":103},"\"viewport\"",[29,51522,51500],{"class":35},[29,51524,355],{"class":309},[29,51526,51527],{"class":103},"\"width=device-width, initial-scale=1.0\"",[29,51529,51436],{"class":309},[29,51531,51532,51534,51537,51540,51542],{"class":31,"line":158},[29,51533,51470],{"class":309},[29,51535,51536],{"class":51429},"title",[29,51538,51539],{"class":309},">Document\u003C\u002F",[29,51541,51536],{"class":51429},[29,51543,51436],{"class":309},[29,51545,51546,51548,51550],{"class":31,"line":166},[29,51547,51470],{"class":309},[29,51549,223],{"class":51429},[29,51551,51436],{"class":309},[29,51553,51554,51557],{"class":31,"line":1505},[29,51555,51556],{"class":51429},"        *",[29,51558,15747],{"class":309},[29,51560,51561,51564,51567,51569],{"class":31,"line":1788},[29,51562,51563],{"class":39},"            margin",[29,51565,51566],{"class":309},": ",[29,51568,499],{"class":39},[29,51570,1468],{"class":309},[29,51572,51573,51576,51578,51580],{"class":31,"line":1793},[29,51574,51575],{"class":39},"            padding",[29,51577,51566],{"class":309},[29,51579,499],{"class":39},[29,51581,1468],{"class":309},[29,51583,51584],{"class":31,"line":1799},[29,51585,2704],{"class":309},[29,51587,51588],{"class":31,"line":1804},[29,51589,2575],{"emptyLinePlaceholder":233},[29,51591,51592,51595],{"class":31,"line":1818},[29,51593,51594],{"class":35},"        .box",[29,51596,15747],{"class":309},[29,51598,51599,51602,51604,51607],{"class":31,"line":1823},[29,51600,51601],{"class":39},"            display",[29,51603,51566],{"class":309},[29,51605,51606],{"class":39},"flex",[29,51608,1468],{"class":309},[29,51610,51611,51614,51616,51619,51622],{"class":31,"line":1829},[29,51612,51613],{"class":39},"            width",[29,51615,51566],{"class":309},[29,51617,51618],{"class":39},"700",[29,51620,51621],{"class":305},"px",[29,51623,1468],{"class":309},[29,51625,51626,51629,51631,51633,51635],{"class":31,"line":1850},[29,51627,51628],{"class":39},"            height",[29,51630,51566],{"class":309},[29,51632,4148],{"class":39},[29,51634,51621],{"class":305},[29,51636,1468],{"class":309},[29,51638,51639,51642,51644,51646,51648,51651,51654],{"class":31,"line":1855},[29,51640,51641],{"class":39},"            border-left",[29,51643,51566],{"class":309},[29,51645,525],{"class":39},[29,51647,51621],{"class":305},[29,51649,51650],{"class":39}," solid",[29,51652,51653],{"class":39}," pink",[29,51655,1468],{"class":309},[29,51657,51658,51661,51663,51665,51667,51669,51671],{"class":31,"line":1869},[29,51659,51660],{"class":39},"            border-bottom",[29,51662,51566],{"class":309},[29,51664,525],{"class":39},[29,51666,51621],{"class":305},[29,51668,51650],{"class":39},[29,51670,51653],{"class":39},[29,51672,1468],{"class":309},[29,51674,51675,51677,51679,51681,51683,51686],{"class":31,"line":1874},[29,51676,51563],{"class":39},[29,51678,51566],{"class":309},[29,51680,964],{"class":39},[29,51682,51621],{"class":305},[29,51684,51685],{"class":39}," auto",[29,51687,1468],{"class":309},[29,51689,51690,51693,51695,51698],{"class":31,"line":1903},[29,51691,51692],{"class":39},"            justify-content",[29,51694,51566],{"class":309},[29,51696,51697],{"class":39},"space-around",[29,51699,1468],{"class":309},[29,51701,51702,51705,51707,51710],{"class":31,"line":1908},[29,51703,51704],{"class":39},"            align-items",[29,51706,51566],{"class":309},[29,51708,51709],{"class":39},"flex-end",[29,51711,1468],{"class":309},[29,51713,51714,51717,51719,51722],{"class":31,"line":1925},[29,51715,51716],{"class":39},"            text-align",[29,51718,51566],{"class":309},[29,51720,51721],{"class":39},"center",[29,51723,1468],{"class":309},[29,51725,51726],{"class":31,"line":1930},[29,51727,2704],{"class":309},[29,51729,51730],{"class":31,"line":1935},[29,51731,2575],{"emptyLinePlaceholder":233},[29,51733,51734,51736,51738,51741],{"class":31,"line":1940},[29,51735,51594],{"class":35},[29,51737,1268],{"class":305},[29,51739,51740],{"class":51429},"div",[29,51742,15747],{"class":309},[29,51744,51745,51747,51749,51751],{"class":31,"line":1954},[29,51746,51601],{"class":39},[29,51748,51566],{"class":309},[29,51750,51606],{"class":39},[29,51752,1468],{"class":309},[29,51754,51755,51757,51759,51761,51763],{"class":31,"line":1959},[29,51756,51613],{"class":39},[29,51758,51566],{"class":309},[29,51760,964],{"class":39},[29,51762,51621],{"class":305},[29,51764,1468],{"class":309},[29,51766,51767,51770,51772,51775],{"class":31,"line":2752},[29,51768,51769],{"class":39},"            background-color",[29,51771,51566],{"class":309},[29,51773,51774],{"class":39},"pink",[29,51776,1468],{"class":309},[29,51778,51779,51782,51784,51787],{"class":31,"line":2766},[29,51780,51781],{"class":39},"            flex-direction",[29,51783,51566],{"class":309},[29,51785,51786],{"class":39},"column",[29,51788,1468],{"class":309},[29,51790,51791,51793,51795,51798],{"class":31,"line":2774},[29,51792,51692],{"class":39},[29,51794,51566],{"class":309},[29,51796,51797],{"class":39},"space-between",[29,51799,1468],{"class":309},[29,51801,51802],{"class":31,"line":2779},[29,51803,2704],{"class":309},[29,51805,51806],{"class":31,"line":2785},[29,51807,2575],{"emptyLinePlaceholder":233},[29,51809,51810,51812,51815,51818],{"class":31,"line":2791},[29,51811,51594],{"class":35},[29,51813,51814],{"class":51429}," div",[29,51816,51817],{"class":51429}," span",[29,51819,15747],{"class":309},[29,51821,51822],{"class":31,"line":2796},[29,51823,2575],{"emptyLinePlaceholder":233},[29,51825,51826,51829,51831,51834,51836],{"class":31,"line":8123},[29,51827,51828],{"class":39},"            margin-top",[29,51830,51566],{"class":309},[29,51832,51833],{"class":39},"-20",[29,51835,51621],{"class":305},[29,51837,1468],{"class":309},[29,51839,51840],{"class":31,"line":8147},[29,51841,2704],{"class":309},[29,51843,51844],{"class":31,"line":8152},[29,51845,2575],{"emptyLinePlaceholder":233},[29,51847,51848,51850,51852,51855],{"class":31,"line":8158},[29,51849,51594],{"class":35},[29,51851,51814],{"class":51429},[29,51853,51854],{"class":51429}," h4",[29,51856,15747],{"class":309},[29,51858,51859,51862,51864,51867,51869],{"class":31,"line":8185},[29,51860,51861],{"class":39},"            margin-bottom",[29,51863,51566],{"class":309},[29,51865,51866],{"class":39},"-35",[29,51868,51621],{"class":305},[29,51870,1468],{"class":309},[29,51872,51873,51875,51877,51879,51881],{"class":31,"line":8190},[29,51874,51613],{"class":39},[29,51876,51566],{"class":309},[29,51878,664],{"class":39},[29,51880,51621],{"class":305},[29,51882,1468],{"class":309},[29,51884,51885,51888,51890,51893,51895],{"class":31,"line":8196},[29,51886,51887],{"class":39},"            margin-left",[29,51889,51566],{"class":309},[29,51891,51892],{"class":39},"-10",[29,51894,51621],{"class":305},[29,51896,1468],{"class":309},[29,51898,51899],{"class":31,"line":8208},[29,51900,2704],{"class":309},[29,51902,51903,51906,51908],{"class":31,"line":8220},[29,51904,51905],{"class":309},"    \u003C\u002F",[29,51907,223],{"class":51429},[29,51909,51436],{"class":309},[29,51911,51912,51915,51917],{"class":31,"line":8232},[29,51913,51914],{"class":309},"\u003C\u002F",[29,51916,51463],{"class":51429},[29,51918,51436],{"class":309},[29,51920,51921],{"class":31,"line":9891},[29,51922,2575],{"emptyLinePlaceholder":233},[29,51924,51925,51927,51930],{"class":31,"line":9916},[29,51926,1218],{"class":309},[29,51928,51929],{"class":51429},"body",[29,51931,51436],{"class":309},[29,51933,51934],{"class":31,"line":9939},[29,51935,2575],{"emptyLinePlaceholder":233},[29,51937,51938,51940,51943],{"class":31,"line":9963},[29,51939,51470],{"class":309},[29,51941,51942],{"class":51429},"script",[29,51944,51436],{"class":309},[29,51946,51947],{"class":31,"line":9968},[29,51948,51949],{"class":367},"        \u002F\u002F 1. 四次弹框效果\n",[29,51951,51952],{"class":31,"line":9973},[29,51953,51954],{"class":367},"        \u002F\u002F 声明一个新的数组\n",[29,51956,51957,51960,51963,51965],{"class":31,"line":9978},[29,51958,51959],{"class":305},"        let",[29,51961,51962],{"class":309}," arr ",[29,51964,355],{"class":305},[29,51966,51967],{"class":309}," []\n",[29,51969,51970,51972,51974,51977,51979,51981,51983,51985,51987,51990,51992,51994],{"class":31,"line":9987},[29,51971,3578],{"class":305},[29,51973,1834],{"class":309},[29,51975,51976],{"class":305},"let",[29,51978,9613],{"class":309},[29,51980,355],{"class":305},[29,51982,25247],{"class":39},[29,51984,9620],{"class":309},[29,51986,1764],{"class":305},[29,51988,51989],{"class":39}," 4",[29,51991,3389],{"class":309},[29,51993,2467],{"class":305},[29,51995,12617],{"class":309},[29,51997,51998],{"class":31,"line":9992},[29,51999,52000],{"class":367},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[29,52002,52003],{"class":31,"line":9998},[29,52004,52005],{"class":367},"            \u002F\u002F arr.push(num)\n",[29,52007,52008,52011,52014,52016,52019,52021,52024,52026,52029],{"class":31,"line":10019},[29,52009,52010],{"class":309},"            arr.",[29,52012,52013],{"class":35},"push",[29,52015,310],{"class":309},[29,52017,52018],{"class":35},"prompt",[29,52020,310],{"class":309},[29,52022,52023],{"class":103},"`请输入第${",[29,52025,749],{"class":309},[29,52027,52028],{"class":103},"}季度的数据:`",[29,52030,30626],{"class":309},[29,52032,52033],{"class":31,"line":10025},[29,52034,52035],{"class":367},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[29,52037,52038],{"class":31,"line":10039},[29,52039,2704],{"class":309},[29,52041,52042],{"class":31,"line":10045},[29,52043,52044],{"class":367},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[29,52046,52047],{"class":31,"line":10072},[29,52048,52049],{"class":367},"        \u002F\u002F 盒子开头\n",[29,52051,52052,52055,52058,52060,52063],{"class":31,"line":10081},[29,52053,52054],{"class":309},"        document.",[29,52056,52057],{"class":35},"write",[29,52059,310],{"class":309},[29,52061,52062],{"class":103},"` \u003Cdiv class=\"box\">`",[29,52064,316],{"class":309},[29,52066,52067],{"class":31,"line":10087},[29,52068,2575],{"emptyLinePlaceholder":233},[29,52070,52071],{"class":31,"line":10095},[29,52072,52073],{"class":367},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[29,52075,52076,52078,52080,52082,52084,52086,52088,52090,52092,52095,52098,52100,52102],{"class":31,"line":10100},[29,52077,3578],{"class":305},[29,52079,1834],{"class":309},[29,52081,51976],{"class":305},[29,52083,9613],{"class":309},[29,52085,355],{"class":305},[29,52087,4268],{"class":39},[29,52089,9620],{"class":309},[29,52091,1218],{"class":305},[29,52093,52094],{"class":309}," arr.",[29,52096,52097],{"class":39},"length",[29,52099,3389],{"class":309},[29,52101,2467],{"class":305},[29,52103,12617],{"class":309},[29,52105,52106,52109,52111,52113],{"class":31,"line":16779},[29,52107,52108],{"class":309},"            document.",[29,52110,52057],{"class":35},[29,52112,310],{"class":309},[29,52114,52115],{"class":103},"`\n",[29,52117,52118,52121,52123,52125,52127,52129],{"class":31,"line":16785},[29,52119,52120],{"class":103},"              \u003Cdiv style=\"height: ${",[29,52122,4055],{"class":309},[29,52124,1198],{"class":103},[29,52126,749],{"class":309},[29,52128,1248],{"class":103},[29,52130,52131],{"class":103},"}px;\">\n",[29,52133,52134,52137,52139,52141,52143,52145],{"class":31,"line":16808},[29,52135,52136],{"class":103},"                \u003Cspan>${",[29,52138,4055],{"class":309},[29,52140,1198],{"class":103},[29,52142,749],{"class":309},[29,52144,1248],{"class":103},[29,52146,52147],{"class":103},"}\u003C\u002Fspan>\n",[29,52149,52150,52153,52155,52157,52159],{"class":31,"line":16814},[29,52151,52152],{"class":103},"                \u003Ch4>第${",[29,52154,749],{"class":309},[29,52156,45695],{"class":305},[29,52158,25247],{"class":39},[29,52160,52161],{"class":103},"}季度\u003C\u002Fh4>\n",[29,52163,52164],{"class":31,"line":16837},[29,52165,52166],{"class":103},"              \u003C\u002Fdiv>          \n",[29,52168,52169,52172],{"class":31,"line":16851},[29,52170,52171],{"class":103},"            `",[29,52173,316],{"class":309},[29,52175,52176],{"class":31,"line":16871},[29,52177,2704],{"class":309},[29,52179,52180],{"class":31,"line":16877},[29,52181,52182],{"class":367},"        \u002F\u002F 盒子结尾\n",[29,52184,52185,52187,52189,52191,52194],{"class":31,"line":16888},[29,52186,52054],{"class":309},[29,52188,52057],{"class":35},[29,52190,310],{"class":309},[29,52192,52193],{"class":103},"` \u003C\u002Fdiv>`",[29,52195,316],{"class":309},[29,52197,52198,52200,52202],{"class":31,"line":16911},[29,52199,51905],{"class":309},[29,52201,51942],{"class":51429},[29,52203,51436],{"class":309},[29,52205,52206,52208,52210],{"class":31,"line":16933},[29,52207,51914],{"class":309},[29,52209,51929],{"class":51429},[29,52211,51436],{"class":309},[29,52213,52214],{"class":31,"line":16938},[29,52215,2575],{"emptyLinePlaceholder":233},[29,52217,52218,52220,52222],{"class":31,"line":16944},[29,52219,51914],{"class":309},[29,52221,50764],{"class":51429},[29,52223,51436],{"class":309},[275,52225,52227],{"id":52226},"_284-冒泡排序","2.8.4 冒泡排序",[19,52229,52231],{"className":50762,"code":52230,"language":50764,"meta":24,"style":24},"\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",[26,52232,52233,52243,52257,52261,52269,52284,52304,52316,52324,52328,52336,52344,52376,52409,52446,52451,52470,52475,52488,52503,52519,52523,52528,52532,52542,52551,52559,52563],{"__ignoreMap":24},[29,52234,52235,52237,52239,52241],{"class":31,"line":32},[29,52236,51426],{"class":309},[29,52238,51430],{"class":51429},[29,52240,51433],{"class":35},[29,52242,51436],{"class":309},[29,52244,52245,52247,52249,52251,52253,52255],{"class":31,"line":43},[29,52246,1218],{"class":309},[29,52248,50764],{"class":51429},[29,52250,51445],{"class":35},[29,52252,355],{"class":309},[29,52254,51450],{"class":103},[29,52256,51436],{"class":309},[29,52258,52259],{"class":31,"line":51},[29,52260,2575],{"emptyLinePlaceholder":233},[29,52262,52263,52265,52267],{"class":31,"line":59},[29,52264,1218],{"class":309},[29,52266,51463],{"class":51429},[29,52268,51436],{"class":309},[29,52270,52271,52274,52276,52278,52280,52282],{"class":31,"line":67},[29,52272,52273],{"class":309},"  \u003C",[29,52275,51473],{"class":51429},[29,52277,51476],{"class":35},[29,52279,355],{"class":309},[29,52281,51481],{"class":103},[29,52283,51436],{"class":309},[29,52285,52286,52288,52290,52292,52294,52296,52298,52300,52302],{"class":31,"line":75},[29,52287,52273],{"class":309},[29,52289,51473],{"class":51429},[29,52291,15095],{"class":35},[29,52293,355],{"class":309},[29,52295,51520],{"class":103},[29,52297,51500],{"class":35},[29,52299,355],{"class":309},[29,52301,51527],{"class":103},[29,52303,51436],{"class":309},[29,52305,52306,52308,52310,52312,52314],{"class":31,"line":83},[29,52307,52273],{"class":309},[29,52309,51536],{"class":51429},[29,52311,51539],{"class":309},[29,52313,51536],{"class":51429},[29,52315,51436],{"class":309},[29,52317,52318,52320,52322],{"class":31,"line":158},[29,52319,51914],{"class":309},[29,52321,51463],{"class":51429},[29,52323,51436],{"class":309},[29,52325,52326],{"class":31,"line":166},[29,52327,2575],{"emptyLinePlaceholder":233},[29,52329,52330,52332,52334],{"class":31,"line":1505},[29,52331,1218],{"class":309},[29,52333,51929],{"class":51429},[29,52335,51436],{"class":309},[29,52337,52338,52340,52342],{"class":31,"line":1788},[29,52339,52273],{"class":309},[29,52341,51942],{"class":51429},[29,52343,51436],{"class":309},[29,52345,52346,52349,52351,52353,52356,52358,52360,52362,52364,52366,52368,52370,52372,52374],{"class":31,"line":1793},[29,52347,52348],{"class":305},"    let",[29,52350,51962],{"class":309},[29,52352,355],{"class":305},[29,52354,52355],{"class":309}," [",[29,52357,627],{"class":39},[29,52359,12610],{"class":309},[29,52361,601],{"class":39},[29,52363,12610],{"class":309},[29,52365,380],{"class":39},[29,52367,12610],{"class":309},[29,52369,386],{"class":39},[29,52371,12610],{"class":309},[29,52373,525],{"class":39},[29,52375,33375],{"class":309},[29,52377,52378,52380,52382,52384,52386,52388,52390,52392,52394,52396,52398,52401,52403,52405,52407],{"class":31,"line":1799},[29,52379,3376],{"class":305},[29,52381,1834],{"class":309},[29,52383,51976],{"class":305},[29,52385,9613],{"class":309},[29,52387,355],{"class":305},[29,52389,4268],{"class":39},[29,52391,9620],{"class":309},[29,52393,1218],{"class":305},[29,52395,52094],{"class":309},[29,52397,52097],{"class":39},[29,52399,52400],{"class":305}," -",[29,52402,25247],{"class":39},[29,52404,3389],{"class":309},[29,52406,2467],{"class":305},[29,52408,12617],{"class":309},[29,52410,52411,52414,52416,52418,52420,52422,52424,52426,52428,52430,52432,52434,52436,52438,52440,52442,52444],{"class":31,"line":1804},[29,52412,52413],{"class":305},"      for",[29,52415,1834],{"class":309},[29,52417,51976],{"class":305},[29,52419,9675],{"class":309},[29,52421,355],{"class":305},[29,52423,4268],{"class":39},[29,52425,9682],{"class":309},[29,52427,1218],{"class":305},[29,52429,52094],{"class":309},[29,52431,52097],{"class":39},[29,52433,52400],{"class":305},[29,52435,9613],{"class":309},[29,52437,840],{"class":305},[29,52439,25247],{"class":39},[29,52441,9689],{"class":309},[29,52443,2467],{"class":305},[29,52445,12617],{"class":309},[29,52447,52448],{"class":31,"line":1818},[29,52449,52450],{"class":367},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[29,52452,52453,52455,52458,52460,52463,52465,52467],{"class":31,"line":1823},[29,52454,2672],{"class":305},[29,52456,52457],{"class":309}," (arr[j] ",[29,52459,1268],{"class":305},[29,52461,52462],{"class":309}," arr[j ",[29,52464,789],{"class":305},[29,52466,25247],{"class":39},[29,52468,52469],{"class":309},"]) {\n",[29,52471,52472],{"class":31,"line":1829},[29,52473,52474],{"class":367},"          \u002F\u002F 交换两个变量\n",[29,52476,52477,52480,52483,52485],{"class":31,"line":1850},[29,52478,52479],{"class":305},"          let",[29,52481,52482],{"class":309}," tmp ",[29,52484,355],{"class":305},[29,52486,52487],{"class":309}," arr[j]\n",[29,52489,52490,52493,52495,52497,52499,52501],{"class":31,"line":1855},[29,52491,52492],{"class":309},"          arr[j] ",[29,52494,355],{"class":305},[29,52496,52462],{"class":309},[29,52498,789],{"class":305},[29,52500,25247],{"class":39},[29,52502,33375],{"class":309},[29,52504,52505,52508,52510,52512,52514,52516],{"class":31,"line":1869},[29,52506,52507],{"class":309},"          arr[j ",[29,52509,789],{"class":305},[29,52511,25247],{"class":39},[29,52513,4618],{"class":309},[29,52515,355],{"class":305},[29,52517,52518],{"class":309}," tmp\n",[29,52520,52521],{"class":31,"line":1874},[29,52522,2704],{"class":309},[29,52524,52525],{"class":31,"line":1903},[29,52526,52527],{"class":309},"      }\n",[29,52529,52530],{"class":31,"line":1908},[29,52531,2362],{"class":309},[29,52533,52534,52537,52539],{"class":31,"line":1925},[29,52535,52536],{"class":309},"    document.",[29,52538,52057],{"class":35},[29,52540,52541],{"class":309},"(arr)\n",[29,52543,52544,52547,52549],{"class":31,"line":1930},[29,52545,52546],{"class":309},"  \u003C\u002F",[29,52548,51942],{"class":51429},[29,52550,51436],{"class":309},[29,52552,52553,52555,52557],{"class":31,"line":1935},[29,52554,51914],{"class":309},[29,52556,51929],{"class":51429},[29,52558,51436],{"class":309},[29,52560,52561],{"class":31,"line":1940},[29,52562,2575],{"emptyLinePlaceholder":233},[29,52564,52565,52567,52569],{"class":31,"line":1954},[29,52566,51914],{"class":309},[29,52568,50764],{"class":51429},[29,52570,51436],{"class":309},[171,52572,52573],{},[1638,52574],{"alt":24,"src":52575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[171,52577,52578],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[171,52580,52581],{},"let arr = [4, 2, 5, 1, 3]",[171,52583,52584],{},"\u002F\u002F 1.升序排列写法",[171,52586,52587],{},"arr.sort(function (a, b) {",[171,52589,52590],{},"return a - b",[171,52592,52593],{},"})",[171,52595,52596],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[171,52598,52599],{},"\u002F\u002F 降序排列写法",[171,52601,52587],{},[171,52603,52604],{},"return b - a",[171,52606,52593],{},[171,52608,52609],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52611,52613],{"id":52612},"_29-函数","2.9 函数",[171,52615,52616],{},[1638,52617],{"alt":24,"src":52618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[171,52620,52621],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[171,52623,52624],{},"函数的声明用function",[171,52626,52627],{},"函数里边可以嵌套函数",[275,52629,52631],{"id":52630},"_291-函数传参","2.9.1 函数传参",[171,52633,52634],{},[1638,52635],{"alt":24,"src":52636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[171,52638,52639],{},[1638,52640],{"alt":24,"src":52641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[175,52643,52644,52647,52650,52653,52656,52659],{},[178,52645,52646],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[178,52648,52649],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[178,52651,52652],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[178,52654,52655],{},"开发中尽量保持形参和实参个数一致",[178,52657,52658],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[178,52660,52661],{},"形参只在函数中有用，所以不需要进行声明这个变量",[171,52663,52664],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[275,52666,52668],{"id":52667},"_292-函数的返回值","2.9.2 函数的返回值",[171,52670,52671],{},[1638,52672],{"alt":24,"src":52673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[171,52675,52676],{},[1638,52677],{"alt":24,"src":52678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[175,52680,52681,52684,52687,52690,52693],{},[178,52682,52683],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[178,52685,52686],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[178,52688,52689],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[178,52691,52692],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[178,52694,52695],{},"断点调试:进入函数内部看执行过程F11",[275,52697,52699],{"id":52698},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[19,52701,52703],{"className":50762,"code":52702,"language":50764,"meta":24,"style":24},"    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",[26,52704,52705,52710,52715,52719,52724],{"__ignoreMap":24},[29,52706,52707],{"class":31,"line":32},[29,52708,52709],{"class":309},"    function fn(a, b) {\n",[29,52711,52712],{"class":31,"line":43},[29,52713,52714],{"class":309},"      console.log(a + b);\n",[29,52716,52717],{"class":31,"line":51},[29,52718,2362],{"class":309},[29,52720,52721],{"class":31,"line":59},[29,52722,52723],{"class":309},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[29,52725,52726],{"class":31,"line":67},[29,52727,52728],{"class":309},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[275,52730,52732],{"id":52731},"_294-作用域","2.9.4 作用域",[175,52734,52735,52741,52746,52749,52752],{},[178,52736,52737,52738],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[457,52739,52740],{},"作用域",[178,52742,52743],{},[457,52744,52745],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[178,52747,52748],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[178,52750,52751],{},"函数内部可以直接所使用全局变量",[178,52753,52754],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[171,52756,14808],{},[19,52758,52760],{"className":50762,"code":52759,"language":50764,"meta":24,"style":24},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[26,52761,52762,52767,52772,52776,52781,52786,52791],{"__ignoreMap":24},[29,52763,52764],{"class":31,"line":32},[29,52765,52766],{"class":309},"    function fun() {\n",[29,52768,52769],{"class":31,"line":43},[29,52770,52771],{"class":309},"      num = 10\n",[29,52773,52774],{"class":31,"line":51},[29,52775,2362],{"class":309},[29,52777,52778],{"class":31,"line":59},[29,52779,52780],{"class":309},"    fun()\n",[29,52782,52783],{"class":31,"line":67},[29,52784,52785],{"class":309},"    console.log(num)\n",[29,52787,52788],{"class":31,"line":75},[29,52789,52790],{"class":309},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[29,52792,52793],{"class":31,"line":83},[29,52794,52795],{"class":309},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[175,52797,52798,52801],{},[178,52799,52800],{},"函数内部的形参可以看做是局部变量",[178,52802,52803],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[171,52805,52806,52807],{},"变量访问原则： ",[457,52808,52809],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[275,52811,52813],{"id":52812},"_295-匿名函数","2.9.5 匿名函数",[171,52815,52816],{},"函数可以分为具名函数和匿名函数",[171,52818,52819],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[259,52821,52822],{},[178,52823,52824],{},"函数表达式",[171,52826,52827],{},[1638,52828],{"alt":24,"src":52829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[171,52831,52832],{},"里边也可以写参数",[171,52834,52835],{},"具名函数调用位置可以随意调整；",[171,52837,52838],{},"匿名函数函数表达式形式只能在声明后才可以使用",[259,52840,52841],{"start":43},[178,52842,52843],{},"立即执行函数",[171,52845,52846],{},[1638,52847],{"alt":24,"src":52848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[171,52850,52851],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[171,52853,52854],{},"写法：两个小括号，然后在第一个小括号中写function",[171,52856,52857],{},"(function () {})();",[171,52859,52860],{},"不要落下最后的;",[171,52862,52863],{},"立即执行函数必须要加;",[171,52865,52866],{},"分号写前写后都没问题",[171,52868,52869],{},"写前：",[171,52871,52872],{},"(function() {})()",[171,52874,52875],{},";(function () {})();",[171,52877,52878],{},"写后:",[171,52880,52881],{},"(function() {})();",[171,52883,52857],{},[171,52885,52886],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[171,52888,52889],{},"还有一种写法：",[171,52891,52892],{},"(function(){}());",[171,52894,52895],{},"或者:",[171,52897,52898],{},"!function(){}();",[171,52900,52901],{},"立即执行函数有时候也是可以加名字的：",[171,52903,52904],{},"(function flexible(window,document) {}(window,document));",[171,52906,52907],{},"省一些调用方法",[275,52909,52911],{"id":52910},"_296-逻辑中断","2.9.6 逻辑中断!!!",[171,52913,52914],{},[1638,52915],{"alt":24,"src":52916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[171,52918,52919],{},"这样就不用非得给x,y初始化了",[171,52921,52922],{},[1638,52923],{"alt":24,"src":52924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[171,52926,52927],{},"代码执行时先看左边",[171,52929,52930],{},"例如：console.log(false && 3+5)",[171,52932,52933],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[171,52935,52936],{},"&&都是真时，就返回最后一个真值",[171,52938,52939],{},"console.log(11 && 22)",[171,52941,52942],{},"输出22",[171,52944,52945],{},"逻辑与：遇真则真",[171,52947,14808],{},[171,52949,52950],{},"let age=1",[171,52952,52953],{},"console.log(11 || age++)",[171,52955,52956],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[171,52958,52959],{},"console.log(11 || 22)",[171,52961,52962],{},"||逻辑或遇到真就直接输出，输出结果为11",[171,52964,52965],{},"||如果都是假的话，就取最后一个假的值了",[275,52967,52969],{"id":52968},"_297-转换为boolean型","2.9.7 转换为Boolean型",[171,52971,52972],{},"显示转换：",[171,52974,52975,52978,52979],{},[457,52976,52977],{},"记忆","： ",[457,52980,52981],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[171,52983,52984],{},"空字符串为假，其他字符串全为真",[171,52986,52987],{},[1638,52988],{"alt":24,"src":52989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[171,52991,52992],{},"隐式转换：",[171,52994,52995],{},[1638,52996],{"alt":24,"src":52997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[171,52999,53000],{},"隐式转换:",[171,53002,53003],{},"null+3=3",[171,53005,53006],{},"undefined+3=NaN",[171,53008,53009],{},"null==undefined 输出true,他两个都当0看",[171,53011,53012],{},"null===undefined 输出false",[171,53014,53015],{},"undefined做任何操作都是NaN",[171,53017,53018],{},"NaN不等于NaN，NaN表示计算错误",[14,53020,53022],{"id":53021},"_210-对象","2.10 对象",[275,53024,53026],{"id":53025},"_2101-对象的介绍","2.10.1 对象的介绍",[171,53028,53029],{},"对象也是一种数据类型，里边的数据是无序的",[171,53031,53032],{},"对象由属性和方法组成",[171,53034,53035],{},[1638,53036],{"alt":24,"src":53037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[171,53039,53040],{},[1638,53041],{"alt":24,"src":53042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[171,53044,53045],{},[1638,53046],{"alt":24,"src":53047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[275,53049,53051],{"id":53050},"_2102-对象属性","2.10.2 对象属性",[171,53053,53054],{},[1638,53055],{"alt":24,"src":53056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[259,53058,53059],{},[178,53060,53061],{},"查询对象",[171,53063,53064],{},"对象名.属性 goods.uname",[171,53066,53067],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[171,53069,53070],{},"不带字符串的属性名也可以使用 对象名['属性名']",[171,53072,53073],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[171,53075,53076],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[259,53078,53079],{"start":43},[178,53080,53081],{},"重新赋值",[171,53083,53084],{},"对象名.属性=新值",[259,53086,53087],{"start":51},[178,53088,53089],{},"增加新数据",[171,53091,53084],{},[259,53093,53094],{"start":59},[178,53095,53096],{},"删除对象中的属性",[171,53098,53099],{},"delete 对象名.属性",[275,53101,53103],{"id":53102},"_2103-对象方法","2.10.3 对象方法",[171,53105,53106],{},[1638,53107],{"alt":24,"src":53108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[171,53110,53111],{},"后边跟的是匿名函数",[171,53113,53114],{},"对象外面的叫函数；对象内部的叫方法",[171,53116,53117],{},[1638,53118],{"alt":24,"src":53119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[275,53121,53123],{"id":53122},"_2104-遍历对象","2.10.4 遍历对象",[171,53125,53126],{},"理解为加括号的python字典遍历",[171,53128,53129],{},[1638,53130],{"alt":24,"src":53131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[171,53133,53134],{},"k是字符串类型",[171,53136,53137],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[19,53139,53141],{"className":50762,"code":53140,"language":50764,"meta":24,"style":24},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[26,53142,53143,53148,53153,53158,53163],{"__ignoreMap":24},[29,53144,53145],{"class":31,"line":32},[29,53146,53147],{"class":309},"   let arr = [1, 2, 3]\n",[29,53149,53150],{"class":31,"line":43},[29,53151,53152],{"class":309},"    for (let k in arr) {\n",[29,53154,53155],{"class":31,"line":51},[29,53156,53157],{"class":309},"      console.log(k)\n",[29,53159,53160],{"class":31,"line":59},[29,53161,53162],{"class":309},"      console.log(arr[k])\n",[29,53164,53165],{"class":31,"line":67},[29,53166,2362],{"class":309},[171,53168,53169],{},[1638,53170],{"alt":24,"src":53171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[171,53173,53174],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[171,53176,53177],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[171,53179,53180],{},"for in 得到的k是属性名",[51942,53182,53183],{},"\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",[171,53185,53186],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[275,53188,53190],{"id":53189},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[171,53192,53193],{},"数组中放对象信息",[19,53195,53199],{"className":53196,"code":53197,"language":53198,"meta":24,"style":24},"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",[26,53200,53201,53209,53214,53219,53224,53229,53234,53239,53244,53249,53254,53259,53264,53268,53272],{"__ignoreMap":24},[29,53202,53203,53205,53207],{"class":31,"line":32},[29,53204,1218],{"class":309},[29,53206,51942],{"class":51429},[29,53208,51436],{"class":309},[29,53210,53211],{"class":31,"line":43},[29,53212,53213],{"class":309},"    let students = [\n",[29,53215,53216],{"class":31,"line":51},[29,53217,53218],{"class":309},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[29,53220,53221],{"class":31,"line":59},[29,53222,53223],{"class":309},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[29,53225,53226],{"class":31,"line":67},[29,53227,53228],{"class":309},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[29,53230,53231],{"class":31,"line":75},[29,53232,53233],{"class":309},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[29,53235,53236],{"class":31,"line":83},[29,53237,53238],{"class":309},"    ]\n",[29,53240,53241],{"class":31,"line":158},[29,53242,53243],{"class":309},"    for (let i = 0; i \u003C students.length; i++) {\n",[29,53245,53246],{"class":31,"line":166},[29,53247,53248],{"class":309},"      for (let k in students[i]) {\n",[29,53250,53251],{"class":31,"line":1505},[29,53252,53253],{"class":309},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[29,53255,53256],{"class":31,"line":1788},[29,53257,53258],{"class":309},"        \u002F\u002F输出每个人的名字：\n",[29,53260,53261],{"class":31,"line":1793},[29,53262,53263],{"class":309},"        \u002F\u002Fconsole.log(students[i].name)\n",[29,53265,53266],{"class":31,"line":1799},[29,53267,52527],{"class":309},[29,53269,53270],{"class":31,"line":1804},[29,53271,2362],{"class":309},[29,53273,53274,53276,53278],{"class":31,"line":1818},[29,53275,52546],{"class":309},[29,53277,51942],{"class":51429},[29,53279,51436],{"class":309},[275,53281,53283],{"id":53282},"_2106-内置对象","2.10.6 内置对象",[171,53285,53286],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[259,53288,53289],{},[178,53290,53291],{},"数学对象Math",[171,53293,53294],{},[1638,53295],{"alt":24,"src":53296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[171,53298,53299],{},[546,53300,53303],{"href":53301,"rel":53302},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24038],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[171,53305,53306],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[171,53308,53309],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[171,53311,53312],{},"数组不可以使用Math中的max,min来求最大值与最小值",[171,53314,53315],{},"null是一个空对象，可以认为：null类似于let obj={}",[171,53317,53318],{},"null属于对象数据类型",[259,53320,53321],{"start":43},[178,53322,53323],{},"生成任意范围随机数",[171,53325,53326],{},[1638,53327],{"alt":24,"src":53328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[171,53330,53331],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[171,53333,53334],{},"乘以几就取不到几",[171,53336,53337],{},"取数组中的随机元素：",[171,53339,53340],{},"let arr = ['red', 'green', 'blue']",[171,53342,53343],{},"let random = Math.floor(Math.random() * arr.length)",[171,53345,53346],{},"console.log(arr[random])",[171,53348,53349],{},"这个函数得到的是全闭区间",[171,53351,53352],{},"function getRandom(N, M) {",[171,53354,53355],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[171,53357,1254],{},[171,53359,53360],{},"console.log(getRandom(4, 8))",[275,53362,53364],{"id":53363},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[171,53366,53367],{},[1638,53368],{"alt":24,"src":53369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[171,53371,53372],{},[1638,53373],{"alt":24,"src":53374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[171,53376,53377],{},[1638,53378],{"alt":24,"src":53379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[171,53381,53382],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[171,53384,53385],{},[1638,53386],{"alt":24,"src":53387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[171,53389,53390],{},[1638,53391],{"alt":24,"src":53392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[171,53394,53395],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[171,53397,53398],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[171,53400,53401],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[223,53403,53404],{},"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":24,"searchDepth":43,"depth":43,"links":53406},[53407,53415,53416,53417,53418,53419,53426,53430,53436,53445],{"id":50597,"depth":43,"text":50598,"children":53408},[53409,53410,53411,53412,53413,53414],{"id":50601,"depth":51,"text":50602},{"id":50618,"depth":51,"text":50619},{"id":50658,"depth":51,"text":50659},{"id":50670,"depth":51,"text":50671},{"id":50679,"depth":51,"text":50680},{"id":50727,"depth":51,"text":50728},{"id":50737,"depth":43,"text":50738},{"id":50825,"depth":43,"text":50826},{"id":50848,"depth":43,"text":50849},{"id":50860,"depth":43,"text":50861},{"id":51047,"depth":43,"text":51048,"children":53420},[53421,53422,53423,53424,53425],{"id":51051,"depth":51,"text":51052},{"id":51060,"depth":51,"text":51061},{"id":51088,"depth":51,"text":51089},{"id":51124,"depth":51,"text":51125},{"id":51149,"depth":51,"text":51150},{"id":51161,"depth":43,"text":51162,"children":53427},[53428,53429],{"id":51182,"depth":51,"text":51183},{"id":51276,"depth":51,"text":51277},{"id":51334,"depth":43,"text":51335,"children":53431},[53432,53433,53434,53435],{"id":51338,"depth":51,"text":51339},{"id":51362,"depth":51,"text":51363},{"id":51415,"depth":51,"text":51416},{"id":52226,"depth":51,"text":52227},{"id":52612,"depth":43,"text":52613,"children":53437},[53438,53439,53440,53441,53442,53443,53444],{"id":52630,"depth":51,"text":52631},{"id":52667,"depth":51,"text":52668},{"id":52698,"depth":51,"text":52699},{"id":52731,"depth":51,"text":52732},{"id":52812,"depth":51,"text":52813},{"id":52910,"depth":51,"text":52911},{"id":52968,"depth":51,"text":52969},{"id":53021,"depth":43,"text":53022,"children":53446},[53447,53448,53449,53450,53451,53452,53453],{"id":53025,"depth":51,"text":53026},{"id":53050,"depth":51,"text":53051},{"id":53102,"depth":51,"text":53103},{"id":53122,"depth":51,"text":53123},{"id":53189,"depth":51,"text":53190},{"id":53282,"depth":51,"text":53283},{"id":53363,"depth":51,"text":53364},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50589,"description":230},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53460,"title":53461,"body":53462,"description":230,"extension":231,"meta":76802,"navigation":233,"path":76803,"seo":76804,"stem":76805,"__hash__":76806},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53463,"toc":76742},[53464,53467,53470,53473,53478,53481,53484,53487,53491,53495,53501,53506,53514,53521,53524,53528,53533,53538,53543,53546,53549,53560,53563,53567,53570,53573,53578,53583,53588,53591,53594,53686,53689,53694,53697,53702,53705,53708,53713,53716,53721,53725,53728,53742,53746,53751,53754,53757,53761,53766,53769,53773,53777,53782,53786,53791,53794,53797,53800,53803,53806,53809,53814,53819,53847,53850,53853,53856,53861,53864,53867,53870,53873,53877,53906,53910,53915,53920,53923,53926,53929,53934,54049,54054,54059,54220,54225,54228,54232,54237,54242,54245,54248,54251,54254,54257,54260,54263,54266,54269,54272,54275,54278,54281,54284,54286,54289,54292,54295,54300,54304,54701,54704,54710,54714,54719,56001,56006,56009,56012,56015,56020,57216,57220,57226,57231,57234,57239,57244,57248,57252,57257,57260,57265,57268,57271,57275,58183,58186,58190,58411,58414,58417,58420,58646,58649,58873,58876,58880,58885,58888,58891,59119,59122,59155,59158,59162,59167,59171,59174,59177,59180,59183,59186,59189,59192,59197,60477,60481,60484,61577,61581,61584,61587,61590,61593,61597,61600,61603,61605,61613,63094,63098,63101,63104,63107,63316,63319,63323,63327,63332,63337,63340,63343,63348,63352,63357,63360,63469,63473,63478,63483,63486,63489,63493,63498,63503,63508,63511,63514,63525,63528,63533,63538,63541,63544,63617,63621,63626,63629,63631,63642,63646,63651,64977,64980,64983,64986,64988,64991,64994,64997,65000,65003,65006,65009,65012,65015,65018,65021,65024,65026,65028,65031,65035,66129,66132,66135,66151,66165,66168,66173,66179,66184,66188,66192,66197,66201,66206,66648,66653,66656,66660,66665,66668,66671,66675,66680,66684,66689,66694,66698,66703,66708,66711,66716,66721,66725,66730,66735,66839,66842,66846,66851,67217,67220,67223,67226,67229,67232,67235,67238,67241,68537,68541,68546,68551,68554,68557,68560,68563,68565,68570,68575,68578,68582,68587,68592,68597,68600,68603,68606,68609,68612,68617,68620,68624,68629,68634,68638,68643,68646,68651,68654,68657,68660,68663,68666,68671,68674,68677,68680,68683,68687,68692,68695,68699,68704,68707,68710,68714,68743,68746,68750,68754,68759,68763,68768,68771,68774,68777,68780,68783,68786,68789,68792,68795,68798,68801,68804,68807,68810,68814,68819,68824,68827,68831,68835,68840,68843,68847,68850,68853,68858,68863,68868,68873,68878,68881,68884,68889,68894,68898,68903,68906,68911,68914,68917,68920,68923,68928,68931,68940,68944,68949,68952,68955,68959,68962,68967,68971,68974,68980,68986,68990,69016,69019,70580,70583,71079,71082,71087,71092,71097,71101,71106,71111,71116,71120,71125,71128,71131,71134,71137,71141,71144,71149,71152,71157,71161,71166,71169,71174,71179,71184,71187,71190,71195,71200,71203,71206,71210,71213,71218,71221,71226,71229,71234,71239,71244,71247,71252,71317,71320,71331,71335,71340,71512,71516,71521,71524,71527,71530,71534,71545,71549,71552,71557,71562,71565,71568,71571,71574,71577,71579,71582,71585,71588,71593,71596,71601,71604,71608,71611,71614,71628,71632,71635,71690,71695,71698,71701,71706,71709,71713,71718,71848,71852,71857,71862,71943,71948,71952,71955,71960,71965,71971,71974,71977,71980,71984,71989,71992,72003,72007,72024,75071,75075,75078,75081,75084,75105,75109,75112,75120,75123,75128,75131,75134,75139,75144,75148,75169,75173,75178,75181,75184,75187,75190,75194,75199,75202,75206,75211,75214,75219,75222,75227,75230,75235,76438,76442,76447,76450,76455,76739],[10,53465,53461],{"id":53466},"_3web-apis",[171,53468,53469],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[171,53471,53472],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[171,53474,53475],{},[1638,53476],{"alt":24,"src":53477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[171,53479,53480],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[171,53482,53483],{},"建议数组和对象使用 const 来声明",[171,53485,53486],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53488,53490],{"id":53489},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[275,53492,53494],{"id":53493},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[171,53496,53497,53500],{},[26,53498,53499],{},"document"," = HTML 文件解析后的对象化表示；",[171,53502,53503,53505],{},[26,53504,53499],{}," ≠ HTML 文件本身",[171,53507,53508,53513],{},[457,53509,53510],{},[26,53511,53512],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[171,53515,53516,53520],{},[457,53517,53518],{},[26,53519,53499],{}," ：容器里的内容，代表当前加载的网页（DOM）",[171,53522,53523],{},"document实际上为window.document的简写",[275,53525,53527],{"id":53526},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[171,53529,53530],{},[1638,53531],{"alt":24,"src":53532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[171,53534,53535],{},[1638,53536],{"alt":24,"src":53537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[171,53539,53540],{},[1638,53541],{"alt":24,"src":53542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[171,53544,53545],{},"console.dir()",[171,53547,53548],{},"dir用来打印对象",[175,53550,53551,53554,53557],{},[178,53552,53553],{},"任何一个标签，都是一个对象",[178,53555,53556],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[178,53558,53559],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[171,53561,53562],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[275,53564,53566],{"id":53565},"_312-获取dom对象","3.1.2 获取DoM对象",[171,53568,53569],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[171,53571,53572],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[171,53574,53575],{},[457,53576,53577],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[259,53579,53580],{},[178,53581,53582],{},"利用CSS选择器来获取标签元素",[171,53584,53585],{},[1638,53586],{"alt":24,"src":53587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[171,53589,53590],{},"里边的选择器必须必须加引号！！！",[171,53592,53593],{},"只选择第一个元素",[19,53595,53597],{"className":53196,"code":53596,"language":53198,"meta":24,"style":24},"\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",[26,53598,53599,53607,53628,53647,53655,53660,53665,53670,53678],{"__ignoreMap":24},[29,53600,53601,53603,53605],{"class":31,"line":32},[29,53602,1218],{"class":309},[29,53604,51929],{"class":51429},[29,53606,51436],{"class":309},[29,53608,53609,53611,53613,53616,53618,53621,53624,53626],{"class":31,"line":43},[29,53610,52273],{"class":309},[29,53612,51740],{"class":51429},[29,53614,53615],{"class":35}," class",[29,53617,355],{"class":309},[29,53619,53620],{"class":103},"\"box\"",[29,53622,53623],{"class":309},">123\u003C\u002F",[29,53625,51740],{"class":51429},[29,53627,51436],{"class":309},[29,53629,53630,53632,53634,53636,53638,53640,53643,53645],{"class":31,"line":51},[29,53631,52273],{"class":309},[29,53633,51740],{"class":51429},[29,53635,53615],{"class":35},[29,53637,355],{"class":309},[29,53639,53620],{"class":103},[29,53641,53642],{"class":309},">456\u003C\u002F",[29,53644,51740],{"class":51429},[29,53646,51436],{"class":309},[29,53648,53649,53651,53653],{"class":31,"line":59},[29,53650,52273],{"class":309},[29,53652,51942],{"class":51429},[29,53654,51436],{"class":309},[29,53656,53657],{"class":31,"line":67},[29,53658,53659],{"class":309},"    \u002F\u002F 1.获取匹配的第一个元素\n",[29,53661,53662],{"class":31,"line":75},[29,53663,53664],{"class":309},"    const box = document.querySelector('div')\n",[29,53666,53667],{"class":31,"line":83},[29,53668,53669],{"class":309},"    console.dir(box)\n",[29,53671,53672,53674,53676],{"class":31,"line":158},[29,53673,52546],{"class":309},[29,53675,51942],{"class":51429},[29,53677,51436],{"class":309},[29,53679,53680,53682,53684],{"class":31,"line":166},[29,53681,51914],{"class":309},[29,53683,51929],{"class":51429},[29,53685,51436],{"class":309},[171,53687,53688],{},"只选123，不选456",[171,53690,53691],{},[1638,53692],{"alt":24,"src":53693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[171,53695,53696],{},"返回的是一个数组的集合，不能对其进行直接修改",[171,53698,53699],{},[1638,53700],{"alt":24,"src":53701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[171,53703,53704],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[171,53706,53707],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[259,53709,53710],{"start":43},[178,53711,53712],{},"其他方法来获取标签元素",[171,53714,53715],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[171,53717,53718],{},[1638,53719],{"alt":24,"src":53720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[275,53722,53724],{"id":53723},"_313-操作元素的内容","3.1.3 操作元素的内容",[171,53726,53727],{},"设置修改DOM元素内容有两种方式：",[175,53729,53730,53733,53736,53739],{},[178,53731,53732],{},"元素.innerText=''",[178,53734,53735],{},"元素.innerHTML=''",[178,53737,53738],{},"不写字符串输出数字也是可以的",[178,53740,53741],{},"元素.innerHtml=1",[22173,53743,53745],{"id":53744},"_3131-innertext","3.1.3.1 innerText",[171,53747,53748],{},[1638,53749],{"alt":24,"src":53750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[171,53752,53753],{},"思路：实现了修改盒子中的内容！",[171,53755,53756],{},"它只显示纯文本，不解析标签",[22173,53758,53760],{"id":53759},"_3132-innerhtml","3.1.3.2 innerHTML",[171,53762,53763],{},[1638,53764],{"alt":24,"src":53765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[171,53767,53768],{},"相比于innerText，他的强大之处在于可以解析标签",[275,53770,53772],{"id":53771},"_314-操作元素属性","3.1.4 操作元素属性",[22173,53774,53776],{"id":53775},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[171,53778,53779],{},[1638,53780],{"alt":24,"src":53781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22173,53783,53785],{"id":53784},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[171,53787,53788],{},[1638,53789],{"alt":24,"src":53790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[171,53792,53793],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[171,53795,53796],{},"div.style.backgroundColor = 'hotpink'",[171,53798,53799],{},"如果按照css的写法，-表示减，就会出错",[171,53801,53802],{},"body元素不需要再获取，直接用就行！！！！！！",[171,53804,53805],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[171,53807,53808],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[171,53810,53811],{},[1638,53812],{"alt":24,"src":53813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[171,53815,53816],{},[1638,53817],{"alt":24,"src":53818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[259,53820,53821,53824,53827,53830,53833,53836],{},[178,53822,53823],{},"className这个方式就是修改很多样式的时候来使用的！",[178,53825,53826],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[178,53828,53829],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[178,53831,53832],{},"className为属性名，如果还用class的话就导致与关键字冲突",[178,53834,53835],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[178,53837,53838,53839,53844],{},"解析标签的时候就变为了",[51740,53840],{"className":53841},[53842,53843],"nav","box",[53845,53846],"br",{},[171,53848,53849],{},"例子：",[51740,53851],{"className":53852},[53842],[51942,53854,53855],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[171,53857,53858],{},[1638,53859],{"alt":24,"src":53860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[171,53862,53863],{},"追加和删除类名用classList",[171,53865,53866],{},"常用于类似于开关的操作",[171,53868,53869],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[171,53871,53872],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22173,53874,53876],{"id":53875},"_3143-牢记点","3.1.4.3 牢记点",[259,53878,53879,53882,53885,53888,53891,53894,53897,53900,53903],{},[178,53880,53881],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[178,53883,53884],{},"使用style属性操作css时不要忘记引号",[178,53886,53887],{},"使用className或者classList时也不要忘记引号",[178,53889,53890],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[178,53892,53893],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[178,53895,53896],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[178,53898,53899],{},"若： let arr=['1','2',3] arr[0]=1",[178,53901,53902],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[178,53904,53905],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[275,53907,53909],{"id":53908},"_315-操作表单元素","3.1.5 操作表单元素",[259,53911,53912],{},[178,53913,53914],{},"天生的属性",[171,53916,53917],{},[1638,53918],{"alt":24,"src":53919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[171,53921,53922],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[171,53924,53925],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[171,53927,53928],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[171,53930,53931],{},[1638,53932],{"alt":24,"src":53933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[19,53935,53937],{"className":50762,"code":53936,"language":50764,"meta":24,"style":24},"在复选框中如果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",[26,53938,53939,53944,53976,53981,53986,53991,53996,54000,54005,54010,54027,54039,54044],{"__ignoreMap":24},[29,53940,53941],{"class":31,"line":32},[29,53942,53943],{"class":309},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[29,53945,53946,53948,53951,53954,53956,53959,53961,53963,53965,53967,53969,53971,53974],{"class":31,"line":43},[29,53947,1218],{"class":309},[29,53949,53950],{"class":51429},"input",[29,53952,53953],{"class":35}," type",[29,53955,355],{"class":309},[29,53957,53958],{"class":103},"\"checkbox\"",[29,53960,15095],{"class":35},[29,53962,355],{"class":309},[29,53964,7827],{"class":103},[29,53966,15134],{"class":35},[29,53968,355],{"class":309},[29,53970,7827],{"class":103},[29,53972,53973],{"class":35}," checked",[29,53975,51436],{"class":309},[29,53977,53978],{"class":31,"line":51},[29,53979,53980],{"class":309},"不选的话：\n",[29,53982,53983],{"class":31,"line":59},[29,53984,53985],{"class":309},"const input = document.querySelector('input')\n",[29,53987,53988],{"class":31,"line":67},[29,53989,53990],{"class":309},"input.checked=false\n",[29,53992,53993],{"class":31,"line":75},[29,53994,53995],{"class":309},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[29,53997,53998],{"class":31,"line":83},[29,53999,2575],{"emptyLinePlaceholder":233},[29,54001,54002],{"class":31,"line":158},[29,54003,54004],{"class":309},"禁用按钮：\n",[29,54006,54007],{"class":31,"line":166},[29,54008,54009],{"class":309},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[29,54011,54012,54014,54017,54020,54023,54025],{"class":31,"line":1505},[29,54013,1218],{"class":309},[29,54015,54016],{"class":51429},"button",[29,54018,54019],{"class":35}," disabled",[29,54021,54022],{"class":309},">点击\u003C\u002F",[29,54024,54016],{"class":51429},[29,54026,51436],{"class":309},[29,54028,54029,54031,54033,54035,54037],{"class":31,"line":1788},[29,54030,1218],{"class":309},[29,54032,54016],{"class":51429},[29,54034,54022],{"class":309},[29,54036,54016],{"class":51429},[29,54038,51436],{"class":309},[29,54040,54041],{"class":31,"line":1793},[29,54042,54043],{"class":309},"const bt = document.querySelector('button')\n",[29,54045,54046],{"class":31,"line":1799},[29,54047,54048],{"class":309},"bt.disabled = false\n",[259,54050,54051],{"start":43},[178,54052,54053],{},"自定义属性",[171,54055,54056],{},[1638,54057],{"alt":24,"src":54058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[19,54060,54062],{"className":53196,"code":54061,"language":53198,"meta":24,"style":24},"\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",[26,54063,54064,54072,54100,54119,54138,54157,54176,54184,54189,54194,54199,54204,54212],{"__ignoreMap":24},[29,54065,54066,54068,54070],{"class":31,"line":32},[29,54067,1218],{"class":309},[29,54069,51929],{"class":51429},[29,54071,51436],{"class":309},[29,54073,54074,54076,54078,54081,54083,54085,54088,54090,54093,54096,54098],{"class":31,"line":43},[29,54075,52273],{"class":309},[29,54077,51740],{"class":51429},[29,54079,54080],{"class":35}," data-id",[29,54082,355],{"class":309},[29,54084,3853],{"class":103},[29,54086,54087],{"class":35}," data-spm",[29,54089,355],{"class":309},[29,54091,54092],{"class":103},"\"我不知道\"",[29,54094,54095],{"class":309},">1\u003C\u002F",[29,54097,51740],{"class":51429},[29,54099,51436],{"class":309},[29,54101,54102,54104,54106,54108,54110,54112,54115,54117],{"class":31,"line":51},[29,54103,52273],{"class":309},[29,54105,51740],{"class":51429},[29,54107,54080],{"class":35},[29,54109,355],{"class":309},[29,54111,3876],{"class":103},[29,54113,54114],{"class":309},">2\u003C\u002F",[29,54116,51740],{"class":51429},[29,54118,51436],{"class":309},[29,54120,54121,54123,54125,54127,54129,54131,54134,54136],{"class":31,"line":59},[29,54122,52273],{"class":309},[29,54124,51740],{"class":51429},[29,54126,54080],{"class":35},[29,54128,355],{"class":309},[29,54130,3889],{"class":103},[29,54132,54133],{"class":309},">3\u003C\u002F",[29,54135,51740],{"class":51429},[29,54137,51436],{"class":309},[29,54139,54140,54142,54144,54146,54148,54150,54153,54155],{"class":31,"line":67},[29,54141,52273],{"class":309},[29,54143,51740],{"class":51429},[29,54145,54080],{"class":35},[29,54147,355],{"class":309},[29,54149,3902],{"class":103},[29,54151,54152],{"class":309},">4\u003C\u002F",[29,54154,51740],{"class":51429},[29,54156,51436],{"class":309},[29,54158,54159,54161,54163,54165,54167,54169,54172,54174],{"class":31,"line":75},[29,54160,52273],{"class":309},[29,54162,51740],{"class":51429},[29,54164,54080],{"class":35},[29,54166,355],{"class":309},[29,54168,3923],{"class":103},[29,54170,54171],{"class":309},">5\u003C\u002F",[29,54173,51740],{"class":51429},[29,54175,51436],{"class":309},[29,54177,54178,54180,54182],{"class":31,"line":83},[29,54179,52273],{"class":309},[29,54181,51942],{"class":51429},[29,54183,51436],{"class":309},[29,54185,54186],{"class":31,"line":158},[29,54187,54188],{"class":309},"    const one = document.querySelector('div')\n",[29,54190,54191],{"class":31,"line":166},[29,54192,54193],{"class":309},"    console.log(one.dataset)\n",[29,54195,54196],{"class":31,"line":1505},[29,54197,54198],{"class":309},"    console.log(one.dataset.id)\n",[29,54200,54201],{"class":31,"line":1788},[29,54202,54203],{"class":309},"    console.log(one.dataset.spm)\n",[29,54205,54206,54208,54210],{"class":31,"line":1793},[29,54207,52546],{"class":309},[29,54209,51942],{"class":51429},[29,54211,51436],{"class":309},[29,54213,54214,54216,54218],{"class":31,"line":1799},[29,54215,51914],{"class":309},[29,54217,51929],{"class":51429},[29,54219,51436],{"class":309},[171,54221,54222],{},[1638,54223],{"alt":24,"src":54224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[171,54226,54227],{},"document.querySelector选择的是第一个对象（元素）",[275,54229,54231],{"id":54230},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[171,54233,54234],{},[1638,54235],{"alt":24,"src":54236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[171,54238,54239],{},[1638,54240],{"alt":24,"src":54241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[171,54243,54244],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51942,54246,54247],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[171,54249,54250],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51942,54252,54253],{},"\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",[171,54255,54256],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[171,54258,54259],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[171,54261,54262],{},"单位为毫秒！！！",[171,54264,54265],{},"可以搭配匿名函数来用！！！",[171,54267,54268],{},"setInterval(function () {",[171,54270,54271],{},"alert('两秒执行一次')",[171,54273,54274],{},"}, 2000)",[171,54276,54277],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[171,54279,54280],{},"function fn() {",[171,54282,54283],{},"document.write(1)",[171,54285,1254],{},[171,54287,54288],{},"setInterval(fn, 1000)",[171,54290,54291],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[171,54293,54294],{},"setInterval('fn()', 1000)",[171,54296,54297],{},[1638,54298],{"alt":24,"src":54299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22173,54301,54303],{"id":54302},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[19,54305,54307],{"className":50762,"code":54306,"language":50764,"meta":24,"style":24},"\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",[26,54308,54309,54319,54333,54337,54345,54359,54379,54391,54399,54403,54411,54448,54453,54458,54463,54471,54479,54501,54509,54514,54536,54541,54546,54557,54562,54582,54590,54605,54620,54631,54636,54646,54656,54660,54669,54673,54681,54689,54693],{"__ignoreMap":24},[29,54310,54311,54313,54315,54317],{"class":31,"line":32},[29,54312,51426],{"class":309},[29,54314,51430],{"class":51429},[29,54316,51433],{"class":35},[29,54318,51436],{"class":309},[29,54320,54321,54323,54325,54327,54329,54331],{"class":31,"line":43},[29,54322,1218],{"class":309},[29,54324,50764],{"class":51429},[29,54326,51445],{"class":35},[29,54328,355],{"class":309},[29,54330,51450],{"class":103},[29,54332,51436],{"class":309},[29,54334,54335],{"class":31,"line":51},[29,54336,2575],{"emptyLinePlaceholder":233},[29,54338,54339,54341,54343],{"class":31,"line":59},[29,54340,1218],{"class":309},[29,54342,51463],{"class":51429},[29,54344,51436],{"class":309},[29,54346,54347,54349,54351,54353,54355,54357],{"class":31,"line":67},[29,54348,52273],{"class":309},[29,54350,51473],{"class":51429},[29,54352,51476],{"class":35},[29,54354,355],{"class":309},[29,54356,51481],{"class":103},[29,54358,51436],{"class":309},[29,54360,54361,54363,54365,54367,54369,54371,54373,54375,54377],{"class":31,"line":75},[29,54362,52273],{"class":309},[29,54364,51473],{"class":51429},[29,54366,15095],{"class":35},[29,54368,355],{"class":309},[29,54370,51520],{"class":103},[29,54372,51500],{"class":35},[29,54374,355],{"class":309},[29,54376,51527],{"class":103},[29,54378,51436],{"class":309},[29,54380,54381,54383,54385,54387,54389],{"class":31,"line":83},[29,54382,52273],{"class":309},[29,54384,51536],{"class":51429},[29,54386,51539],{"class":309},[29,54388,51536],{"class":51429},[29,54390,51436],{"class":309},[29,54392,54393,54395,54397],{"class":31,"line":158},[29,54394,51914],{"class":309},[29,54396,51463],{"class":51429},[29,54398,51436],{"class":309},[29,54400,54401],{"class":31,"line":166},[29,54402,2575],{"emptyLinePlaceholder":233},[29,54404,54405,54407,54409],{"class":31,"line":1505},[29,54406,1218],{"class":309},[29,54408,51929],{"class":51429},[29,54410,51436],{"class":309},[29,54412,54413,54415,54418,54420,54422,54424,54426,54428,54430,54433,54435,54438,54441,54443,54446],{"class":31,"line":1788},[29,54414,52273],{"class":309},[29,54416,54417],{"class":51429},"textarea",[29,54419,15095],{"class":35},[29,54421,355],{"class":309},[29,54423,7827],{"class":103},[29,54425,15134],{"class":35},[29,54427,355],{"class":309},[29,54429,7827],{"class":103},[29,54431,54432],{"class":35}," cols",[29,54434,355],{"class":309},[29,54436,54437],{"class":103},"\"30\"",[29,54439,54440],{"class":35}," rows",[29,54442,355],{"class":309},[29,54444,54445],{"class":103},"\"10\"",[29,54447,51436],{"class":309},[29,54449,54450],{"class":31,"line":1793},[29,54451,54452],{"class":309},"        用户注册协议\n",[29,54454,54455],{"class":31,"line":1799},[29,54456,54457],{"class":309},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[29,54459,54460],{"class":31,"line":1804},[29,54461,54462],{"class":309},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[29,54464,54465,54467,54469],{"class":31,"line":1818},[29,54466,51905],{"class":309},[29,54468,54417],{"class":51429},[29,54470,51436],{"class":309},[29,54472,54473,54475,54477],{"class":31,"line":1823},[29,54474,52273],{"class":309},[29,54476,53845],{"class":51429},[29,54478,51436],{"class":309},[29,54480,54481,54483,54485,54487,54489,54492,54494,54497,54499],{"class":31,"line":1829},[29,54482,52273],{"class":309},[29,54484,54016],{"class":51429},[29,54486,53615],{"class":35},[29,54488,355],{"class":309},[29,54490,54491],{"class":103},"\"btn\"",[29,54493,54019],{"class":35},[29,54495,54496],{"class":309},">我已经阅读用户协议(5)\u003C\u002F",[29,54498,54016],{"class":51429},[29,54500,51436],{"class":309},[29,54502,54503,54505,54507],{"class":31,"line":1850},[29,54504,52273],{"class":309},[29,54506,51942],{"class":51429},[29,54508,51436],{"class":309},[29,54510,54511],{"class":31,"line":1855},[29,54512,54513],{"class":367},"    \u002F\u002F 1. 获取元素\n",[29,54515,54516,54518,54521,54523,54526,54529,54531,54534],{"class":31,"line":1869},[29,54517,11396],{"class":305},[29,54519,54520],{"class":39}," btn",[29,54522,13739],{"class":305},[29,54524,54525],{"class":309}," document.",[29,54527,54528],{"class":35},"querySelector",[29,54530,310],{"class":309},[29,54532,54533],{"class":103},"'.btn'",[29,54535,316],{"class":309},[29,54537,54538],{"class":31,"line":1874},[29,54539,54540],{"class":367},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[29,54542,54543],{"class":31,"line":1903},[29,54544,54545],{"class":367},"    \u002F\u002F 2. 倒计时\n",[29,54547,54548,54550,54552,54554],{"class":31,"line":1908},[29,54549,52348],{"class":305},[29,54551,9613],{"class":309},[29,54553,355],{"class":305},[29,54555,54556],{"class":39}," 5\n",[29,54558,54559],{"class":31,"line":1925},[29,54560,54561],{"class":367},"    \u002F\u002F 2.1 开启定时器\n",[29,54563,54564,54566,54569,54571,54574,54576,54579],{"class":31,"line":1930},[29,54565,52348],{"class":305},[29,54567,54568],{"class":309}," n ",[29,54570,355],{"class":305},[29,54572,54573],{"class":35}," setInterval",[29,54575,310],{"class":309},[29,54577,54578],{"class":305},"function",[29,54580,54581],{"class":309}," () {\n",[29,54583,54584,54587],{"class":31,"line":1935},[29,54585,54586],{"class":309},"      i",[29,54588,54589],{"class":305},"--\n",[29,54591,54592,54595,54597,54600,54602],{"class":31,"line":1940},[29,54593,54594],{"class":309},"      btn.innerHTML ",[29,54596,355],{"class":305},[29,54598,54599],{"class":103}," `我已经阅读用户协议(${",[29,54601,749],{"class":309},[29,54603,54604],{"class":103},"})`\n",[29,54606,54607,54610,54613,54616,54618],{"class":31,"line":1954},[29,54608,54609],{"class":305},"      if",[29,54611,54612],{"class":309}," (i ",[29,54614,54615],{"class":305},"===",[29,54617,4268],{"class":39},[29,54619,12617],{"class":309},[29,54621,54622,54625,54628],{"class":31,"line":1959},[29,54623,54624],{"class":35},"        clearInterval",[29,54626,54627],{"class":309},"(n)  ",[29,54629,54630],{"class":367},"\u002F\u002F 关闭定时器\n",[29,54632,54633],{"class":31,"line":2752},[29,54634,54635],{"class":367},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[29,54637,54638,54641,54643],{"class":31,"line":2766},[29,54639,54640],{"class":309},"        btn.disabled ",[29,54642,355],{"class":305},[29,54644,54645],{"class":39}," false\n",[29,54647,54648,54651,54653],{"class":31,"line":2774},[29,54649,54650],{"class":309},"        btn.innerHTML ",[29,54652,355],{"class":305},[29,54654,54655],{"class":103}," '同意'\n",[29,54657,54658],{"class":31,"line":2779},[29,54659,52527],{"class":309},[29,54661,54662,54665,54667],{"class":31,"line":2785},[29,54663,54664],{"class":309},"    }, ",[29,54666,6585],{"class":39},[29,54668,316],{"class":309},[29,54670,54671],{"class":31,"line":2791},[29,54672,2575],{"emptyLinePlaceholder":233},[29,54674,54675,54677,54679],{"class":31,"line":2796},[29,54676,52546],{"class":309},[29,54678,51942],{"class":51429},[29,54680,51436],{"class":309},[29,54682,54683,54685,54687],{"class":31,"line":8123},[29,54684,51914],{"class":309},[29,54686,51929],{"class":51429},[29,54688,51436],{"class":309},[29,54690,54691],{"class":31,"line":8147},[29,54692,2575],{"emptyLinePlaceholder":233},[29,54694,54695,54697,54699],{"class":31,"line":8152},[29,54696,51914],{"class":309},[29,54698,50764],{"class":51429},[29,54700,51436],{"class":309},[171,54702,54703],{},"不要一直想着用死循环,避免死循环",[171,54705,54706,54709],{},[26,54707,54708],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22173,54711,54713],{"id":54712},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[259,54715,54716],{},[178,54717,54718],{},"法1",[19,54720,54722],{"className":50762,"code":54721,"language":50764,"meta":24,"style":24},"\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",[26,54723,54724,54734,54748,54752,54760,54774,54794,54806,54814,54820,54831,54842,54846,54850,54857,54869,54873,54877,54884,54896,54910,54923,54937,54941,54945,54952,54963,54974,54985,54997,55009,55021,55025,55029,55037,55047,55060,55072,55085,55089,55093,55100,55110,55122,55134,55145,55156,55166,55178,55190,55194,55198,55207,55219,55231,55259,55272,55276,55280,55287,55298,55302,55310,55318,55322,55330,55344,55359,55383,55391,55406,55419,55427,55448,55460,55472,55484,55496,55508,55520,55532,55541,55549,55557,55565,55577,55600,55619,55638,55657,55676,55695,55714,55734,55738,55758,55777,55797,55818,55829,55846,55856,55866,55876,55881,55886,55891,55896,55921,55934,55938,55961,55965,55973,55981,55989,55993],{"__ignoreMap":24},[29,54725,54726,54728,54730,54732],{"class":31,"line":32},[29,54727,51426],{"class":309},[29,54729,51430],{"class":51429},[29,54731,51433],{"class":35},[29,54733,51436],{"class":309},[29,54735,54736,54738,54740,54742,54744,54746],{"class":31,"line":43},[29,54737,1218],{"class":309},[29,54739,50764],{"class":51429},[29,54741,51445],{"class":35},[29,54743,355],{"class":309},[29,54745,51450],{"class":103},[29,54747,51436],{"class":309},[29,54749,54750],{"class":31,"line":51},[29,54751,2575],{"emptyLinePlaceholder":233},[29,54753,54754,54756,54758],{"class":31,"line":59},[29,54755,1218],{"class":309},[29,54757,51463],{"class":51429},[29,54759,51436],{"class":309},[29,54761,54762,54764,54766,54768,54770,54772],{"class":31,"line":67},[29,54763,52273],{"class":309},[29,54765,51473],{"class":51429},[29,54767,51476],{"class":35},[29,54769,355],{"class":309},[29,54771,51481],{"class":103},[29,54773,51436],{"class":309},[29,54775,54776,54778,54780,54782,54784,54786,54788,54790,54792],{"class":31,"line":75},[29,54777,52273],{"class":309},[29,54779,51473],{"class":51429},[29,54781,15095],{"class":35},[29,54783,355],{"class":309},[29,54785,51520],{"class":103},[29,54787,51500],{"class":35},[29,54789,355],{"class":309},[29,54791,51527],{"class":103},[29,54793,51436],{"class":309},[29,54795,54796,54798,54800,54802,54804],{"class":31,"line":83},[29,54797,52273],{"class":309},[29,54799,51536],{"class":51429},[29,54801,51539],{"class":309},[29,54803,51536],{"class":51429},[29,54805,51436],{"class":309},[29,54807,54808,54810,54812],{"class":31,"line":158},[29,54809,52273],{"class":309},[29,54811,223],{"class":51429},[29,54813,51436],{"class":309},[29,54815,54816,54818],{"class":31,"line":166},[29,54817,6578],{"class":51429},[29,54819,15747],{"class":309},[29,54821,54822,54825,54827,54829],{"class":31,"line":1505},[29,54823,54824],{"class":39},"      padding",[29,54826,51566],{"class":309},[29,54828,499],{"class":39},[29,54830,1468],{"class":309},[29,54832,54833,54836,54838,54840],{"class":31,"line":1788},[29,54834,54835],{"class":39},"      margin",[29,54837,51566],{"class":309},[29,54839,499],{"class":39},[29,54841,1468],{"class":309},[29,54843,54844],{"class":31,"line":1793},[29,54845,2362],{"class":309},[29,54847,54848],{"class":31,"line":1799},[29,54849,2575],{"emptyLinePlaceholder":233},[29,54851,54852,54855],{"class":31,"line":1804},[29,54853,54854],{"class":51429},"    li",[29,54856,15747],{"class":309},[29,54858,54859,54862,54864,54867],{"class":31,"line":1818},[29,54860,54861],{"class":39},"      list-style",[29,54863,51566],{"class":309},[29,54865,54866],{"class":39},"none",[29,54868,1468],{"class":309},[29,54870,54871],{"class":31,"line":1823},[29,54872,2362],{"class":309},[29,54874,54875],{"class":31,"line":1829},[29,54876,2575],{"emptyLinePlaceholder":233},[29,54878,54879,54882],{"class":31,"line":1850},[29,54880,54881],{"class":35},"    .box",[29,54883,15747],{"class":309},[29,54885,54886,54889,54891,54894],{"class":31,"line":1855},[29,54887,54888],{"class":39},"      position",[29,54890,51566],{"class":309},[29,54892,54893],{"class":39},"relative",[29,54895,1468],{"class":309},[29,54897,54898,54901,54903,54906,54908],{"class":31,"line":1869},[29,54899,54900],{"class":39},"      width",[29,54902,51566],{"class":309},[29,54904,54905],{"class":39},"976",[29,54907,51621],{"class":305},[29,54909,1468],{"class":309},[29,54911,54912,54915,54917,54919,54921],{"class":31,"line":1874},[29,54913,54914],{"class":39},"      height",[29,54916,51566],{"class":309},[29,54918,1715],{"class":39},[29,54920,51621],{"class":305},[29,54922,1468],{"class":309},[29,54924,54925,54927,54929,54931,54933,54935],{"class":31,"line":1903},[29,54926,54835],{"class":39},[29,54928,51566],{"class":309},[29,54930,619],{"class":39},[29,54932,51621],{"class":305},[29,54934,51685],{"class":39},[29,54936,1468],{"class":309},[29,54938,54939],{"class":31,"line":1908},[29,54940,2362],{"class":309},[29,54942,54943],{"class":31,"line":1925},[29,54944,2575],{"emptyLinePlaceholder":233},[29,54946,54947,54950],{"class":31,"line":1930},[29,54948,54949],{"class":35},"    .slider-footer",[29,54951,15747],{"class":309},[29,54953,54954,54956,54958,54961],{"class":31,"line":1935},[29,54955,54888],{"class":39},[29,54957,51566],{"class":309},[29,54959,54960],{"class":39},"absolute",[29,54962,1468],{"class":309},[29,54964,54965,54968,54970,54972],{"class":31,"line":1940},[29,54966,54967],{"class":39},"      left",[29,54969,51566],{"class":309},[29,54971,499],{"class":39},[29,54973,1468],{"class":309},[29,54975,54976,54979,54981,54983],{"class":31,"line":1954},[29,54977,54978],{"class":39},"      bottom",[29,54980,51566],{"class":309},[29,54982,499],{"class":39},[29,54984,1468],{"class":309},[29,54986,54987,54989,54991,54993,54995],{"class":31,"line":1959},[29,54988,54900],{"class":39},[29,54990,51566],{"class":309},[29,54992,619],{"class":39},[29,54994,636],{"class":305},[29,54996,1468],{"class":309},[29,54998,54999,55001,55003,55005,55007],{"class":31,"line":2752},[29,55000,54914],{"class":39},[29,55002,51566],{"class":309},[29,55004,883],{"class":39},[29,55006,636],{"class":305},[29,55008,1468],{"class":309},[29,55010,55011,55014,55016,55019],{"class":31,"line":2766},[29,55012,55013],{"class":39},"      background-color",[29,55015,51566],{"class":309},[29,55017,55018],{"class":39},"skyblue",[29,55020,1468],{"class":309},[29,55022,55023],{"class":31,"line":2774},[29,55024,2362],{"class":309},[29,55026,55027],{"class":31,"line":2779},[29,55028,2575],{"emptyLinePlaceholder":233},[29,55030,55031,55033,55035],{"class":31,"line":2785},[29,55032,54949],{"class":35},[29,55034,7000],{"class":51429},[29,55036,15747],{"class":309},[29,55038,55039,55041,55043,55045],{"class":31,"line":2791},[29,55040,54888],{"class":39},[29,55042,51566],{"class":309},[29,55044,54960],{"class":39},[29,55046,1468],{"class":309},[29,55048,55049,55052,55054,55056,55058],{"class":31,"line":2796},[29,55050,55051],{"class":39},"      font-size",[29,55053,51566],{"class":309},[29,55055,1209],{"class":39},[29,55057,51621],{"class":305},[29,55059,1468],{"class":309},[29,55061,55062,55064,55066,55068,55070],{"class":31,"line":8123},[29,55063,54967],{"class":39},[29,55065,51566],{"class":309},[29,55067,1008],{"class":39},[29,55069,51621],{"class":305},[29,55071,1468],{"class":309},[29,55073,55074,55077,55079,55081,55083],{"class":31,"line":8147},[29,55075,55076],{"class":39},"      top",[29,55078,51566],{"class":309},[29,55080,627],{"class":39},[29,55082,51621],{"class":305},[29,55084,1468],{"class":309},[29,55086,55087],{"class":31,"line":8152},[29,55088,2362],{"class":309},[29,55090,55091],{"class":31,"line":8158},[29,55092,2575],{"emptyLinePlaceholder":233},[29,55094,55095,55098],{"class":31,"line":8185},[29,55096,55097],{"class":51429},"    ul",[29,55099,15747],{"class":309},[29,55101,55102,55104,55106,55108],{"class":31,"line":8190},[29,55103,54888],{"class":39},[29,55105,51566],{"class":309},[29,55107,54960],{"class":39},[29,55109,1468],{"class":309},[29,55111,55112,55114,55116,55118,55120],{"class":31,"line":8196},[29,55113,55076],{"class":39},[29,55115,51566],{"class":309},[29,55117,1089],{"class":39},[29,55119,51621],{"class":305},[29,55121,1468],{"class":309},[29,55123,55124,55126,55128,55130,55132],{"class":31,"line":8208},[29,55125,54967],{"class":39},[29,55127,51566],{"class":309},[29,55129,1008],{"class":39},[29,55131,51621],{"class":305},[29,55133,1468],{"class":309},[29,55135,55136,55139,55141,55143],{"class":31,"line":8220},[29,55137,55138],{"class":39},"      display",[29,55140,51566],{"class":309},[29,55142,51606],{"class":39},[29,55144,1468],{"class":309},[29,55146,55147,55150,55152,55154],{"class":31,"line":8232},[29,55148,55149],{"class":39},"      justify-content",[29,55151,51566],{"class":309},[29,55153,51797],{"class":39},[29,55155,1468],{"class":309},[29,55157,55158,55160,55162,55164],{"class":31,"line":9891},[29,55159,54888],{"class":39},[29,55161,51566],{"class":309},[29,55163,54960],{"class":39},[29,55165,1468],{"class":309},[29,55167,55168,55170,55172,55174,55176],{"class":31,"line":9916},[29,55169,54900],{"class":39},[29,55171,51566],{"class":309},[29,55173,4167],{"class":39},[29,55175,51621],{"class":305},[29,55177,1468],{"class":309},[29,55179,55180,55182,55184,55186,55188],{"class":31,"line":9939},[29,55181,54914],{"class":39},[29,55183,51566],{"class":309},[29,55185,1008],{"class":39},[29,55187,51621],{"class":305},[29,55189,1468],{"class":309},[29,55191,55192],{"class":31,"line":9963},[29,55193,2362],{"class":309},[29,55195,55196],{"class":31,"line":9968},[29,55197,2575],{"emptyLinePlaceholder":233},[29,55199,55200,55202,55205],{"class":31,"line":9973},[29,55201,55097],{"class":51429},[29,55203,55204],{"class":51429}," li",[29,55206,15747],{"class":309},[29,55208,55209,55211,55213,55215,55217],{"class":31,"line":9978},[29,55210,54900],{"class":39},[29,55212,51566],{"class":309},[29,55214,1008],{"class":39},[29,55216,51621],{"class":305},[29,55218,1468],{"class":309},[29,55220,55221,55223,55225,55227,55229],{"class":31,"line":9987},[29,55222,54914],{"class":39},[29,55224,51566],{"class":309},[29,55226,1008],{"class":39},[29,55228,51621],{"class":305},[29,55230,1468],{"class":309},[29,55232,55233,55235,55237,55240,55242,55244,55246,55248,55250,55252,55254,55257],{"class":31,"line":9992},[29,55234,55013],{"class":39},[29,55236,51566],{"class":309},[29,55238,55239],{"class":39},"rgba",[29,55241,310],{"class":309},[29,55243,499],{"class":39},[29,55245,12610],{"class":309},[29,55247,499],{"class":39},[29,55249,12610],{"class":309},[29,55251,499],{"class":39},[29,55253,12610],{"class":309},[29,55255,55256],{"class":39},".4",[29,55258,2894],{"class":309},[29,55260,55261,55264,55266,55268,55270],{"class":31,"line":9998},[29,55262,55263],{"class":39},"      border-radius",[29,55265,51566],{"class":309},[29,55267,754],{"class":39},[29,55269,51621],{"class":305},[29,55271,1468],{"class":309},[29,55273,55274],{"class":31,"line":10019},[29,55275,2362],{"class":309},[29,55277,55278],{"class":31,"line":10025},[29,55279,2575],{"emptyLinePlaceholder":233},[29,55281,55282,55285],{"class":31,"line":10039},[29,55283,55284],{"class":35},"    .activate",[29,55286,15747],{"class":309},[29,55288,55289,55291,55293,55296],{"class":31,"line":10045},[29,55290,55013],{"class":39},[29,55292,51566],{"class":309},[29,55294,55295],{"class":39},"#f7f7f7",[29,55297,1468],{"class":309},[29,55299,55300],{"class":31,"line":10072},[29,55301,2362],{"class":309},[29,55303,55304,55306,55308],{"class":31,"line":10081},[29,55305,52546],{"class":309},[29,55307,223],{"class":51429},[29,55309,51436],{"class":309},[29,55311,55312,55314,55316],{"class":31,"line":10087},[29,55313,51914],{"class":309},[29,55315,51463],{"class":51429},[29,55317,51436],{"class":309},[29,55319,55320],{"class":31,"line":10095},[29,55321,2575],{"emptyLinePlaceholder":233},[29,55323,55324,55326,55328],{"class":31,"line":10100},[29,55325,1218],{"class":309},[29,55327,51929],{"class":51429},[29,55329,51436],{"class":309},[29,55331,55332,55334,55336,55338,55340,55342],{"class":31,"line":16779},[29,55333,52273],{"class":309},[29,55335,51740],{"class":51429},[29,55337,53615],{"class":35},[29,55339,355],{"class":309},[29,55341,53620],{"class":103},[29,55343,51436],{"class":309},[29,55345,55346,55348,55350,55352,55354,55357],{"class":31,"line":16785},[29,55347,51470],{"class":309},[29,55349,51740],{"class":51429},[29,55351,53615],{"class":35},[29,55353,355],{"class":309},[29,55355,55356],{"class":103},"\"slider-wrapper\"",[29,55358,51436],{"class":309},[29,55360,55361,55364,55366,55369,55371,55374,55377,55379,55381],{"class":31,"line":16808},[29,55362,55363],{"class":309},"      \u003C",[29,55365,1638],{"class":51429},[29,55367,55368],{"class":35}," src",[29,55370,355],{"class":309},[29,55372,55373],{"class":103},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[29,55375,55376],{"class":35}," alt",[29,55378,355],{"class":309},[29,55380,7827],{"class":103},[29,55382,51436],{"class":309},[29,55384,55385,55387,55389],{"class":31,"line":16814},[29,55386,51905],{"class":309},[29,55388,51740],{"class":51429},[29,55390,51436],{"class":309},[29,55392,55393,55395,55397,55399,55401,55404],{"class":31,"line":16837},[29,55394,51470],{"class":309},[29,55396,51740],{"class":51429},[29,55398,53615],{"class":35},[29,55400,355],{"class":309},[29,55402,55403],{"class":103},"\"slider-footer\"",[29,55405,51436],{"class":309},[29,55407,55408,55410,55412,55415,55417],{"class":31,"line":16851},[29,55409,55363],{"class":309},[29,55411,171],{"class":51429},[29,55413,55414],{"class":309},">对人类来说会不会太超前了?\u003C\u002F",[29,55416,171],{"class":51429},[29,55418,51436],{"class":309},[29,55420,55421,55423,55425],{"class":31,"line":16871},[29,55422,55363],{"class":309},[29,55424,175],{"class":51429},[29,55426,51436],{"class":309},[29,55428,55429,55432,55434,55436,55438,55441,55444,55446],{"class":31,"line":16877},[29,55430,55431],{"class":309},"        \u003C",[29,55433,178],{"class":51429},[29,55435,53615],{"class":35},[29,55437,355],{"class":309},[29,55439,55440],{"class":103},"\"activate\"",[29,55442,55443],{"class":309},">\u003C\u002F",[29,55445,178],{"class":51429},[29,55447,51436],{"class":309},[29,55449,55450,55452,55454,55456,55458],{"class":31,"line":16888},[29,55451,55431],{"class":309},[29,55453,178],{"class":51429},[29,55455,55443],{"class":309},[29,55457,178],{"class":51429},[29,55459,51436],{"class":309},[29,55461,55462,55464,55466,55468,55470],{"class":31,"line":16911},[29,55463,55431],{"class":309},[29,55465,178],{"class":51429},[29,55467,55443],{"class":309},[29,55469,178],{"class":51429},[29,55471,51436],{"class":309},[29,55473,55474,55476,55478,55480,55482],{"class":31,"line":16933},[29,55475,55431],{"class":309},[29,55477,178],{"class":51429},[29,55479,55443],{"class":309},[29,55481,178],{"class":51429},[29,55483,51436],{"class":309},[29,55485,55486,55488,55490,55492,55494],{"class":31,"line":16938},[29,55487,55431],{"class":309},[29,55489,178],{"class":51429},[29,55491,55443],{"class":309},[29,55493,178],{"class":51429},[29,55495,51436],{"class":309},[29,55497,55498,55500,55502,55504,55506],{"class":31,"line":16944},[29,55499,55431],{"class":309},[29,55501,178],{"class":51429},[29,55503,55443],{"class":309},[29,55505,178],{"class":51429},[29,55507,51436],{"class":309},[29,55509,55510,55512,55514,55516,55518],{"class":31,"line":16958},[29,55511,55431],{"class":309},[29,55513,178],{"class":51429},[29,55515,55443],{"class":309},[29,55517,178],{"class":51429},[29,55519,51436],{"class":309},[29,55521,55522,55524,55526,55528,55530],{"class":31,"line":16971},[29,55523,55431],{"class":309},[29,55525,178],{"class":51429},[29,55527,55443],{"class":309},[29,55529,178],{"class":51429},[29,55531,51436],{"class":309},[29,55533,55534,55537,55539],{"class":31,"line":16976},[29,55535,55536],{"class":309},"      \u003C\u002F",[29,55538,175],{"class":51429},[29,55540,51436],{"class":309},[29,55542,55543,55545,55547],{"class":31,"line":16990},[29,55544,51905],{"class":309},[29,55546,51740],{"class":51429},[29,55548,51436],{"class":309},[29,55550,55551,55553,55555],{"class":31,"line":16995},[29,55552,52546],{"class":309},[29,55554,51740],{"class":51429},[29,55556,51436],{"class":309},[29,55558,55559,55561,55563],{"class":31,"line":17001},[29,55560,52273],{"class":309},[29,55562,51942],{"class":51429},[29,55564,51436],{"class":309},[29,55566,55567,55569,55572,55574],{"class":31,"line":17006},[29,55568,11396],{"class":305},[29,55570,55571],{"class":39}," arrImage",[29,55573,13739],{"class":305},[29,55575,55576],{"class":309}," [\n",[29,55578,55579,55582,55585,55588,55591,55594,55597],{"class":31,"line":17020},[29,55580,55581],{"class":309},"      { url: ",[29,55583,55584],{"class":103},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[29,55586,55587],{"class":309},", title: ",[29,55589,55590],{"class":103},"'对人类来说会不会太超前了?'",[29,55592,55593],{"class":309},", color: ",[29,55595,55596],{"class":103},"'rgba(100,67,68)'",[29,55598,55599],{"class":309}," },\n",[29,55601,55602,55604,55607,55609,55612,55614,55617],{"class":31,"line":17025},[29,55603,55581],{"class":309},[29,55605,55606],{"class":103},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[29,55608,55587],{"class":309},[29,55610,55611],{"class":103},"'开启剑与雪的黑暗传说!'",[29,55613,55593],{"class":309},[29,55615,55616],{"class":103},"'rgba(43,35,26)'",[29,55618,55599],{"class":309},[29,55620,55621,55623,55626,55628,55631,55633,55636],{"class":31,"line":17030},[29,55622,55581],{"class":309},[29,55624,55625],{"class":103},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[29,55627,55587],{"class":309},[29,55629,55630],{"class":103},"'真正的jo厨出现了!'",[29,55632,55593],{"class":309},[29,55634,55635],{"class":103},"'rgba(36,31,33)'",[29,55637,55599],{"class":309},[29,55639,55640,55642,55645,55647,55650,55652,55655],{"class":31,"line":17044},[29,55641,55581],{"class":309},[29,55643,55644],{"class":103},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[29,55646,55587],{"class":309},[29,55648,55649],{"class":103},"'李玉刚:让世界通过b站看到东方大国文化'",[29,55651,55593],{"class":309},[29,55653,55654],{"class":103},"'rgba(139,98,66)'",[29,55656,55599],{"class":309},[29,55658,55659,55661,55664,55666,55669,55671,55674],{"class":31,"line":17056},[29,55660,55581],{"class":309},[29,55662,55663],{"class":103},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[29,55665,55587],{"class":309},[29,55667,55668],{"class":103},"'快来分享你的寒假日常吧'",[29,55670,55593],{"class":309},[29,55672,55673],{"class":103},"'rgba(67,90,92)'",[29,55675,55599],{"class":309},[29,55677,55678,55680,55683,55685,55688,55690,55693],{"class":31,"line":17061},[29,55679,55581],{"class":309},[29,55681,55682],{"class":103},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[29,55684,55587],{"class":309},[29,55686,55687],{"class":103},"'哔哩哔哩小年YEAR'",[29,55689,55593],{"class":309},[29,55691,55692],{"class":103},"'rgba(166,131,143)'",[29,55694,55599],{"class":309},[29,55696,55697,55699,55702,55704,55707,55709,55712],{"class":31,"line":17074},[29,55698,55581],{"class":309},[29,55700,55701],{"class":103},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[29,55703,55587],{"class":309},[29,55705,55706],{"class":103},"'一站式解决你的电脑配置问题'",[29,55708,55593],{"class":309},[29,55710,55711],{"class":103},"'rgba(53,29,25)'",[29,55713,55599],{"class":309},[29,55715,55716,55718,55721,55723,55726,55728,55731],{"class":31,"line":17079},[29,55717,55581],{"class":309},[29,55719,55720],{"class":103},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[29,55722,55587],{"class":309},[29,55724,55725],{"class":103},"'谁不想和小猫咪贴贴呢?'",[29,55727,55593],{"class":309},[29,55729,55730],{"class":103},"'rgba(99,72,114)'",[29,55732,55733],{"class":309}," }\n",[29,55735,55736],{"class":31,"line":17084},[29,55737,53238],{"class":309},[29,55739,55740,55742,55745,55747,55749,55751,55753,55756],{"class":31,"line":17089},[29,55741,11396],{"class":305},[29,55743,55744],{"class":39}," img",[29,55746,13739],{"class":305},[29,55748,54525],{"class":309},[29,55750,54528],{"class":35},[29,55752,310],{"class":309},[29,55754,55755],{"class":103},"'.slider-wrapper img'",[29,55757,316],{"class":309},[29,55759,55760,55762,55764,55766,55768,55770,55772,55775],{"class":31,"line":17102},[29,55761,11396],{"class":305},[29,55763,7000],{"class":39},[29,55765,13739],{"class":305},[29,55767,54525],{"class":309},[29,55769,54528],{"class":35},[29,55771,310],{"class":309},[29,55773,55774],{"class":103},"'.slider-footer p'",[29,55776,316],{"class":309},[29,55778,55779,55781,55784,55786,55788,55790,55792,55795],{"class":31,"line":17107},[29,55780,11396],{"class":305},[29,55782,55783],{"class":39}," color",[29,55785,13739],{"class":305},[29,55787,54525],{"class":309},[29,55789,54528],{"class":35},[29,55791,310],{"class":309},[29,55793,55794],{"class":103},"'.slider-footer'",[29,55796,316],{"class":309},[29,55798,55799,55801,55804,55806,55808,55811,55813,55816],{"class":31,"line":32762},[29,55800,11396],{"class":305},[29,55802,55803],{"class":39}," lis",[29,55805,13739],{"class":305},[29,55807,54525],{"class":309},[29,55809,55810],{"class":35},"querySelectorAll",[29,55812,310],{"class":309},[29,55814,55815],{"class":103},"'.slider-footer ul li'",[29,55817,316],{"class":309},[29,55819,55820,55822,55824,55826],{"class":31,"line":32768},[29,55821,52348],{"class":305},[29,55823,9613],{"class":309},[29,55825,355],{"class":305},[29,55827,55828],{"class":39}," 1\n",[29,55830,55831,55833,55836,55838,55840,55842,55844],{"class":31,"line":32774},[29,55832,52348],{"class":305},[29,55834,55835],{"class":309}," timer ",[29,55837,355],{"class":305},[29,55839,54573],{"class":35},[29,55841,310],{"class":309},[29,55843,54578],{"class":305},[29,55845,54581],{"class":309},[29,55847,55848,55851,55853],{"class":31,"line":32780},[29,55849,55850],{"class":309},"      img.src ",[29,55852,355],{"class":305},[29,55854,55855],{"class":309}," arrImage[i].url\n",[29,55857,55858,55861,55863],{"class":31,"line":32786},[29,55859,55860],{"class":309},"      p.innerHTML ",[29,55862,355],{"class":305},[29,55864,55865],{"class":309}," arrImage[i].title\n",[29,55867,55868,55871,55873],{"class":31,"line":32797},[29,55869,55870],{"class":309},"      color.style.backgroundColor ",[29,55872,355],{"class":305},[29,55874,55875],{"class":309}," arrImage[i].color\n",[29,55877,55878],{"class":31,"line":32803},[29,55879,55880],{"class":367},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[29,55882,55883],{"class":31,"line":32823},[29,55884,55885],{"class":367},"      \u002F\u002F li.classList.add('activate')\n",[29,55887,55888],{"class":31,"line":32829},[29,55889,55890],{"class":367},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[29,55892,55893],{"class":31,"line":32840},[29,55894,55895],{"class":367},"      \u002F\u002F lis[i].classList.remove('activate')\n",[29,55897,55898,55901,55903,55905,55908,55911,55914,55916,55919],{"class":31,"line":32846},[29,55899,55900],{"class":309},"      document.",[29,55902,54528],{"class":35},[29,55904,310],{"class":309},[29,55906,55907],{"class":103},"'.activate'",[29,55909,55910],{"class":309},")?.classList.",[29,55912,55913],{"class":35},"toggle",[29,55915,310],{"class":309},[29,55917,55918],{"class":103},"'activate'",[29,55920,316],{"class":309},[29,55922,55923,55926,55928,55930,55932],{"class":31,"line":32852},[29,55924,55925],{"class":309},"      lis[i].classList.",[29,55927,5509],{"class":35},[29,55929,310],{"class":309},[29,55931,55918],{"class":103},[29,55933,316],{"class":309},[29,55935,55936],{"class":31,"line":32858},[29,55937,2575],{"emptyLinePlaceholder":233},[29,55939,55940,55943,55945,55947,55949,55951,55953,55955,55958],{"class":31,"line":32864},[29,55941,55942],{"class":309},"      i ",[29,55944,355],{"class":305},[29,55946,54612],{"class":309},[29,55948,789],{"class":305},[29,55950,25247],{"class":39},[29,55952,13889],{"class":309},[29,55954,636],{"class":305},[29,55956,55957],{"class":309}," arrImage.",[29,55959,55960],{"class":39},"length\n",[29,55962,55963],{"class":31,"line":32870},[29,55964,2575],{"emptyLinePlaceholder":233},[29,55966,55967,55969,55971],{"class":31,"line":32876},[29,55968,54664],{"class":309},[29,55970,6585],{"class":39},[29,55972,316],{"class":309},[29,55974,55975,55977,55979],{"class":31,"line":32882},[29,55976,52546],{"class":309},[29,55978,51942],{"class":51429},[29,55980,51436],{"class":309},[29,55982,55983,55985,55987],{"class":31,"line":32902},[29,55984,51914],{"class":309},[29,55986,51929],{"class":51429},[29,55988,51436],{"class":309},[29,55990,55991],{"class":31,"line":32908},[29,55992,2575],{"emptyLinePlaceholder":233},[29,55994,55995,55997,55999],{"class":31,"line":32924},[29,55996,51914],{"class":309},[29,55998,50764],{"class":51429},[29,56000,51436],{"class":309},[171,56002,56003],{},[1638,56004],{"alt":24,"src":56005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[171,56007,56008],{},"?.就是短路保护,确保输出正常进行",[171,56010,56011],{},"不要忘记取余%,有时候可以用",[171,56013,56014],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[259,56016,56017],{"start":43},[178,56018,56019],{},"法2",[19,56021,56023],{"className":50762,"code":56022,"language":50764,"meta":24,"style":24},"\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",[26,56024,56025,56035,56049,56053,56061,56075,56095,56107,56115,56121,56131,56141,56145,56149,56155,56165,56169,56173,56179,56189,56201,56213,56227,56231,56235,56241,56251,56261,56271,56283,56295,56305,56309,56313,56321,56331,56343,56355,56367,56371,56375,56381,56391,56403,56415,56425,56435,56445,56457,56469,56473,56477,56485,56497,56509,56535,56547,56551,56555,56561,56571,56575,56583,56591,56595,56603,56617,56631,56651,56659,56673,56685,56693,56711,56723,56735,56747,56759,56771,56783,56795,56803,56811,56819,56827,56838,56854,56870,56886,56902,56918,56934,56950,56966,56970,56975,56993,57011,57021,57026,57031,57042,57048,57063,57072,57076,57081,57090,57095,57104,57109,57114,57119,57142,57172,57176,57184,57188,57196,57204,57208],{"__ignoreMap":24},[29,56026,56027,56029,56031,56033],{"class":31,"line":32},[29,56028,51426],{"class":309},[29,56030,51430],{"class":51429},[29,56032,51433],{"class":35},[29,56034,51436],{"class":309},[29,56036,56037,56039,56041,56043,56045,56047],{"class":31,"line":43},[29,56038,1218],{"class":309},[29,56040,50764],{"class":51429},[29,56042,51445],{"class":35},[29,56044,355],{"class":309},[29,56046,51450],{"class":103},[29,56048,51436],{"class":309},[29,56050,56051],{"class":31,"line":51},[29,56052,2575],{"emptyLinePlaceholder":233},[29,56054,56055,56057,56059],{"class":31,"line":59},[29,56056,1218],{"class":309},[29,56058,51463],{"class":51429},[29,56060,51436],{"class":309},[29,56062,56063,56065,56067,56069,56071,56073],{"class":31,"line":67},[29,56064,52273],{"class":309},[29,56066,51473],{"class":51429},[29,56068,51476],{"class":35},[29,56070,355],{"class":309},[29,56072,51481],{"class":103},[29,56074,51436],{"class":309},[29,56076,56077,56079,56081,56083,56085,56087,56089,56091,56093],{"class":31,"line":75},[29,56078,52273],{"class":309},[29,56080,51473],{"class":51429},[29,56082,15095],{"class":35},[29,56084,355],{"class":309},[29,56086,51520],{"class":103},[29,56088,51500],{"class":35},[29,56090,355],{"class":309},[29,56092,51527],{"class":103},[29,56094,51436],{"class":309},[29,56096,56097,56099,56101,56103,56105],{"class":31,"line":83},[29,56098,52273],{"class":309},[29,56100,51536],{"class":51429},[29,56102,51539],{"class":309},[29,56104,51536],{"class":51429},[29,56106,51436],{"class":309},[29,56108,56109,56111,56113],{"class":31,"line":158},[29,56110,52273],{"class":309},[29,56112,223],{"class":51429},[29,56114,51436],{"class":309},[29,56116,56117,56119],{"class":31,"line":166},[29,56118,6578],{"class":51429},[29,56120,15747],{"class":309},[29,56122,56123,56125,56127,56129],{"class":31,"line":1505},[29,56124,54824],{"class":39},[29,56126,51566],{"class":309},[29,56128,499],{"class":39},[29,56130,1468],{"class":309},[29,56132,56133,56135,56137,56139],{"class":31,"line":1788},[29,56134,54835],{"class":39},[29,56136,51566],{"class":309},[29,56138,499],{"class":39},[29,56140,1468],{"class":309},[29,56142,56143],{"class":31,"line":1793},[29,56144,2362],{"class":309},[29,56146,56147],{"class":31,"line":1799},[29,56148,2575],{"emptyLinePlaceholder":233},[29,56150,56151,56153],{"class":31,"line":1804},[29,56152,54854],{"class":51429},[29,56154,15747],{"class":309},[29,56156,56157,56159,56161,56163],{"class":31,"line":1818},[29,56158,54861],{"class":39},[29,56160,51566],{"class":309},[29,56162,54866],{"class":39},[29,56164,1468],{"class":309},[29,56166,56167],{"class":31,"line":1823},[29,56168,2362],{"class":309},[29,56170,56171],{"class":31,"line":1829},[29,56172,2575],{"emptyLinePlaceholder":233},[29,56174,56175,56177],{"class":31,"line":1850},[29,56176,54881],{"class":35},[29,56178,15747],{"class":309},[29,56180,56181,56183,56185,56187],{"class":31,"line":1855},[29,56182,54888],{"class":39},[29,56184,51566],{"class":309},[29,56186,54893],{"class":39},[29,56188,1468],{"class":309},[29,56190,56191,56193,56195,56197,56199],{"class":31,"line":1869},[29,56192,54900],{"class":39},[29,56194,51566],{"class":309},[29,56196,54905],{"class":39},[29,56198,51621],{"class":305},[29,56200,1468],{"class":309},[29,56202,56203,56205,56207,56209,56211],{"class":31,"line":1874},[29,56204,54914],{"class":39},[29,56206,51566],{"class":309},[29,56208,1715],{"class":39},[29,56210,51621],{"class":305},[29,56212,1468],{"class":309},[29,56214,56215,56217,56219,56221,56223,56225],{"class":31,"line":1903},[29,56216,54835],{"class":39},[29,56218,51566],{"class":309},[29,56220,619],{"class":39},[29,56222,51621],{"class":305},[29,56224,51685],{"class":39},[29,56226,1468],{"class":309},[29,56228,56229],{"class":31,"line":1908},[29,56230,2362],{"class":309},[29,56232,56233],{"class":31,"line":1925},[29,56234,2575],{"emptyLinePlaceholder":233},[29,56236,56237,56239],{"class":31,"line":1930},[29,56238,54949],{"class":35},[29,56240,15747],{"class":309},[29,56242,56243,56245,56247,56249],{"class":31,"line":1935},[29,56244,54888],{"class":39},[29,56246,51566],{"class":309},[29,56248,54960],{"class":39},[29,56250,1468],{"class":309},[29,56252,56253,56255,56257,56259],{"class":31,"line":1940},[29,56254,54967],{"class":39},[29,56256,51566],{"class":309},[29,56258,499],{"class":39},[29,56260,1468],{"class":309},[29,56262,56263,56265,56267,56269],{"class":31,"line":1954},[29,56264,54978],{"class":39},[29,56266,51566],{"class":309},[29,56268,499],{"class":39},[29,56270,1468],{"class":309},[29,56272,56273,56275,56277,56279,56281],{"class":31,"line":1959},[29,56274,54900],{"class":39},[29,56276,51566],{"class":309},[29,56278,619],{"class":39},[29,56280,636],{"class":305},[29,56282,1468],{"class":309},[29,56284,56285,56287,56289,56291,56293],{"class":31,"line":2752},[29,56286,54914],{"class":39},[29,56288,51566],{"class":309},[29,56290,883],{"class":39},[29,56292,636],{"class":305},[29,56294,1468],{"class":309},[29,56296,56297,56299,56301,56303],{"class":31,"line":2766},[29,56298,55013],{"class":39},[29,56300,51566],{"class":309},[29,56302,55018],{"class":39},[29,56304,1468],{"class":309},[29,56306,56307],{"class":31,"line":2774},[29,56308,2362],{"class":309},[29,56310,56311],{"class":31,"line":2779},[29,56312,2575],{"emptyLinePlaceholder":233},[29,56314,56315,56317,56319],{"class":31,"line":2785},[29,56316,54949],{"class":35},[29,56318,7000],{"class":51429},[29,56320,15747],{"class":309},[29,56322,56323,56325,56327,56329],{"class":31,"line":2791},[29,56324,54888],{"class":39},[29,56326,51566],{"class":309},[29,56328,54960],{"class":39},[29,56330,1468],{"class":309},[29,56332,56333,56335,56337,56339,56341],{"class":31,"line":2796},[29,56334,55051],{"class":39},[29,56336,51566],{"class":309},[29,56338,1209],{"class":39},[29,56340,51621],{"class":305},[29,56342,1468],{"class":309},[29,56344,56345,56347,56349,56351,56353],{"class":31,"line":8123},[29,56346,54967],{"class":39},[29,56348,51566],{"class":309},[29,56350,1008],{"class":39},[29,56352,51621],{"class":305},[29,56354,1468],{"class":309},[29,56356,56357,56359,56361,56363,56365],{"class":31,"line":8147},[29,56358,55076],{"class":39},[29,56360,51566],{"class":309},[29,56362,627],{"class":39},[29,56364,51621],{"class":305},[29,56366,1468],{"class":309},[29,56368,56369],{"class":31,"line":8152},[29,56370,2362],{"class":309},[29,56372,56373],{"class":31,"line":8158},[29,56374,2575],{"emptyLinePlaceholder":233},[29,56376,56377,56379],{"class":31,"line":8185},[29,56378,55097],{"class":51429},[29,56380,15747],{"class":309},[29,56382,56383,56385,56387,56389],{"class":31,"line":8190},[29,56384,54888],{"class":39},[29,56386,51566],{"class":309},[29,56388,54960],{"class":39},[29,56390,1468],{"class":309},[29,56392,56393,56395,56397,56399,56401],{"class":31,"line":8196},[29,56394,55076],{"class":39},[29,56396,51566],{"class":309},[29,56398,1089],{"class":39},[29,56400,51621],{"class":305},[29,56402,1468],{"class":309},[29,56404,56405,56407,56409,56411,56413],{"class":31,"line":8208},[29,56406,54967],{"class":39},[29,56408,51566],{"class":309},[29,56410,1008],{"class":39},[29,56412,51621],{"class":305},[29,56414,1468],{"class":309},[29,56416,56417,56419,56421,56423],{"class":31,"line":8220},[29,56418,55138],{"class":39},[29,56420,51566],{"class":309},[29,56422,51606],{"class":39},[29,56424,1468],{"class":309},[29,56426,56427,56429,56431,56433],{"class":31,"line":8232},[29,56428,55149],{"class":39},[29,56430,51566],{"class":309},[29,56432,51797],{"class":39},[29,56434,1468],{"class":309},[29,56436,56437,56439,56441,56443],{"class":31,"line":9891},[29,56438,54888],{"class":39},[29,56440,51566],{"class":309},[29,56442,54960],{"class":39},[29,56444,1468],{"class":309},[29,56446,56447,56449,56451,56453,56455],{"class":31,"line":9916},[29,56448,54900],{"class":39},[29,56450,51566],{"class":309},[29,56452,4167],{"class":39},[29,56454,51621],{"class":305},[29,56456,1468],{"class":309},[29,56458,56459,56461,56463,56465,56467],{"class":31,"line":9939},[29,56460,54914],{"class":39},[29,56462,51566],{"class":309},[29,56464,1008],{"class":39},[29,56466,51621],{"class":305},[29,56468,1468],{"class":309},[29,56470,56471],{"class":31,"line":9963},[29,56472,2362],{"class":309},[29,56474,56475],{"class":31,"line":9968},[29,56476,2575],{"emptyLinePlaceholder":233},[29,56478,56479,56481,56483],{"class":31,"line":9973},[29,56480,55097],{"class":51429},[29,56482,55204],{"class":51429},[29,56484,15747],{"class":309},[29,56486,56487,56489,56491,56493,56495],{"class":31,"line":9978},[29,56488,54900],{"class":39},[29,56490,51566],{"class":309},[29,56492,1008],{"class":39},[29,56494,51621],{"class":305},[29,56496,1468],{"class":309},[29,56498,56499,56501,56503,56505,56507],{"class":31,"line":9987},[29,56500,54914],{"class":39},[29,56502,51566],{"class":309},[29,56504,1008],{"class":39},[29,56506,51621],{"class":305},[29,56508,1468],{"class":309},[29,56510,56511,56513,56515,56517,56519,56521,56523,56525,56527,56529,56531,56533],{"class":31,"line":9992},[29,56512,55013],{"class":39},[29,56514,51566],{"class":309},[29,56516,55239],{"class":39},[29,56518,310],{"class":309},[29,56520,499],{"class":39},[29,56522,12610],{"class":309},[29,56524,499],{"class":39},[29,56526,12610],{"class":309},[29,56528,499],{"class":39},[29,56530,12610],{"class":309},[29,56532,55256],{"class":39},[29,56534,2894],{"class":309},[29,56536,56537,56539,56541,56543,56545],{"class":31,"line":9998},[29,56538,55263],{"class":39},[29,56540,51566],{"class":309},[29,56542,754],{"class":39},[29,56544,51621],{"class":305},[29,56546,1468],{"class":309},[29,56548,56549],{"class":31,"line":10019},[29,56550,2362],{"class":309},[29,56552,56553],{"class":31,"line":10025},[29,56554,2575],{"emptyLinePlaceholder":233},[29,56556,56557,56559],{"class":31,"line":10039},[29,56558,55284],{"class":35},[29,56560,15747],{"class":309},[29,56562,56563,56565,56567,56569],{"class":31,"line":10045},[29,56564,55013],{"class":39},[29,56566,51566],{"class":309},[29,56568,55295],{"class":39},[29,56570,1468],{"class":309},[29,56572,56573],{"class":31,"line":10072},[29,56574,2362],{"class":309},[29,56576,56577,56579,56581],{"class":31,"line":10081},[29,56578,52546],{"class":309},[29,56580,223],{"class":51429},[29,56582,51436],{"class":309},[29,56584,56585,56587,56589],{"class":31,"line":10087},[29,56586,51914],{"class":309},[29,56588,51463],{"class":51429},[29,56590,51436],{"class":309},[29,56592,56593],{"class":31,"line":10095},[29,56594,2575],{"emptyLinePlaceholder":233},[29,56596,56597,56599,56601],{"class":31,"line":10100},[29,56598,1218],{"class":309},[29,56600,51929],{"class":51429},[29,56602,51436],{"class":309},[29,56604,56605,56607,56609,56611,56613,56615],{"class":31,"line":16779},[29,56606,52273],{"class":309},[29,56608,51740],{"class":51429},[29,56610,53615],{"class":35},[29,56612,355],{"class":309},[29,56614,53620],{"class":103},[29,56616,51436],{"class":309},[29,56618,56619,56621,56623,56625,56627,56629],{"class":31,"line":16785},[29,56620,51470],{"class":309},[29,56622,51740],{"class":51429},[29,56624,53615],{"class":35},[29,56626,355],{"class":309},[29,56628,55356],{"class":103},[29,56630,51436],{"class":309},[29,56632,56633,56635,56637,56639,56641,56643,56645,56647,56649],{"class":31,"line":16808},[29,56634,55363],{"class":309},[29,56636,1638],{"class":51429},[29,56638,55368],{"class":35},[29,56640,355],{"class":309},[29,56642,55373],{"class":103},[29,56644,55376],{"class":35},[29,56646,355],{"class":309},[29,56648,7827],{"class":103},[29,56650,51436],{"class":309},[29,56652,56653,56655,56657],{"class":31,"line":16814},[29,56654,51905],{"class":309},[29,56656,51740],{"class":51429},[29,56658,51436],{"class":309},[29,56660,56661,56663,56665,56667,56669,56671],{"class":31,"line":16837},[29,56662,51470],{"class":309},[29,56664,51740],{"class":51429},[29,56666,53615],{"class":35},[29,56668,355],{"class":309},[29,56670,55403],{"class":103},[29,56672,51436],{"class":309},[29,56674,56675,56677,56679,56681,56683],{"class":31,"line":16851},[29,56676,55363],{"class":309},[29,56678,171],{"class":51429},[29,56680,55414],{"class":309},[29,56682,171],{"class":51429},[29,56684,51436],{"class":309},[29,56686,56687,56689,56691],{"class":31,"line":16871},[29,56688,55363],{"class":309},[29,56690,175],{"class":51429},[29,56692,51436],{"class":309},[29,56694,56695,56697,56699,56701,56703,56705,56707,56709],{"class":31,"line":16877},[29,56696,55431],{"class":309},[29,56698,178],{"class":51429},[29,56700,53615],{"class":35},[29,56702,355],{"class":309},[29,56704,55440],{"class":103},[29,56706,55443],{"class":309},[29,56708,178],{"class":51429},[29,56710,51436],{"class":309},[29,56712,56713,56715,56717,56719,56721],{"class":31,"line":16888},[29,56714,55431],{"class":309},[29,56716,178],{"class":51429},[29,56718,55443],{"class":309},[29,56720,178],{"class":51429},[29,56722,51436],{"class":309},[29,56724,56725,56727,56729,56731,56733],{"class":31,"line":16911},[29,56726,55431],{"class":309},[29,56728,178],{"class":51429},[29,56730,55443],{"class":309},[29,56732,178],{"class":51429},[29,56734,51436],{"class":309},[29,56736,56737,56739,56741,56743,56745],{"class":31,"line":16933},[29,56738,55431],{"class":309},[29,56740,178],{"class":51429},[29,56742,55443],{"class":309},[29,56744,178],{"class":51429},[29,56746,51436],{"class":309},[29,56748,56749,56751,56753,56755,56757],{"class":31,"line":16938},[29,56750,55431],{"class":309},[29,56752,178],{"class":51429},[29,56754,55443],{"class":309},[29,56756,178],{"class":51429},[29,56758,51436],{"class":309},[29,56760,56761,56763,56765,56767,56769],{"class":31,"line":16944},[29,56762,55431],{"class":309},[29,56764,178],{"class":51429},[29,56766,55443],{"class":309},[29,56768,178],{"class":51429},[29,56770,51436],{"class":309},[29,56772,56773,56775,56777,56779,56781],{"class":31,"line":16958},[29,56774,55431],{"class":309},[29,56776,178],{"class":51429},[29,56778,55443],{"class":309},[29,56780,178],{"class":51429},[29,56782,51436],{"class":309},[29,56784,56785,56787,56789,56791,56793],{"class":31,"line":16971},[29,56786,55431],{"class":309},[29,56788,178],{"class":51429},[29,56790,55443],{"class":309},[29,56792,178],{"class":51429},[29,56794,51436],{"class":309},[29,56796,56797,56799,56801],{"class":31,"line":16976},[29,56798,55536],{"class":309},[29,56800,175],{"class":51429},[29,56802,51436],{"class":309},[29,56804,56805,56807,56809],{"class":31,"line":16990},[29,56806,51905],{"class":309},[29,56808,51740],{"class":51429},[29,56810,51436],{"class":309},[29,56812,56813,56815,56817],{"class":31,"line":16995},[29,56814,52546],{"class":309},[29,56816,51740],{"class":51429},[29,56818,51436],{"class":309},[29,56820,56821,56823,56825],{"class":31,"line":17001},[29,56822,52273],{"class":309},[29,56824,51942],{"class":51429},[29,56826,51436],{"class":309},[29,56828,56829,56831,56834,56836],{"class":31,"line":17006},[29,56830,11396],{"class":305},[29,56832,56833],{"class":39}," sliderData",[29,56835,13739],{"class":305},[29,56837,55576],{"class":309},[29,56839,56840,56842,56844,56846,56848,56850,56852],{"class":31,"line":17020},[29,56841,55581],{"class":309},[29,56843,55584],{"class":103},[29,56845,55587],{"class":309},[29,56847,55590],{"class":103},[29,56849,55593],{"class":309},[29,56851,55596],{"class":103},[29,56853,55599],{"class":309},[29,56855,56856,56858,56860,56862,56864,56866,56868],{"class":31,"line":17025},[29,56857,55581],{"class":309},[29,56859,55606],{"class":103},[29,56861,55587],{"class":309},[29,56863,55611],{"class":103},[29,56865,55593],{"class":309},[29,56867,55616],{"class":103},[29,56869,55599],{"class":309},[29,56871,56872,56874,56876,56878,56880,56882,56884],{"class":31,"line":17030},[29,56873,55581],{"class":309},[29,56875,55625],{"class":103},[29,56877,55587],{"class":309},[29,56879,55630],{"class":103},[29,56881,55593],{"class":309},[29,56883,55635],{"class":103},[29,56885,55599],{"class":309},[29,56887,56888,56890,56892,56894,56896,56898,56900],{"class":31,"line":17044},[29,56889,55581],{"class":309},[29,56891,55644],{"class":103},[29,56893,55587],{"class":309},[29,56895,55649],{"class":103},[29,56897,55593],{"class":309},[29,56899,55654],{"class":103},[29,56901,55599],{"class":309},[29,56903,56904,56906,56908,56910,56912,56914,56916],{"class":31,"line":17056},[29,56905,55581],{"class":309},[29,56907,55663],{"class":103},[29,56909,55587],{"class":309},[29,56911,55668],{"class":103},[29,56913,55593],{"class":309},[29,56915,55673],{"class":103},[29,56917,55599],{"class":309},[29,56919,56920,56922,56924,56926,56928,56930,56932],{"class":31,"line":17061},[29,56921,55581],{"class":309},[29,56923,55682],{"class":103},[29,56925,55587],{"class":309},[29,56927,55687],{"class":103},[29,56929,55593],{"class":309},[29,56931,55692],{"class":103},[29,56933,55599],{"class":309},[29,56935,56936,56938,56940,56942,56944,56946,56948],{"class":31,"line":17074},[29,56937,55581],{"class":309},[29,56939,55701],{"class":103},[29,56941,55587],{"class":309},[29,56943,55706],{"class":103},[29,56945,55593],{"class":309},[29,56947,55711],{"class":103},[29,56949,55599],{"class":309},[29,56951,56952,56954,56956,56958,56960,56962,56964],{"class":31,"line":17079},[29,56953,55581],{"class":309},[29,56955,55720],{"class":103},[29,56957,55587],{"class":309},[29,56959,55725],{"class":103},[29,56961,55593],{"class":309},[29,56963,55730],{"class":103},[29,56965,55733],{"class":309},[29,56967,56968],{"class":31,"line":17084},[29,56969,53238],{"class":309},[29,56971,56972],{"class":31,"line":17089},[29,56973,56974],{"class":367},"    \u002F\u002F 1.获取元素\n",[29,56976,56977,56979,56981,56983,56985,56987,56989,56991],{"class":31,"line":17102},[29,56978,11396],{"class":305},[29,56980,55744],{"class":39},[29,56982,13739],{"class":305},[29,56984,54525],{"class":309},[29,56986,54528],{"class":35},[29,56988,310],{"class":309},[29,56990,55755],{"class":103},[29,56992,316],{"class":309},[29,56994,56995,56997,56999,57001,57003,57005,57007,57009],{"class":31,"line":17107},[29,56996,11396],{"class":305},[29,56998,7000],{"class":39},[29,57000,13739],{"class":305},[29,57002,54525],{"class":309},[29,57004,54528],{"class":35},[29,57006,310],{"class":309},[29,57008,55774],{"class":103},[29,57010,316],{"class":309},[29,57012,57013,57015,57017,57019],{"class":31,"line":32762},[29,57014,52348],{"class":305},[29,57016,9613],{"class":309},[29,57018,355],{"class":305},[29,57020,47462],{"class":39},[29,57022,57023],{"class":31,"line":32768},[29,57024,57025],{"class":367},"    \u002F\u002F 2.开启定时器\n",[29,57027,57028],{"class":31,"line":32774},[29,57029,57030],{"class":367},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[29,57032,57033,57036,57038,57040],{"class":31,"line":32780},[29,57034,57035],{"class":35},"    setInterval",[29,57037,310],{"class":309},[29,57039,54578],{"class":305},[29,57041,54581],{"class":309},[29,57043,57044,57046],{"class":31,"line":32786},[29,57045,54586],{"class":309},[29,57047,2877],{"class":305},[29,57049,57050,57052,57054,57056,57059,57061],{"class":31,"line":32797},[29,57051,54609],{"class":305},[29,57053,54612],{"class":309},[29,57055,1886],{"class":305},[29,57057,57058],{"class":309}," sliderData.",[29,57060,52097],{"class":39},[29,57062,12617],{"class":309},[29,57064,57065,57068,57070],{"class":31,"line":32803},[29,57066,57067],{"class":309},"        i ",[29,57069,355],{"class":305},[29,57071,47462],{"class":39},[29,57073,57074],{"class":31,"line":32823},[29,57075,52527],{"class":309},[29,57077,57078],{"class":31,"line":32829},[29,57079,57080],{"class":367},"      \u002F\u002F 更换图片路径\n",[29,57082,57083,57085,57087],{"class":31,"line":32840},[29,57084,55850],{"class":309},[29,57086,355],{"class":305},[29,57088,57089],{"class":309}," sliderData[i].url\n",[29,57091,57092],{"class":31,"line":32846},[29,57093,57094],{"class":367},"      \u002F\u002F 把文字写到p里面\n",[29,57096,57097,57099,57101],{"class":31,"line":32852},[29,57098,55860],{"class":309},[29,57100,355],{"class":305},[29,57102,57103],{"class":309}," sliderData[i].title\n",[29,57105,57106],{"class":31,"line":32858},[29,57107,57108],{"class":367},"      \u002F\u002F 小圆点\n",[29,57110,57111],{"class":31,"line":32864},[29,57112,57113],{"class":367},"      \u002F\u002F 先删除以前的active\n",[29,57115,57116],{"class":31,"line":32870},[29,57117,57118],{"class":367},"      \u002F\u002F 只让当前li添加active\n",[29,57120,57121,57123,57125,57127,57130,57133,57136,57138,57140],{"class":31,"line":32876},[29,57122,55900],{"class":309},[29,57124,54528],{"class":35},[29,57126,310],{"class":309},[29,57128,57129],{"class":103},"'.slider-footer .activate'",[29,57131,57132],{"class":309},").classList.",[29,57134,57135],{"class":35},"remove",[29,57137,310],{"class":309},[29,57139,55918],{"class":103},[29,57141,316],{"class":309},[29,57143,57144,57146,57148,57150,57153,57155,57157,57159,57162,57164,57166,57168,57170],{"class":31,"line":32882},[29,57145,55900],{"class":309},[29,57147,54528],{"class":35},[29,57149,310],{"class":309},[29,57151,57152],{"class":103},"`.slider-footer ul li:nth-child(${",[29,57154,749],{"class":309},[29,57156,45695],{"class":305},[29,57158,25247],{"class":39},[29,57160,57161],{"class":103},"})`",[29,57163,57132],{"class":309},[29,57165,5509],{"class":35},[29,57167,310],{"class":309},[29,57169,55918],{"class":103},[29,57171,316],{"class":309},[29,57173,57174],{"class":31,"line":32902},[29,57175,2575],{"emptyLinePlaceholder":233},[29,57177,57178,57180,57182],{"class":31,"line":32908},[29,57179,54664],{"class":309},[29,57181,6585],{"class":39},[29,57183,316],{"class":309},[29,57185,57186],{"class":31,"line":32924},[29,57187,2575],{"emptyLinePlaceholder":233},[29,57189,57190,57192,57194],{"class":31,"line":32930},[29,57191,52546],{"class":309},[29,57193,51942],{"class":51429},[29,57195,51436],{"class":309},[29,57197,57198,57200,57202],{"class":31,"line":32944},[29,57199,51914],{"class":309},[29,57201,51929],{"class":51429},[29,57203,51436],{"class":309},[29,57205,57206],{"class":31,"line":32950},[29,57207,2575],{"emptyLinePlaceholder":233},[29,57209,57210,57212,57214],{"class":31,"line":32965},[29,57211,51914],{"class":309},[29,57213,50764],{"class":51429},[29,57215,51436],{"class":309},[275,57217,57219],{"id":57218},"_317-重要知识点","3.1.7 重要知识点",[171,57221,57222,57223],{},"浏览器在渲染文本时， ",[457,57224,57225],{},"没有空格或换行符就没有“断行点”",[171,57227,57228],{},[1638,57229],{"alt":24,"src":57230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[171,57232,57233],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[171,57235,57236],{},[1638,57237],{"alt":24,"src":57238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[171,57240,57241],{},[1638,57242],{"alt":24,"src":57243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57245,57247],{"id":57246},"_32-dom事件基础","3.2 DOM事件基础",[275,57249,57251],{"id":57250},"_321-事件监听","3.2.1 事件监听",[171,57253,57254],{},[1638,57255],{"alt":24,"src":57256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[171,57258,57259],{},"事件监听有响应的发生",[171,57261,57262],{},[1638,57263],{"alt":24,"src":57264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[171,57266,57267],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[171,57269,57270],{},"对于有名函数,要执行的函数名后边不要加()",[275,57272,57274],{"id":57273},"_322-随机点名案例","3.2.2 随机点名案例",[19,57276,57278],{"className":50762,"code":57277,"language":50764,"meta":24,"style":24},"\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",[26,57279,57280,57290,57304,57308,57316,57330,57350,57362,57370,57376,57386,57396,57400,57404,57411,57422,57426,57430,57436,57448,57462,57472,57484,57497,57501,57505,57512,57516,57529,57541,57553,57557,57561,57565,57572,57582,57586,57590,57599,57611,57623,57638,57642,57650,57658,57662,57670,57683,57697,57710,57730,57738,57753,57773,57793,57801,57805,57813,57818,57854,57874,57879,57898,57903,57914,57919,57930,57935,57954,57969,57974,58000,58010,58019,58024,58040,58045,58050,58055,58070,58074,58078,58083,58102,58119,58127,58132,58147,58151,58155,58163,58171,58175],{"__ignoreMap":24},[29,57281,57282,57284,57286,57288],{"class":31,"line":32},[29,57283,51426],{"class":309},[29,57285,51430],{"class":51429},[29,57287,51433],{"class":35},[29,57289,51436],{"class":309},[29,57291,57292,57294,57296,57298,57300,57302],{"class":31,"line":43},[29,57293,1218],{"class":309},[29,57295,50764],{"class":51429},[29,57297,51445],{"class":35},[29,57299,355],{"class":309},[29,57301,51450],{"class":103},[29,57303,51436],{"class":309},[29,57305,57306],{"class":31,"line":51},[29,57307,2575],{"emptyLinePlaceholder":233},[29,57309,57310,57312,57314],{"class":31,"line":59},[29,57311,1218],{"class":309},[29,57313,51463],{"class":51429},[29,57315,51436],{"class":309},[29,57317,57318,57320,57322,57324,57326,57328],{"class":31,"line":67},[29,57319,52273],{"class":309},[29,57321,51473],{"class":51429},[29,57323,51476],{"class":35},[29,57325,355],{"class":309},[29,57327,51481],{"class":103},[29,57329,51436],{"class":309},[29,57331,57332,57334,57336,57338,57340,57342,57344,57346,57348],{"class":31,"line":75},[29,57333,52273],{"class":309},[29,57335,51473],{"class":51429},[29,57337,15095],{"class":35},[29,57339,355],{"class":309},[29,57341,51520],{"class":103},[29,57343,51500],{"class":35},[29,57345,355],{"class":309},[29,57347,51527],{"class":103},[29,57349,51436],{"class":309},[29,57351,57352,57354,57356,57358,57360],{"class":31,"line":83},[29,57353,52273],{"class":309},[29,57355,51536],{"class":51429},[29,57357,51539],{"class":309},[29,57359,51536],{"class":51429},[29,57361,51436],{"class":309},[29,57363,57364,57366,57368],{"class":31,"line":158},[29,57365,52273],{"class":309},[29,57367,223],{"class":51429},[29,57369,51436],{"class":309},[29,57371,57372,57374],{"class":31,"line":166},[29,57373,6578],{"class":51429},[29,57375,15747],{"class":309},[29,57377,57378,57380,57382,57384],{"class":31,"line":1505},[29,57379,54835],{"class":39},[29,57381,51566],{"class":309},[29,57383,499],{"class":39},[29,57385,1468],{"class":309},[29,57387,57388,57390,57392,57394],{"class":31,"line":1788},[29,57389,54824],{"class":39},[29,57391,51566],{"class":309},[29,57393,499],{"class":39},[29,57395,1468],{"class":309},[29,57397,57398],{"class":31,"line":1793},[29,57399,2362],{"class":309},[29,57401,57402],{"class":31,"line":1799},[29,57403,2575],{"emptyLinePlaceholder":233},[29,57405,57406,57409],{"class":31,"line":1804},[29,57407,57408],{"class":51429},"    h2",[29,57410,15747],{"class":309},[29,57412,57413,57416,57418,57420],{"class":31,"line":1818},[29,57414,57415],{"class":39},"      text-align",[29,57417,51566],{"class":309},[29,57419,51721],{"class":39},[29,57421,1468],{"class":309},[29,57423,57424],{"class":31,"line":1823},[29,57425,2362],{"class":309},[29,57427,57428],{"class":31,"line":1829},[29,57429,2575],{"emptyLinePlaceholder":233},[29,57431,57432,57434],{"class":31,"line":1850},[29,57433,54881],{"class":35},[29,57435,15747],{"class":309},[29,57437,57438,57440,57442,57444,57446],{"class":31,"line":1855},[29,57439,54900],{"class":39},[29,57441,51566],{"class":309},[29,57443,1715],{"class":39},[29,57445,51621],{"class":305},[29,57447,1468],{"class":309},[29,57449,57450,57452,57454,57456,57458,57460],{"class":31,"line":1869},[29,57451,54835],{"class":39},[29,57453,51566],{"class":309},[29,57455,964],{"class":39},[29,57457,51621],{"class":305},[29,57459,51685],{"class":39},[29,57461,1468],{"class":309},[29,57463,57464,57466,57468,57470],{"class":31,"line":1874},[29,57465,55138],{"class":39},[29,57467,51566],{"class":309},[29,57469,51606],{"class":39},[29,57471,1468],{"class":309},[29,57473,57474,57476,57478,57480,57482],{"class":31,"line":1903},[29,57475,55051],{"class":39},[29,57477,51566],{"class":309},[29,57479,1133],{"class":39},[29,57481,51621],{"class":305},[29,57483,1468],{"class":309},[29,57485,57486,57489,57491,57493,57495],{"class":31,"line":1908},[29,57487,57488],{"class":39},"      line-height",[29,57490,51566],{"class":309},[29,57492,709],{"class":39},[29,57494,51621],{"class":305},[29,57496,1468],{"class":309},[29,57498,57499],{"class":31,"line":1925},[29,57500,2362],{"class":309},[29,57502,57503],{"class":31,"line":1930},[29,57504,2575],{"emptyLinePlaceholder":233},[29,57506,57507,57510],{"class":31,"line":1935},[29,57508,57509],{"class":35},"    .qs",[29,57511,15747],{"class":309},[29,57513,57514],{"class":31,"line":1940},[29,57515,2575],{"emptyLinePlaceholder":233},[29,57517,57518,57520,57522,57525,57527],{"class":31,"line":1954},[29,57519,54900],{"class":39},[29,57521,51566],{"class":309},[29,57523,57524],{"class":39},"450",[29,57526,51621],{"class":305},[29,57528,1468],{"class":309},[29,57530,57531,57533,57535,57537,57539],{"class":31,"line":1959},[29,57532,54914],{"class":39},[29,57534,51566],{"class":309},[29,57536,709],{"class":39},[29,57538,51621],{"class":305},[29,57540,1468],{"class":309},[29,57542,57543,57546,57548,57551],{"class":31,"line":2752},[29,57544,57545],{"class":39},"      color",[29,57547,51566],{"class":309},[29,57549,57550],{"class":39},"red",[29,57552,1468],{"class":309},[29,57554,57555],{"class":31,"line":2766},[29,57556,2575],{"emptyLinePlaceholder":233},[29,57558,57559],{"class":31,"line":2774},[29,57560,2362],{"class":309},[29,57562,57563],{"class":31,"line":2779},[29,57564,2575],{"emptyLinePlaceholder":233},[29,57566,57567,57570],{"class":31,"line":2785},[29,57568,57569],{"class":35},"    .btns",[29,57571,15747],{"class":309},[29,57573,57574,57576,57578,57580],{"class":31,"line":2791},[29,57575,57415],{"class":39},[29,57577,51566],{"class":309},[29,57579,51721],{"class":39},[29,57581,1468],{"class":309},[29,57583,57584],{"class":31,"line":2796},[29,57585,2362],{"class":309},[29,57587,57588],{"class":31,"line":8123},[29,57589,2575],{"emptyLinePlaceholder":233},[29,57591,57592,57594,57597],{"class":31,"line":8147},[29,57593,57569],{"class":35},[29,57595,57596],{"class":51429}," button",[29,57598,15747],{"class":309},[29,57600,57601,57603,57605,57607,57609],{"class":31,"line":8152},[29,57602,54900],{"class":39},[29,57604,51566],{"class":309},[29,57606,1125],{"class":39},[29,57608,51621],{"class":305},[29,57610,1468],{"class":309},[29,57612,57613,57615,57617,57619,57621],{"class":31,"line":8158},[29,57614,54914],{"class":39},[29,57616,51566],{"class":309},[29,57618,581],{"class":39},[29,57620,51621],{"class":305},[29,57622,1468],{"class":309},[29,57624,57625,57627,57629,57631,57634,57636],{"class":31,"line":8185},[29,57626,54835],{"class":39},[29,57628,51566],{"class":309},[29,57630,499],{"class":39},[29,57632,57633],{"class":39}," 50",[29,57635,51621],{"class":305},[29,57637,1468],{"class":309},[29,57639,57640],{"class":31,"line":8190},[29,57641,2362],{"class":309},[29,57643,57644,57646,57648],{"class":31,"line":8196},[29,57645,52546],{"class":309},[29,57647,223],{"class":51429},[29,57649,51436],{"class":309},[29,57651,57652,57654,57656],{"class":31,"line":8208},[29,57653,51914],{"class":309},[29,57655,51463],{"class":51429},[29,57657,51436],{"class":309},[29,57659,57660],{"class":31,"line":8220},[29,57661,2575],{"emptyLinePlaceholder":233},[29,57663,57664,57666,57668],{"class":31,"line":8232},[29,57665,1218],{"class":309},[29,57667,51929],{"class":51429},[29,57669,51436],{"class":309},[29,57671,57672,57674,57676,57679,57681],{"class":31,"line":9891},[29,57673,52273],{"class":309},[29,57675,14],{"class":51429},[29,57677,57678],{"class":309},">随机点名\u003C\u002F",[29,57680,14],{"class":51429},[29,57682,51436],{"class":309},[29,57684,57685,57687,57689,57691,57693,57695],{"class":31,"line":9916},[29,57686,52273],{"class":309},[29,57688,51740],{"class":51429},[29,57690,53615],{"class":35},[29,57692,355],{"class":309},[29,57694,53620],{"class":103},[29,57696,51436],{"class":309},[29,57698,57699,57701,57703,57706,57708],{"class":31,"line":9939},[29,57700,51470],{"class":309},[29,57702,29],{"class":51429},[29,57704,57705],{"class":309},">名字是：\u003C\u002F",[29,57707,29],{"class":51429},[29,57709,51436],{"class":309},[29,57711,57712,57714,57716,57718,57720,57723,57726,57728],{"class":31,"line":9963},[29,57713,51470],{"class":309},[29,57715,51740],{"class":51429},[29,57717,53615],{"class":35},[29,57719,355],{"class":309},[29,57721,57722],{"class":103},"\"qs\"",[29,57724,57725],{"class":309},">这里显示姓名\u003C\u002F",[29,57727,51740],{"class":51429},[29,57729,51436],{"class":309},[29,57731,57732,57734,57736],{"class":31,"line":9968},[29,57733,52546],{"class":309},[29,57735,51740],{"class":51429},[29,57737,51436],{"class":309},[29,57739,57740,57742,57744,57746,57748,57751],{"class":31,"line":9973},[29,57741,52273],{"class":309},[29,57743,51740],{"class":51429},[29,57745,53615],{"class":35},[29,57747,355],{"class":309},[29,57749,57750],{"class":103},"\"btns\"",[29,57752,51436],{"class":309},[29,57754,57755,57757,57759,57761,57763,57766,57769,57771],{"class":31,"line":9978},[29,57756,51470],{"class":309},[29,57758,54016],{"class":51429},[29,57760,53615],{"class":35},[29,57762,355],{"class":309},[29,57764,57765],{"class":103},"\"start\"",[29,57767,57768],{"class":309},">开始\u003C\u002F",[29,57770,54016],{"class":51429},[29,57772,51436],{"class":309},[29,57774,57775,57777,57779,57781,57783,57786,57789,57791],{"class":31,"line":9987},[29,57776,51470],{"class":309},[29,57778,54016],{"class":51429},[29,57780,53615],{"class":35},[29,57782,355],{"class":309},[29,57784,57785],{"class":103},"\"end\"",[29,57787,57788],{"class":309},">结束\u003C\u002F",[29,57790,54016],{"class":51429},[29,57792,51436],{"class":309},[29,57794,57795,57797,57799],{"class":31,"line":9992},[29,57796,52546],{"class":309},[29,57798,51740],{"class":51429},[29,57800,51436],{"class":309},[29,57802,57803],{"class":31,"line":9998},[29,57804,2575],{"emptyLinePlaceholder":233},[29,57806,57807,57809,57811],{"class":31,"line":10019},[29,57808,52273],{"class":309},[29,57810,51942],{"class":51429},[29,57812,51436],{"class":309},[29,57814,57815],{"class":31,"line":10025},[29,57816,57817],{"class":367},"    \u002F\u002F 数据数组\n",[29,57819,57820,57822,57825,57827,57829,57832,57834,57837,57839,57842,57844,57847,57849,57852],{"class":31,"line":10039},[29,57821,11396],{"class":305},[29,57823,57824],{"class":39}," arr",[29,57826,13739],{"class":305},[29,57828,52355],{"class":309},[29,57830,57831],{"class":103},"'马超'",[29,57833,12610],{"class":309},[29,57835,57836],{"class":103},"'黄忠'",[29,57838,12610],{"class":309},[29,57840,57841],{"class":103},"'赵云'",[29,57843,12610],{"class":309},[29,57845,57846],{"class":103},"'关羽'",[29,57848,12610],{"class":309},[29,57850,57851],{"class":103},"'张飞'",[29,57853,33375],{"class":309},[29,57855,57856,57858,57861,57863,57865,57867,57869,57872],{"class":31,"line":10045},[29,57857,11396],{"class":305},[29,57859,57860],{"class":39}," qs",[29,57862,13739],{"class":305},[29,57864,54525],{"class":309},[29,57866,54528],{"class":35},[29,57868,310],{"class":309},[29,57870,57871],{"class":103},"'.qs'",[29,57873,316],{"class":309},[29,57875,57876],{"class":31,"line":10072},[29,57877,57878],{"class":367},"    \u002F\u002F 1.业务1.开始按钮模块\n",[29,57880,57881,57883,57885,57887,57889,57891,57893,57896],{"class":31,"line":10081},[29,57882,11396],{"class":305},[29,57884,4359],{"class":39},[29,57886,13739],{"class":305},[29,57888,54525],{"class":309},[29,57890,54528],{"class":35},[29,57892,310],{"class":309},[29,57894,57895],{"class":103},"'.start'",[29,57897,316],{"class":309},[29,57899,57900],{"class":31,"line":10087},[29,57901,57902],{"class":367},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[29,57904,57905,57907,57910,57912],{"class":31,"line":10095},[29,57906,52348],{"class":305},[29,57908,57909],{"class":309}," timerId ",[29,57911,355],{"class":305},[29,57913,47462],{"class":39},[29,57915,57916],{"class":31,"line":10100},[29,57917,57918],{"class":367},"    \u002F\u002F 随机号要全局变量\n",[29,57920,57921,57923,57926,57928],{"class":31,"line":16779},[29,57922,52348],{"class":305},[29,57924,57925],{"class":309}," random ",[29,57927,355],{"class":305},[29,57929,47462],{"class":39},[29,57931,57932],{"class":31,"line":16785},[29,57933,57934],{"class":367},"    \u002F\u002F 1.1 添加点击事件\n",[29,57936,57937,57940,57943,57945,57948,57950,57952],{"class":31,"line":16808},[29,57938,57939],{"class":309},"    start.",[29,57941,57942],{"class":35},"addEventListener",[29,57944,310],{"class":309},[29,57946,57947],{"class":103},"'click'",[29,57949,12610],{"class":309},[29,57951,54578],{"class":305},[29,57953,54581],{"class":309},[29,57955,57956,57959,57961,57963,57965,57967],{"class":31,"line":16814},[29,57957,57958],{"class":309},"      timerId ",[29,57960,355],{"class":305},[29,57962,54573],{"class":35},[29,57964,310],{"class":309},[29,57966,54578],{"class":305},[29,57968,54581],{"class":309},[29,57970,57971],{"class":31,"line":16837},[29,57972,57973],{"class":367},"        \u002F\u002F 随机数\n",[29,57975,57976,57979,57981,57984,57987,57990,57992,57994,57996,57998],{"class":31,"line":16851},[29,57977,57978],{"class":309},"        random ",[29,57980,355],{"class":305},[29,57982,57983],{"class":35}," parseInt",[29,57985,57986],{"class":309},"(Math.",[29,57988,57989],{"class":35},"random",[29,57991,13225],{"class":309},[29,57993,763],{"class":305},[29,57995,52094],{"class":309},[29,57997,52097],{"class":39},[29,57999,316],{"class":309},[29,58001,58002,58005,58007],{"class":31,"line":16871},[29,58003,58004],{"class":309},"        qs.innerHTML ",[29,58006,355],{"class":305},[29,58008,58009],{"class":309}," arr[random]\n",[29,58011,58012,58015,58017],{"class":31,"line":16877},[29,58013,58014],{"class":309},"      }, ",[29,58016,581],{"class":39},[29,58018,316],{"class":309},[29,58020,58021],{"class":31,"line":16888},[29,58022,58023],{"class":367},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[29,58025,58026,58028,58031,58033,58036,58038],{"class":31,"line":16911},[29,58027,54609],{"class":305},[29,58029,58030],{"class":309}," (arr.",[29,58032,52097],{"class":39},[29,58034,58035],{"class":305}," ===",[29,58037,25247],{"class":39},[29,58039,12617],{"class":309},[29,58041,58042],{"class":31,"line":16933},[29,58043,58044],{"class":367},"        \u002F\u002F start.disabled = true\n",[29,58046,58047],{"class":31,"line":16938},[29,58048,58049],{"class":367},"        \u002F\u002F end.disabled = true\n",[29,58051,58052],{"class":31,"line":16944},[29,58053,58054],{"class":367},"        \u002F\u002F 可以合起来写\n",[29,58056,58057,58060,58062,58065,58067],{"class":31,"line":16958},[29,58058,58059],{"class":309},"        start.disabled ",[29,58061,355],{"class":305},[29,58063,58064],{"class":309}," end.disabled ",[29,58066,355],{"class":305},[29,58068,58069],{"class":39}," true\n",[29,58071,58072],{"class":31,"line":16971},[29,58073,52527],{"class":309},[29,58075,58076],{"class":31,"line":16976},[29,58077,33590],{"class":309},[29,58079,58080],{"class":31,"line":16990},[29,58081,58082],{"class":367},"    \u002F\u002F 1.2 关闭按钮模块\n",[29,58084,58085,58087,58089,58091,58093,58095,58097,58100],{"class":31,"line":16995},[29,58086,11396],{"class":305},[29,58088,4375],{"class":39},[29,58090,13739],{"class":305},[29,58092,54525],{"class":309},[29,58094,54528],{"class":35},[29,58096,310],{"class":309},[29,58098,58099],{"class":103},"'.end'",[29,58101,316],{"class":309},[29,58103,58104,58107,58109,58111,58113,58115,58117],{"class":31,"line":17001},[29,58105,58106],{"class":309},"    end.",[29,58108,57942],{"class":35},[29,58110,310],{"class":309},[29,58112,57947],{"class":103},[29,58114,12610],{"class":309},[29,58116,54578],{"class":305},[29,58118,54581],{"class":309},[29,58120,58121,58124],{"class":31,"line":17006},[29,58122,58123],{"class":35},"      clearInterval",[29,58125,58126],{"class":309},"(timerId)\n",[29,58128,58129],{"class":31,"line":17020},[29,58130,58131],{"class":367},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[29,58133,58134,58137,58140,58143,58145],{"class":31,"line":17025},[29,58135,58136],{"class":309},"      arr.",[29,58138,58139],{"class":35},"splice",[29,58141,58142],{"class":309},"(random, ",[29,58144,525],{"class":39},[29,58146,316],{"class":309},[29,58148,58149],{"class":31,"line":17030},[29,58150,33590],{"class":309},[29,58152,58153],{"class":31,"line":17044},[29,58154,2575],{"emptyLinePlaceholder":233},[29,58156,58157,58159,58161],{"class":31,"line":17056},[29,58158,52546],{"class":309},[29,58160,51942],{"class":51429},[29,58162,51436],{"class":309},[29,58164,58165,58167,58169],{"class":31,"line":17061},[29,58166,51914],{"class":309},[29,58168,51929],{"class":51429},[29,58170,51436],{"class":309},[29,58172,58173],{"class":31,"line":17074},[29,58174,2575],{"emptyLinePlaceholder":233},[29,58176,58177,58179,58181],{"class":31,"line":17079},[29,58178,51914],{"class":309},[29,58180,50764],{"class":51429},[29,58182,51436],{"class":309},[171,58184,58185],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[275,58187,58189],{"id":58188},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[19,58191,58193],{"className":50762,"code":58192,"language":50764,"meta":24,"style":24},"\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",[26,58194,58195,58205,58219,58223,58231,58245,58265,58277,58285,58289,58297,58309,58317,58336,58353,58369,58379,58383,58391,58399,58403],{"__ignoreMap":24},[29,58196,58197,58199,58201,58203],{"class":31,"line":32},[29,58198,51426],{"class":309},[29,58200,51430],{"class":51429},[29,58202,51433],{"class":35},[29,58204,51436],{"class":309},[29,58206,58207,58209,58211,58213,58215,58217],{"class":31,"line":43},[29,58208,1218],{"class":309},[29,58210,50764],{"class":51429},[29,58212,51445],{"class":35},[29,58214,355],{"class":309},[29,58216,51450],{"class":103},[29,58218,51436],{"class":309},[29,58220,58221],{"class":31,"line":51},[29,58222,2575],{"emptyLinePlaceholder":233},[29,58224,58225,58227,58229],{"class":31,"line":59},[29,58226,1218],{"class":309},[29,58228,51463],{"class":51429},[29,58230,51436],{"class":309},[29,58232,58233,58235,58237,58239,58241,58243],{"class":31,"line":67},[29,58234,52273],{"class":309},[29,58236,51473],{"class":51429},[29,58238,51476],{"class":35},[29,58240,355],{"class":309},[29,58242,51481],{"class":103},[29,58244,51436],{"class":309},[29,58246,58247,58249,58251,58253,58255,58257,58259,58261,58263],{"class":31,"line":75},[29,58248,52273],{"class":309},[29,58250,51473],{"class":51429},[29,58252,15095],{"class":35},[29,58254,355],{"class":309},[29,58256,51520],{"class":103},[29,58258,51500],{"class":35},[29,58260,355],{"class":309},[29,58262,51527],{"class":103},[29,58264,51436],{"class":309},[29,58266,58267,58269,58271,58273,58275],{"class":31,"line":83},[29,58268,52273],{"class":309},[29,58270,51536],{"class":51429},[29,58272,51539],{"class":309},[29,58274,51536],{"class":51429},[29,58276,51436],{"class":309},[29,58278,58279,58281,58283],{"class":31,"line":158},[29,58280,51914],{"class":309},[29,58282,51463],{"class":51429},[29,58284,51436],{"class":309},[29,58286,58287],{"class":31,"line":166},[29,58288,2575],{"emptyLinePlaceholder":233},[29,58290,58291,58293,58295],{"class":31,"line":1505},[29,58292,1218],{"class":309},[29,58294,51929],{"class":51429},[29,58296,51436],{"class":309},[29,58298,58299,58301,58303,58305,58307],{"class":31,"line":1788},[29,58300,52273],{"class":309},[29,58302,54016],{"class":51429},[29,58304,54022],{"class":309},[29,58306,54016],{"class":51429},[29,58308,51436],{"class":309},[29,58310,58311,58313,58315],{"class":31,"line":1793},[29,58312,52273],{"class":309},[29,58314,51942],{"class":51429},[29,58316,51436],{"class":309},[29,58318,58319,58321,58323,58325,58327,58329,58331,58334],{"class":31,"line":1799},[29,58320,11396],{"class":305},[29,58322,54520],{"class":39},[29,58324,13739],{"class":305},[29,58326,54525],{"class":309},[29,58328,54528],{"class":35},[29,58330,310],{"class":309},[29,58332,58333],{"class":103},"'button'",[29,58335,316],{"class":309},[29,58337,58338,58341,58343,58345,58347,58349,58351],{"class":31,"line":1804},[29,58339,58340],{"class":309},"    btn.",[29,58342,57942],{"class":35},[29,58344,310],{"class":309},[29,58346,57947],{"class":103},[29,58348,12610],{"class":309},[29,58350,54578],{"class":305},[29,58352,54581],{"class":309},[29,58354,58355,58358,58360,58362,58365,58367],{"class":31,"line":1818},[29,58356,58357],{"class":305},"      const",[29,58359,2415],{"class":39},[29,58361,13739],{"class":305},[29,58363,58364],{"class":309}," Math.",[29,58366,57989],{"class":35},[29,58368,2151],{"class":309},[29,58370,58371,58374,58377],{"class":31,"line":1823},[29,58372,58373],{"class":309},"      console.",[29,58375,58376],{"class":35},"log",[29,58378,323],{"class":309},[29,58380,58381],{"class":31,"line":1829},[29,58382,33590],{"class":309},[29,58384,58385,58387,58389],{"class":31,"line":1850},[29,58386,52546],{"class":309},[29,58388,51942],{"class":51429},[29,58390,51436],{"class":309},[29,58392,58393,58395,58397],{"class":31,"line":1855},[29,58394,51914],{"class":309},[29,58396,51929],{"class":51429},[29,58398,51436],{"class":309},[29,58400,58401],{"class":31,"line":1869},[29,58402,2575],{"emptyLinePlaceholder":233},[29,58404,58405,58407,58409],{"class":31,"line":1874},[29,58406,51914],{"class":309},[29,58408,50764],{"class":51429},[29,58410,51436],{"class":309},[171,58412,58413],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[171,58415,58416],{},"常量不可以重新赋值",[171,58418,58419],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[19,58421,58423],{"className":50762,"code":58422,"language":50764,"meta":24,"style":24},"\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",[26,58424,58425,58435,58449,58453,58461,58475,58495,58507,58515,58519,58527,58539,58547,58558,58576,58592,58606,58614,58618,58626,58634,58638],{"__ignoreMap":24},[29,58426,58427,58429,58431,58433],{"class":31,"line":32},[29,58428,51426],{"class":309},[29,58430,51430],{"class":51429},[29,58432,51433],{"class":35},[29,58434,51436],{"class":309},[29,58436,58437,58439,58441,58443,58445,58447],{"class":31,"line":43},[29,58438,1218],{"class":309},[29,58440,50764],{"class":51429},[29,58442,51445],{"class":35},[29,58444,355],{"class":309},[29,58446,51450],{"class":103},[29,58448,51436],{"class":309},[29,58450,58451],{"class":31,"line":51},[29,58452,2575],{"emptyLinePlaceholder":233},[29,58454,58455,58457,58459],{"class":31,"line":59},[29,58456,1218],{"class":309},[29,58458,51463],{"class":51429},[29,58460,51436],{"class":309},[29,58462,58463,58465,58467,58469,58471,58473],{"class":31,"line":67},[29,58464,52273],{"class":309},[29,58466,51473],{"class":51429},[29,58468,51476],{"class":35},[29,58470,355],{"class":309},[29,58472,51481],{"class":103},[29,58474,51436],{"class":309},[29,58476,58477,58479,58481,58483,58485,58487,58489,58491,58493],{"class":31,"line":75},[29,58478,52273],{"class":309},[29,58480,51473],{"class":51429},[29,58482,15095],{"class":35},[29,58484,355],{"class":309},[29,58486,51520],{"class":103},[29,58488,51500],{"class":35},[29,58490,355],{"class":309},[29,58492,51527],{"class":103},[29,58494,51436],{"class":309},[29,58496,58497,58499,58501,58503,58505],{"class":31,"line":83},[29,58498,52273],{"class":309},[29,58500,51536],{"class":51429},[29,58502,51539],{"class":309},[29,58504,51536],{"class":51429},[29,58506,51436],{"class":309},[29,58508,58509,58511,58513],{"class":31,"line":158},[29,58510,51914],{"class":309},[29,58512,51463],{"class":51429},[29,58514,51436],{"class":309},[29,58516,58517],{"class":31,"line":166},[29,58518,2575],{"emptyLinePlaceholder":233},[29,58520,58521,58523,58525],{"class":31,"line":1505},[29,58522,1218],{"class":309},[29,58524,51929],{"class":51429},[29,58526,51436],{"class":309},[29,58528,58529,58531,58533,58535,58537],{"class":31,"line":1788},[29,58530,52273],{"class":309},[29,58532,54016],{"class":51429},[29,58534,54022],{"class":309},[29,58536,54016],{"class":51429},[29,58538,51436],{"class":309},[29,58540,58541,58543,58545],{"class":31,"line":1793},[29,58542,52273],{"class":309},[29,58544,51942],{"class":51429},[29,58546,51436],{"class":309},[29,58548,58549,58551,58553,58555],{"class":31,"line":1799},[29,58550,11396],{"class":305},[29,58552,2415],{"class":39},[29,58554,13739],{"class":305},[29,58556,58557],{"class":39}," 10\n",[29,58559,58560,58562,58564,58566,58568,58570,58572,58574],{"class":31,"line":1804},[29,58561,11396],{"class":305},[29,58563,54520],{"class":39},[29,58565,13739],{"class":305},[29,58567,54525],{"class":309},[29,58569,54528],{"class":35},[29,58571,310],{"class":309},[29,58573,58333],{"class":103},[29,58575,316],{"class":309},[29,58577,58578,58580,58582,58584,58586,58588,58590],{"class":31,"line":1818},[29,58579,58340],{"class":309},[29,58581,57942],{"class":35},[29,58583,310],{"class":309},[29,58585,57947],{"class":103},[29,58587,12610],{"class":309},[29,58589,54578],{"class":305},[29,58591,54581],{"class":309},[29,58593,58594,58596,58598,58600,58602,58604],{"class":31,"line":1823},[29,58595,58357],{"class":305},[29,58597,2415],{"class":39},[29,58599,13739],{"class":305},[29,58601,58364],{"class":309},[29,58603,57989],{"class":35},[29,58605,2151],{"class":309},[29,58607,58608,58610,58612],{"class":31,"line":1829},[29,58609,58373],{"class":309},[29,58611,58376],{"class":35},[29,58613,323],{"class":309},[29,58615,58616],{"class":31,"line":1850},[29,58617,33590],{"class":309},[29,58619,58620,58622,58624],{"class":31,"line":1855},[29,58621,52546],{"class":309},[29,58623,51942],{"class":51429},[29,58625,51436],{"class":309},[29,58627,58628,58630,58632],{"class":31,"line":1869},[29,58629,51914],{"class":309},[29,58631,51929],{"class":51429},[29,58633,51436],{"class":309},[29,58635,58636],{"class":31,"line":1874},[29,58637,2575],{"emptyLinePlaceholder":233},[29,58639,58640,58642,58644],{"class":31,"line":1903},[29,58641,51914],{"class":309},[29,58643,50764],{"class":51429},[29,58645,51436],{"class":309},[171,58647,58648],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[19,58650,58652],{"className":50762,"code":58651,"language":50764,"meta":24,"style":24},"\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",[26,58653,58654,58664,58678,58682,58690,58704,58724,58736,58744,58748,58756,58768,58776,58786,58804,58820,58833,58841,58845,58853,58861,58865],{"__ignoreMap":24},[29,58655,58656,58658,58660,58662],{"class":31,"line":32},[29,58657,51426],{"class":309},[29,58659,51430],{"class":51429},[29,58661,51433],{"class":35},[29,58663,51436],{"class":309},[29,58665,58666,58668,58670,58672,58674,58676],{"class":31,"line":43},[29,58667,1218],{"class":309},[29,58669,50764],{"class":51429},[29,58671,51445],{"class":35},[29,58673,355],{"class":309},[29,58675,51450],{"class":103},[29,58677,51436],{"class":309},[29,58679,58680],{"class":31,"line":51},[29,58681,2575],{"emptyLinePlaceholder":233},[29,58683,58684,58686,58688],{"class":31,"line":59},[29,58685,1218],{"class":309},[29,58687,51463],{"class":51429},[29,58689,51436],{"class":309},[29,58691,58692,58694,58696,58698,58700,58702],{"class":31,"line":67},[29,58693,52273],{"class":309},[29,58695,51473],{"class":51429},[29,58697,51476],{"class":35},[29,58699,355],{"class":309},[29,58701,51481],{"class":103},[29,58703,51436],{"class":309},[29,58705,58706,58708,58710,58712,58714,58716,58718,58720,58722],{"class":31,"line":75},[29,58707,52273],{"class":309},[29,58709,51473],{"class":51429},[29,58711,15095],{"class":35},[29,58713,355],{"class":309},[29,58715,51520],{"class":103},[29,58717,51500],{"class":35},[29,58719,355],{"class":309},[29,58721,51527],{"class":103},[29,58723,51436],{"class":309},[29,58725,58726,58728,58730,58732,58734],{"class":31,"line":83},[29,58727,52273],{"class":309},[29,58729,51536],{"class":51429},[29,58731,51539],{"class":309},[29,58733,51536],{"class":51429},[29,58735,51436],{"class":309},[29,58737,58738,58740,58742],{"class":31,"line":158},[29,58739,51914],{"class":309},[29,58741,51463],{"class":51429},[29,58743,51436],{"class":309},[29,58745,58746],{"class":31,"line":166},[29,58747,2575],{"emptyLinePlaceholder":233},[29,58749,58750,58752,58754],{"class":31,"line":1505},[29,58751,1218],{"class":309},[29,58753,51929],{"class":51429},[29,58755,51436],{"class":309},[29,58757,58758,58760,58762,58764,58766],{"class":31,"line":1788},[29,58759,52273],{"class":309},[29,58761,54016],{"class":51429},[29,58763,54022],{"class":309},[29,58765,54016],{"class":51429},[29,58767,51436],{"class":309},[29,58769,58770,58772,58774],{"class":31,"line":1793},[29,58771,52273],{"class":309},[29,58773,51942],{"class":51429},[29,58775,51436],{"class":309},[29,58777,58778,58780,58782,58784],{"class":31,"line":1799},[29,58779,11396],{"class":305},[29,58781,2415],{"class":39},[29,58783,13739],{"class":305},[29,58785,58557],{"class":39},[29,58787,58788,58790,58792,58794,58796,58798,58800,58802],{"class":31,"line":1804},[29,58789,11396],{"class":305},[29,58791,54520],{"class":39},[29,58793,13739],{"class":305},[29,58795,54525],{"class":309},[29,58797,54528],{"class":35},[29,58799,310],{"class":309},[29,58801,58333],{"class":103},[29,58803,316],{"class":309},[29,58805,58806,58808,58810,58812,58814,58816,58818],{"class":31,"line":1818},[29,58807,58340],{"class":309},[29,58809,57942],{"class":35},[29,58811,310],{"class":309},[29,58813,57947],{"class":103},[29,58815,12610],{"class":309},[29,58817,54578],{"class":305},[29,58819,54581],{"class":309},[29,58821,58822,58825,58827,58829,58831],{"class":31,"line":1823},[29,58823,58824],{"class":309},"      num ",[29,58826,355],{"class":305},[29,58828,58364],{"class":309},[29,58830,57989],{"class":35},[29,58832,2151],{"class":309},[29,58834,58835,58837,58839],{"class":31,"line":1829},[29,58836,58373],{"class":309},[29,58838,58376],{"class":35},[29,58840,323],{"class":309},[29,58842,58843],{"class":31,"line":1850},[29,58844,33590],{"class":309},[29,58846,58847,58849,58851],{"class":31,"line":1855},[29,58848,52546],{"class":309},[29,58850,51942],{"class":51429},[29,58852,51436],{"class":309},[29,58854,58855,58857,58859],{"class":31,"line":1869},[29,58856,51914],{"class":309},[29,58858,51929],{"class":51429},[29,58860,51436],{"class":309},[29,58862,58863],{"class":31,"line":1874},[29,58864,2575],{"emptyLinePlaceholder":233},[29,58866,58867,58869,58871],{"class":31,"line":1903},[29,58868,51914],{"class":309},[29,58870,50764],{"class":51429},[29,58872,51436],{"class":309},[171,58874,58875],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[275,58877,58879],{"id":58878},"_324-事件监听版本","3.2.4 事件监听版本",[171,58881,58882],{},[1638,58883],{"alt":24,"src":58884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[171,58886,58887],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[171,58889,58890],{},"这种方式会覆盖前边的事件监听:",[19,58892,58894],{"className":50762,"code":58893,"language":50764,"meta":24,"style":24},"\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",[26,58895,58896,58906,58920,58924,58932,58946,58966,58978,58986,58990,58998,59010,59018,59036,59050,59061,59065,59077,59087,59091,59099,59107,59111],{"__ignoreMap":24},[29,58897,58898,58900,58902,58904],{"class":31,"line":32},[29,58899,51426],{"class":309},[29,58901,51430],{"class":51429},[29,58903,51433],{"class":35},[29,58905,51436],{"class":309},[29,58907,58908,58910,58912,58914,58916,58918],{"class":31,"line":43},[29,58909,1218],{"class":309},[29,58911,50764],{"class":51429},[29,58913,51445],{"class":35},[29,58915,355],{"class":309},[29,58917,51450],{"class":103},[29,58919,51436],{"class":309},[29,58921,58922],{"class":31,"line":51},[29,58923,2575],{"emptyLinePlaceholder":233},[29,58925,58926,58928,58930],{"class":31,"line":59},[29,58927,1218],{"class":309},[29,58929,51463],{"class":51429},[29,58931,51436],{"class":309},[29,58933,58934,58936,58938,58940,58942,58944],{"class":31,"line":67},[29,58935,52273],{"class":309},[29,58937,51473],{"class":51429},[29,58939,51476],{"class":35},[29,58941,355],{"class":309},[29,58943,51481],{"class":103},[29,58945,51436],{"class":309},[29,58947,58948,58950,58952,58954,58956,58958,58960,58962,58964],{"class":31,"line":75},[29,58949,52273],{"class":309},[29,58951,51473],{"class":51429},[29,58953,15095],{"class":35},[29,58955,355],{"class":309},[29,58957,51520],{"class":103},[29,58959,51500],{"class":35},[29,58961,355],{"class":309},[29,58963,51527],{"class":103},[29,58965,51436],{"class":309},[29,58967,58968,58970,58972,58974,58976],{"class":31,"line":83},[29,58969,52273],{"class":309},[29,58971,51536],{"class":51429},[29,58973,51539],{"class":309},[29,58975,51536],{"class":51429},[29,58977,51436],{"class":309},[29,58979,58980,58982,58984],{"class":31,"line":158},[29,58981,51914],{"class":309},[29,58983,51463],{"class":51429},[29,58985,51436],{"class":309},[29,58987,58988],{"class":31,"line":166},[29,58989,2575],{"emptyLinePlaceholder":233},[29,58991,58992,58994,58996],{"class":31,"line":1505},[29,58993,1218],{"class":309},[29,58995,51929],{"class":51429},[29,58997,51436],{"class":309},[29,58999,59000,59002,59004,59006,59008],{"class":31,"line":1788},[29,59001,52273],{"class":309},[29,59003,54016],{"class":51429},[29,59005,54022],{"class":309},[29,59007,54016],{"class":51429},[29,59009,51436],{"class":309},[29,59011,59012,59014,59016],{"class":31,"line":1793},[29,59013,52273],{"class":309},[29,59015,51942],{"class":51429},[29,59017,51436],{"class":309},[29,59019,59020,59022,59024,59026,59028,59030,59032,59034],{"class":31,"line":1799},[29,59021,11396],{"class":305},[29,59023,54520],{"class":39},[29,59025,13739],{"class":305},[29,59027,54525],{"class":309},[29,59029,54528],{"class":35},[29,59031,310],{"class":309},[29,59033,58333],{"class":103},[29,59035,316],{"class":309},[29,59037,59038,59040,59043,59045,59048],{"class":31,"line":1804},[29,59039,58340],{"class":309},[29,59041,59042],{"class":35},"onclick",[29,59044,13739],{"class":305},[29,59046,59047],{"class":305}," function",[29,59049,54581],{"class":309},[29,59051,59052,59055,59057,59059],{"class":31,"line":1818},[29,59053,59054],{"class":35},"      alert",[29,59056,310],{"class":309},[29,59058,780],{"class":39},[29,59060,316],{"class":309},[29,59062,59063],{"class":31,"line":1823},[29,59064,2362],{"class":309},[29,59066,59067,59069,59071,59073,59075],{"class":31,"line":1829},[29,59068,58340],{"class":309},[29,59070,59042],{"class":35},[29,59072,13739],{"class":305},[29,59074,59047],{"class":305},[29,59076,54581],{"class":309},[29,59078,59079,59081,59083,59085],{"class":31,"line":1850},[29,59080,59054],{"class":35},[29,59082,310],{"class":309},[29,59084,1058],{"class":39},[29,59086,316],{"class":309},[29,59088,59089],{"class":31,"line":1855},[29,59090,2362],{"class":309},[29,59092,59093,59095,59097],{"class":31,"line":1869},[29,59094,52546],{"class":309},[29,59096,51942],{"class":51429},[29,59098,51436],{"class":309},[29,59100,59101,59103,59105],{"class":31,"line":1874},[29,59102,51914],{"class":309},[29,59104,51929],{"class":51429},[29,59106,51436],{"class":309},[29,59108,59109],{"class":31,"line":1903},[29,59110,2575],{"emptyLinePlaceholder":233},[29,59112,59113,59115,59117],{"class":31,"line":1908},[29,59114,51914],{"class":309},[29,59116,50764],{"class":51429},[29,59118,51436],{"class":309},[171,59120,59121],{},"只要点击就输出结果为22,前边11被覆盖了",[19,59123,59125],{"className":50762,"code":59124,"language":50764,"meta":24,"style":24},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[26,59126,59127,59132,59137,59141,59146,59151],{"__ignoreMap":24},[29,59128,59129],{"class":31,"line":32},[29,59130,59131],{"class":309},"  btn.addEventListener('click', function () {\n",[29,59133,59134],{"class":31,"line":43},[29,59135,59136],{"class":309},"      alert(11)\n",[29,59138,59139],{"class":31,"line":51},[29,59140,33590],{"class":309},[29,59142,59143],{"class":31,"line":59},[29,59144,59145],{"class":309},"    btn.addEventListener('click', function () {\n",[29,59147,59148],{"class":31,"line":67},[29,59149,59150],{"class":309},"      alert(22)\n",[29,59152,59153],{"class":31,"line":75},[29,59154,33590],{"class":309},[171,59156,59157],{},"点击第一次输出11,第二次点击为22",[275,59159,59161],{"id":59160},"_325-事件类型","3.2.5 事件类型",[171,59163,59164],{},[1638,59165],{"alt":24,"src":59166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22173,59168,59170],{"id":59169},"_3251-鼠标事件","3.2.5.1 鼠标事件",[171,59172,59173],{},"补充知识:",[171,59175,59176],{},"轮播图自动播放模块,可以使用",[171,59178,59179],{},"let timerId = setInterval(function () {",[171,59181,59182],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[171,59184,59185],{},"用js方法模拟进行点击事件,click必须加()",[171,59187,59188],{},"next.click()",[171,59190,59191],{},"}, 1000)",[171,59193,59194],{},[1638,59195],{"alt":24,"src":59196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[19,59198,59200],{"className":53196,"code":59199,"language":53198,"meta":24,"style":24},"\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",[26,59201,59202,59206,59216,59230,59234,59242,59257,59277,59297,59310,59318,59323,59328,59332,59336,59341,59346,59351,59356,59360,59364,59369,59374,59379,59383,59387,59392,59396,59401,59406,59410,59414,59419,59424,59429,59434,59439,59443,59447,59452,59457,59462,59467,59472,59476,59480,59485,59490,59495,59500,59505,59510,59515,59520,59525,59530,59534,59538,59543,59548,59552,59556,59561,59566,59570,59575,59580,59584,59588,59593,59597,59602,59607,59611,59616,59620,59624,59629,59634,59639,59644,59649,59654,59659,59663,59667,59671,59676,59681,59686,59691,59695,59703,59711,59715,59723,59738,59752,59773,59781,59795,59808,59823,59842,59854,59866,59878,59890,59902,59914,59926,59934,59949,59973,59997,60005,60013,60021,60029,60034,60039,60044,60049,60054,60059,60064,60069,60074,60079,60083,60088,60093,60098,60103,60108,60113,60118,60123,60128,60132,60137,60142,60147,60152,60157,60162,60167,60172,60177,60182,60187,60192,60196,60200,60205,60210,60215,60219,60224,60229,60234,60239,60244,60248,60253,60257,60261,60265,60269,60273,60277,60282,60287,60292,60297,60302,60307,60312,60317,60322,60326,60330,60335,60340,60345,60350,60355,60359,60364,60369,60374,60379,60384,60389,60393,60397,60402,60406,60411,60415,60420,60425,60430,60435,60440,60445,60449,60457,60465,60469],{"__ignoreMap":24},[29,59203,59204],{"class":31,"line":32},[29,59205,2575],{"emptyLinePlaceholder":233},[29,59207,59208,59210,59212,59214],{"class":31,"line":43},[29,59209,51426],{"class":309},[29,59211,51430],{"class":305},[29,59213,51433],{"class":39},[29,59215,51436],{"class":309},[29,59217,59218,59220,59222,59224,59226,59228],{"class":31,"line":51},[29,59219,1218],{"class":309},[29,59221,50764],{"class":51429},[29,59223,51445],{"class":35},[29,59225,355],{"class":309},[29,59227,51450],{"class":103},[29,59229,51436],{"class":309},[29,59231,59232],{"class":31,"line":59},[29,59233,2575],{"emptyLinePlaceholder":233},[29,59235,59236,59238,59240],{"class":31,"line":67},[29,59237,1218],{"class":309},[29,59239,51463],{"class":51429},[29,59241,51436],{"class":309},[29,59243,59244,59246,59248,59250,59252,59254],{"class":31,"line":75},[29,59245,52273],{"class":309},[29,59247,51473],{"class":51429},[29,59249,51476],{"class":35},[29,59251,355],{"class":309},[29,59253,51481],{"class":103},[29,59255,59256],{"class":309}," \u002F>\n",[29,59258,59259,59261,59263,59265,59267,59269,59271,59273,59275],{"class":31,"line":83},[29,59260,52273],{"class":309},[29,59262,51473],{"class":51429},[29,59264,51492],{"class":35},[29,59266,355],{"class":309},[29,59268,51497],{"class":103},[29,59270,51500],{"class":35},[29,59272,355],{"class":309},[29,59274,51505],{"class":103},[29,59276,59256],{"class":309},[29,59278,59279,59281,59283,59285,59287,59289,59291,59293,59295],{"class":31,"line":158},[29,59280,52273],{"class":309},[29,59282,51473],{"class":51429},[29,59284,15095],{"class":35},[29,59286,355],{"class":309},[29,59288,51520],{"class":103},[29,59290,51500],{"class":35},[29,59292,355],{"class":309},[29,59294,51527],{"class":103},[29,59296,59256],{"class":309},[29,59298,59299,59301,59303,59306,59308],{"class":31,"line":166},[29,59300,52273],{"class":309},[29,59302,51536],{"class":51429},[29,59304,59305],{"class":309},">轮播图点击切换\u003C\u002F",[29,59307,51536],{"class":51429},[29,59309,51436],{"class":309},[29,59311,59312,59314,59316],{"class":31,"line":1505},[29,59313,52273],{"class":309},[29,59315,223],{"class":51429},[29,59317,51436],{"class":309},[29,59319,59320],{"class":31,"line":1788},[29,59321,59322],{"class":309},"    * {\n",[29,59324,59325],{"class":31,"line":1793},[29,59326,59327],{"class":309},"      box-sizing: border-box;\n",[29,59329,59330],{"class":31,"line":1799},[29,59331,2362],{"class":309},[29,59333,59334],{"class":31,"line":1804},[29,59335,2575],{"emptyLinePlaceholder":233},[29,59337,59338],{"class":31,"line":1818},[29,59339,59340],{"class":309},"    .slider {\n",[29,59342,59343],{"class":31,"line":1823},[29,59344,59345],{"class":309},"      width: 560px;\n",[29,59347,59348],{"class":31,"line":1829},[29,59349,59350],{"class":309},"      height: 400px;\n",[29,59352,59353],{"class":31,"line":1850},[29,59354,59355],{"class":309},"      overflow: hidden;\n",[29,59357,59358],{"class":31,"line":1855},[29,59359,2362],{"class":309},[29,59361,59362],{"class":31,"line":1869},[29,59363,2575],{"emptyLinePlaceholder":233},[29,59365,59366],{"class":31,"line":1874},[29,59367,59368],{"class":309},"    .slider-wrapper {\n",[29,59370,59371],{"class":31,"line":1903},[29,59372,59373],{"class":309},"      width: 100%;\n",[29,59375,59376],{"class":31,"line":1908},[29,59377,59378],{"class":309},"      height: 320px;\n",[29,59380,59381],{"class":31,"line":1925},[29,59382,2362],{"class":309},[29,59384,59385],{"class":31,"line":1930},[29,59386,2575],{"emptyLinePlaceholder":233},[29,59388,59389],{"class":31,"line":1935},[29,59390,59391],{"class":309},"    .slider-wrapper img {\n",[29,59393,59394],{"class":31,"line":1940},[29,59395,59373],{"class":309},[29,59397,59398],{"class":31,"line":1954},[29,59399,59400],{"class":309},"      height: 100%;\n",[29,59402,59403],{"class":31,"line":1959},[29,59404,59405],{"class":309},"      display: block;\n",[29,59407,59408],{"class":31,"line":2752},[29,59409,2362],{"class":309},[29,59411,59412],{"class":31,"line":2766},[29,59413,2575],{"emptyLinePlaceholder":233},[29,59415,59416],{"class":31,"line":2774},[29,59417,59418],{"class":309},"    .slider-footer {\n",[29,59420,59421],{"class":31,"line":2779},[29,59422,59423],{"class":309},"      height: 80px;\n",[29,59425,59426],{"class":31,"line":2785},[29,59427,59428],{"class":309},"      background-color: rgb(100, 67, 68);\n",[29,59430,59431],{"class":31,"line":2791},[29,59432,59433],{"class":309},"      padding: 12px 12px 0 12px;\n",[29,59435,59436],{"class":31,"line":2796},[29,59437,59438],{"class":309},"      position: relative;\n",[29,59440,59441],{"class":31,"line":8123},[29,59442,2362],{"class":309},[29,59444,59445],{"class":31,"line":8147},[29,59446,2575],{"emptyLinePlaceholder":233},[29,59448,59449],{"class":31,"line":8152},[29,59450,59451],{"class":309},"    .slider-footer .toggle {\n",[29,59453,59454],{"class":31,"line":8158},[29,59455,59456],{"class":309},"      position: absolute;\n",[29,59458,59459],{"class":31,"line":8185},[29,59460,59461],{"class":309},"      right: 0;\n",[29,59463,59464],{"class":31,"line":8190},[29,59465,59466],{"class":309},"      top: 12px;\n",[29,59468,59469],{"class":31,"line":8196},[29,59470,59471],{"class":309},"      display: flex;\n",[29,59473,59474],{"class":31,"line":8208},[29,59475,2362],{"class":309},[29,59477,59478],{"class":31,"line":8220},[29,59479,2575],{"emptyLinePlaceholder":233},[29,59481,59482],{"class":31,"line":8232},[29,59483,59484],{"class":309},"    .slider-footer .toggle button {\n",[29,59486,59487],{"class":31,"line":9891},[29,59488,59489],{"class":309},"      margin-right: 12px;\n",[29,59491,59492],{"class":31,"line":9916},[29,59493,59494],{"class":309},"      width: 28px;\n",[29,59496,59497],{"class":31,"line":9939},[29,59498,59499],{"class":309},"      height: 28px;\n",[29,59501,59502],{"class":31,"line":9963},[29,59503,59504],{"class":309},"      appearance: none;\n",[29,59506,59507],{"class":31,"line":9968},[29,59508,59509],{"class":309},"      border: none;\n",[29,59511,59512],{"class":31,"line":9973},[29,59513,59514],{"class":309},"      background: rgba(255, 255, 255, 0.1);\n",[29,59516,59517],{"class":31,"line":9978},[29,59518,59519],{"class":309},"      color: #fff;\n",[29,59521,59522],{"class":31,"line":9987},[29,59523,59524],{"class":309},"      border-radius: 4px;\n",[29,59526,59527],{"class":31,"line":9992},[29,59528,59529],{"class":309},"      cursor: pointer;\n",[29,59531,59532],{"class":31,"line":9998},[29,59533,2362],{"class":309},[29,59535,59536],{"class":31,"line":10019},[29,59537,2575],{"emptyLinePlaceholder":233},[29,59539,59540],{"class":31,"line":10025},[29,59541,59542],{"class":309},"    .slider-footer .toggle button:hover {\n",[29,59544,59545],{"class":31,"line":10039},[29,59546,59547],{"class":309},"      background: rgba(255, 255, 255, 0.2);\n",[29,59549,59550],{"class":31,"line":10045},[29,59551,2362],{"class":309},[29,59553,59554],{"class":31,"line":10072},[29,59555,2575],{"emptyLinePlaceholder":233},[29,59557,59558],{"class":31,"line":10081},[29,59559,59560],{"class":309},"    .slider-footer p {\n",[29,59562,59563],{"class":31,"line":10087},[29,59564,59565],{"class":309},"      margin: 0;\n",[29,59567,59568],{"class":31,"line":10095},[29,59569,59519],{"class":309},[29,59571,59572],{"class":31,"line":10100},[29,59573,59574],{"class":309},"      font-size: 18px;\n",[29,59576,59577],{"class":31,"line":16779},[29,59578,59579],{"class":309},"      margin-bottom: 10px;\n",[29,59581,59582],{"class":31,"line":16785},[29,59583,2362],{"class":309},[29,59585,59586],{"class":31,"line":16808},[29,59587,2575],{"emptyLinePlaceholder":233},[29,59589,59590],{"class":31,"line":16814},[29,59591,59592],{"class":309},"    .slider-indicator {\n",[29,59594,59595],{"class":31,"line":16837},[29,59596,59565],{"class":309},[29,59598,59599],{"class":31,"line":16851},[29,59600,59601],{"class":309},"      padding: 0;\n",[29,59603,59604],{"class":31,"line":16871},[29,59605,59606],{"class":309},"      list-style: none;\n",[29,59608,59609],{"class":31,"line":16877},[29,59610,59471],{"class":309},[29,59612,59613],{"class":31,"line":16888},[29,59614,59615],{"class":309},"      align-items: center;\n",[29,59617,59618],{"class":31,"line":16911},[29,59619,2362],{"class":309},[29,59621,59622],{"class":31,"line":16933},[29,59623,2575],{"emptyLinePlaceholder":233},[29,59625,59626],{"class":31,"line":16938},[29,59627,59628],{"class":309},"    .slider-indicator li {\n",[29,59630,59631],{"class":31,"line":16944},[29,59632,59633],{"class":309},"      width: 8px;\n",[29,59635,59636],{"class":31,"line":16958},[29,59637,59638],{"class":309},"      height: 8px;\n",[29,59640,59641],{"class":31,"line":16971},[29,59642,59643],{"class":309},"      margin: 4px;\n",[29,59645,59646],{"class":31,"line":16976},[29,59647,59648],{"class":309},"      border-radius: 50%;\n",[29,59650,59651],{"class":31,"line":16990},[29,59652,59653],{"class":309},"      background: #fff;\n",[29,59655,59656],{"class":31,"line":16995},[29,59657,59658],{"class":309},"      opacity: 0.4;\n",[29,59660,59661],{"class":31,"line":17001},[29,59662,59529],{"class":309},[29,59664,59665],{"class":31,"line":17006},[29,59666,2362],{"class":309},[29,59668,59669],{"class":31,"line":17020},[29,59670,2575],{"emptyLinePlaceholder":233},[29,59672,59673],{"class":31,"line":17025},[29,59674,59675],{"class":309},"    .slider-indicator li.active {\n",[29,59677,59678],{"class":31,"line":17030},[29,59679,59680],{"class":309},"      width: 12px;\n",[29,59682,59683],{"class":31,"line":17044},[29,59684,59685],{"class":309},"      height: 12px;\n",[29,59687,59688],{"class":31,"line":17056},[29,59689,59690],{"class":309},"      opacity: 1;\n",[29,59692,59693],{"class":31,"line":17061},[29,59694,2362],{"class":309},[29,59696,59697,59699,59701],{"class":31,"line":17074},[29,59698,52546],{"class":309},[29,59700,223],{"class":51429},[29,59702,51436],{"class":309},[29,59704,59705,59707,59709],{"class":31,"line":17079},[29,59706,51914],{"class":309},[29,59708,51463],{"class":51429},[29,59710,51436],{"class":309},[29,59712,59713],{"class":31,"line":17084},[29,59714,2575],{"emptyLinePlaceholder":233},[29,59716,59717,59719,59721],{"class":31,"line":17089},[29,59718,1218],{"class":309},[29,59720,51929],{"class":51429},[29,59722,51436],{"class":309},[29,59724,59725,59727,59729,59731,59733,59736],{"class":31,"line":17102},[29,59726,52273],{"class":309},[29,59728,51740],{"class":51429},[29,59730,53615],{"class":35},[29,59732,355],{"class":309},[29,59734,59735],{"class":103},"\"slider\"",[29,59737,51436],{"class":309},[29,59739,59740,59742,59744,59746,59748,59750],{"class":31,"line":17107},[29,59741,51470],{"class":309},[29,59743,51740],{"class":51429},[29,59745,53615],{"class":35},[29,59747,355],{"class":309},[29,59749,55356],{"class":103},[29,59751,51436],{"class":309},[29,59753,59754,59756,59758,59760,59762,59765,59767,59769,59771],{"class":31,"line":32762},[29,59755,55363],{"class":309},[29,59757,1638],{"class":51429},[29,59759,55368],{"class":35},[29,59761,355],{"class":309},[29,59763,59764],{"class":103},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[29,59766,55376],{"class":35},[29,59768,355],{"class":309},[29,59770,7827],{"class":103},[29,59772,59256],{"class":309},[29,59774,59775,59777,59779],{"class":31,"line":32768},[29,59776,51905],{"class":309},[29,59778,51740],{"class":51429},[29,59780,51436],{"class":309},[29,59782,59783,59785,59787,59789,59791,59793],{"class":31,"line":32774},[29,59784,51470],{"class":309},[29,59786,51740],{"class":51429},[29,59788,53615],{"class":35},[29,59790,355],{"class":309},[29,59792,55403],{"class":103},[29,59794,51436],{"class":309},[29,59796,59797,59799,59801,59804,59806],{"class":31,"line":32780},[29,59798,55363],{"class":309},[29,59800,171],{"class":51429},[29,59802,59803],{"class":309},">对人类来说会不会太超前了？\u003C\u002F",[29,59805,171],{"class":51429},[29,59807,51436],{"class":309},[29,59809,59810,59812,59814,59816,59818,59821],{"class":31,"line":32786},[29,59811,55363],{"class":309},[29,59813,175],{"class":51429},[29,59815,53615],{"class":35},[29,59817,355],{"class":309},[29,59819,59820],{"class":103},"\"slider-indicator\"",[29,59822,51436],{"class":309},[29,59824,59825,59827,59829,59831,59833,59836,59838,59840],{"class":31,"line":32797},[29,59826,55431],{"class":309},[29,59828,178],{"class":51429},[29,59830,53615],{"class":35},[29,59832,355],{"class":309},[29,59834,59835],{"class":103},"\"active\"",[29,59837,55443],{"class":309},[29,59839,178],{"class":51429},[29,59841,51436],{"class":309},[29,59843,59844,59846,59848,59850,59852],{"class":31,"line":32803},[29,59845,55431],{"class":309},[29,59847,178],{"class":51429},[29,59849,55443],{"class":309},[29,59851,178],{"class":51429},[29,59853,51436],{"class":309},[29,59855,59856,59858,59860,59862,59864],{"class":31,"line":32823},[29,59857,55431],{"class":309},[29,59859,178],{"class":51429},[29,59861,55443],{"class":309},[29,59863,178],{"class":51429},[29,59865,51436],{"class":309},[29,59867,59868,59870,59872,59874,59876],{"class":31,"line":32829},[29,59869,55431],{"class":309},[29,59871,178],{"class":51429},[29,59873,55443],{"class":309},[29,59875,178],{"class":51429},[29,59877,51436],{"class":309},[29,59879,59880,59882,59884,59886,59888],{"class":31,"line":32840},[29,59881,55431],{"class":309},[29,59883,178],{"class":51429},[29,59885,55443],{"class":309},[29,59887,178],{"class":51429},[29,59889,51436],{"class":309},[29,59891,59892,59894,59896,59898,59900],{"class":31,"line":32846},[29,59893,55431],{"class":309},[29,59895,178],{"class":51429},[29,59897,55443],{"class":309},[29,59899,178],{"class":51429},[29,59901,51436],{"class":309},[29,59903,59904,59906,59908,59910,59912],{"class":31,"line":32852},[29,59905,55431],{"class":309},[29,59907,178],{"class":51429},[29,59909,55443],{"class":309},[29,59911,178],{"class":51429},[29,59913,51436],{"class":309},[29,59915,59916,59918,59920,59922,59924],{"class":31,"line":32858},[29,59917,55431],{"class":309},[29,59919,178],{"class":51429},[29,59921,55443],{"class":309},[29,59923,178],{"class":51429},[29,59925,51436],{"class":309},[29,59927,59928,59930,59932],{"class":31,"line":32864},[29,59929,55536],{"class":309},[29,59931,175],{"class":51429},[29,59933,51436],{"class":309},[29,59935,59936,59938,59940,59942,59944,59947],{"class":31,"line":32870},[29,59937,55363],{"class":309},[29,59939,51740],{"class":51429},[29,59941,53615],{"class":35},[29,59943,355],{"class":309},[29,59945,59946],{"class":103},"\"toggle\"",[29,59948,51436],{"class":309},[29,59950,59951,59953,59955,59957,59959,59962,59964,59967,59969,59971],{"class":31,"line":32876},[29,59952,55431],{"class":309},[29,59954,54016],{"class":51429},[29,59956,53615],{"class":35},[29,59958,355],{"class":309},[29,59960,59961],{"class":103},"\"prev\"",[29,59963,1268],{"class":309},[29,59965,59966],{"class":39},"&lt;",[29,59968,51914],{"class":309},[29,59970,54016],{"class":51429},[29,59972,51436],{"class":309},[29,59974,59975,59977,59979,59981,59983,59986,59988,59991,59993,59995],{"class":31,"line":32882},[29,59976,55431],{"class":309},[29,59978,54016],{"class":51429},[29,59980,53615],{"class":35},[29,59982,355],{"class":309},[29,59984,59985],{"class":103},"\"next\"",[29,59987,1268],{"class":309},[29,59989,59990],{"class":39},"&gt;",[29,59992,51914],{"class":309},[29,59994,54016],{"class":51429},[29,59996,51436],{"class":309},[29,59998,59999,60001,60003],{"class":31,"line":32902},[29,60000,55536],{"class":309},[29,60002,51740],{"class":51429},[29,60004,51436],{"class":309},[29,60006,60007,60009,60011],{"class":31,"line":32908},[29,60008,51905],{"class":309},[29,60010,51740],{"class":51429},[29,60012,51436],{"class":309},[29,60014,60015,60017,60019],{"class":31,"line":32924},[29,60016,52546],{"class":309},[29,60018,51740],{"class":51429},[29,60020,51436],{"class":309},[29,60022,60023,60025,60027],{"class":31,"line":32930},[29,60024,52273],{"class":309},[29,60026,51942],{"class":51429},[29,60028,51436],{"class":309},[29,60030,60031],{"class":31,"line":32944},[29,60032,60033],{"class":309},"    \u002F\u002F 1. 初始数据\n",[29,60035,60036],{"class":31,"line":32950},[29,60037,60038],{"class":309},"    const data = [\n",[29,60040,60041],{"class":31,"line":32965},[29,60042,60043],{"class":309},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[29,60045,60046],{"class":31,"line":32971},[29,60047,60048],{"class":309},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[29,60050,60051],{"class":31,"line":32980},[29,60052,60053],{"class":309},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[29,60055,60056],{"class":31,"line":32986},[29,60057,60058],{"class":309},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[29,60060,60061],{"class":31,"line":32995},[29,60062,60063],{"class":309},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[29,60065,60066],{"class":31,"line":33001},[29,60067,60068],{"class":309},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[29,60070,60071],{"class":31,"line":33007},[29,60072,60073],{"class":309},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[29,60075,60076],{"class":31,"line":33016},[29,60077,60078],{"class":309},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[29,60080,60081],{"class":31,"line":33022},[29,60082,53238],{"class":309},[29,60084,60085],{"class":31,"line":33033},[29,60086,60087],{"class":309},"    \u002F\u002F 获取元素\n",[29,60089,60090],{"class":31,"line":33039},[29,60091,60092],{"class":309},"    const img = document.querySelector('.slider-wrapper img')\n",[29,60094,60095],{"class":31,"line":33058},[29,60096,60097],{"class":309},"    const p = document.querySelector('.slider-footer p')\n",[29,60099,60100],{"class":31,"line":33064},[29,60101,60102],{"class":309},"    const footer = document.querySelector('.slider-footer')\n",[29,60104,60105],{"class":31,"line":33075},[29,60106,60107],{"class":309},"    \u002F\u002F 1. 右按钮业务\n",[29,60109,60110],{"class":31,"line":33081},[29,60111,60112],{"class":309},"    \u002F\u002F 1.1 获取右侧按钮 \n",[29,60114,60115],{"class":31,"line":33101},[29,60116,60117],{"class":309},"    const next = document.querySelector('.next')\n",[29,60119,60120],{"class":31,"line":33117},[29,60121,60122],{"class":309},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[29,60124,60125],{"class":31,"line":33123},[29,60126,60127],{"class":309},"    \u002F\u002F 1.2 注册点击事件\n",[29,60129,60130],{"class":31,"line":33137},[29,60131,2575],{"emptyLinePlaceholder":233},[29,60133,60134],{"class":31,"line":33143},[29,60135,60136],{"class":309},"    next.addEventListener('click', function () {\n",[29,60138,60139],{"class":31,"line":33149},[29,60140,60141],{"class":309},"      \u002F\u002F console.log(11)\n",[29,60143,60144],{"class":31,"line":33160},[29,60145,60146],{"class":309},"      i++\n",[29,60148,60149],{"class":31,"line":33166},[29,60150,60151],{"class":309},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[29,60153,60154],{"class":31,"line":33172},[29,60155,60156],{"class":309},"      \u002F\u002F if (i >= 8) {\n",[29,60158,60159],{"class":31,"line":33182},[29,60160,60161],{"class":309},"      \u002F\u002F   i = 0\n",[29,60163,60164],{"class":31,"line":33188},[29,60165,60166],{"class":309},"      \u002F\u002F }\n",[29,60168,60169],{"class":31,"line":33199},[29,60170,60171],{"class":309},"      i = i >= data.length ? 0 : i\n",[29,60173,60174],{"class":31,"line":33205},[29,60175,60176],{"class":309},"      \u002F\u002F 1.3 得到对应的对象\n",[29,60178,60179],{"class":31,"line":33215},[29,60180,60181],{"class":309},"      \u002F\u002F console.log(data[i])\n",[29,60183,60184],{"class":31,"line":33220},[29,60185,60186],{"class":309},"      \u002F\u002F 调用函数\n",[29,60188,60189],{"class":31,"line":33226},[29,60190,60191],{"class":309},"      toggle()\n",[29,60193,60194],{"class":31,"line":33275},[29,60195,33590],{"class":309},[29,60197,60198],{"class":31,"line":33322},[29,60199,2575],{"emptyLinePlaceholder":233},[29,60201,60202],{"class":31,"line":33327},[29,60203,60204],{"class":309},"    \u002F\u002F 2. 左侧按钮业务\n",[29,60206,60207],{"class":31,"line":33333},[29,60208,60209],{"class":309},"    \u002F\u002F 2.1 获取左侧按钮 \n",[29,60211,60212],{"class":31,"line":33352},[29,60213,60214],{"class":309},"    const prev = document.querySelector('.prev')\n",[29,60216,60217],{"class":31,"line":33358},[29,60218,60127],{"class":309},[29,60220,60221],{"class":31,"line":33378},[29,60222,60223],{"class":309},"    prev.addEventListener('click', function () {\n",[29,60225,60226],{"class":31,"line":33384},[29,60227,60228],{"class":309},"      i--\n",[29,60230,60231],{"class":31,"line":33390},[29,60232,60233],{"class":309},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[29,60235,60236],{"class":31,"line":33400},[29,60237,60238],{"class":309},"      \u002F\u002F if (i \u003C 0) {\n",[29,60240,60241],{"class":31,"line":33405},[29,60242,60243],{"class":309},"      \u002F\u002F   i = 7\n",[29,60245,60246],{"class":31,"line":33411},[29,60247,60166],{"class":309},[29,60249,60250],{"class":31,"line":33427},[29,60251,60252],{"class":309},"      i = i \u003C 0 ? data.length - 1 : i\n",[29,60254,60255],{"class":31,"line":33472},[29,60256,60176],{"class":309},[29,60258,60259],{"class":31,"line":33478},[29,60260,60181],{"class":309},[29,60262,60263],{"class":31,"line":33484},[29,60264,60186],{"class":309},[29,60266,60267],{"class":31,"line":33490},[29,60268,60191],{"class":309},[29,60270,60271],{"class":31,"line":33501},[29,60272,33590],{"class":309},[29,60274,60275],{"class":31,"line":33507},[29,60276,2575],{"emptyLinePlaceholder":233},[29,60278,60279],{"class":31,"line":33513},[29,60280,60281],{"class":309},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[29,60283,60284],{"class":31,"line":33519},[29,60285,60286],{"class":309},"    function toggle() {\n",[29,60288,60289],{"class":31,"line":33537},[29,60290,60291],{"class":309},"      \u002F\u002F 1.4 渲染对应的数据\n",[29,60293,60294],{"class":31,"line":33551},[29,60295,60296],{"class":309},"      img.src = data[i].url\n",[29,60298,60299],{"class":31,"line":33560},[29,60300,60301],{"class":309},"      p.innerHTML = data[i].title\n",[29,60303,60304],{"class":31,"line":33569},[29,60305,60306],{"class":309},"      footer.style.backgroundColor = data[i].color\n",[29,60308,60309],{"class":31,"line":33578},[29,60310,60311],{"class":309},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[29,60313,60314],{"class":31,"line":33587},[29,60315,60316],{"class":309},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[29,60318,60319],{"class":31,"line":33593},[29,60320,60321],{"class":309},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[29,60323,60324],{"class":31,"line":33599},[29,60325,2362],{"class":309},[29,60327,60328],{"class":31,"line":33607},[29,60329,2575],{"emptyLinePlaceholder":233},[29,60331,60332],{"class":31,"line":33612},[29,60333,60334],{"class":309},"    \u002F\u002F 3. 自动播放模块\n",[29,60336,60337],{"class":31,"line":33618},[29,60338,60339],{"class":309},"    let timerId = setInterval(function () {\n",[29,60341,60342],{"class":31,"line":33629},[29,60343,60344],{"class":309},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[29,60346,60347],{"class":31,"line":33635},[29,60348,60349],{"class":309},"      next.click()\n",[29,60351,60352],{"class":31,"line":33655},[29,60353,60354],{"class":309},"    }, 1000)\n",[29,60356,60357],{"class":31,"line":33661},[29,60358,2575],{"emptyLinePlaceholder":233},[29,60360,60361],{"class":31,"line":33667},[29,60362,60363],{"class":309},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[29,60365,60366],{"class":31,"line":33673},[29,60367,60368],{"class":309},"    const slider = document.querySelector('.slider')\n",[29,60370,60371],{"class":31,"line":33690},[29,60372,60373],{"class":309},"    \u002F\u002F 注册事件\n",[29,60375,60376],{"class":31,"line":33696},[29,60377,60378],{"class":309},"    slider.addEventListener('mouseenter', function () {\n",[29,60380,60381],{"class":31,"line":33702},[29,60382,60383],{"class":309},"      \u002F\u002F 停止定时器\n",[29,60385,60386],{"class":31,"line":33708},[29,60387,60388],{"class":309},"      clearInterval(timerId)\n",[29,60390,60391],{"class":31,"line":33714},[29,60392,33590],{"class":309},[29,60394,60395],{"class":31,"line":33720},[29,60396,2575],{"emptyLinePlaceholder":233},[29,60398,60399],{"class":31,"line":33747},[29,60400,60401],{"class":309},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[29,60403,60404],{"class":31,"line":33771},[29,60405,60373],{"class":309},[29,60407,60408],{"class":31,"line":33777},[29,60409,60410],{"class":309},"    slider.addEventListener('mouseleave', function () {\n",[29,60412,60413],{"class":31,"line":33783},[29,60414,60383],{"class":309},[29,60416,60417],{"class":31,"line":33789},[29,60418,60419],{"class":309},"      if (timerId) clearInterval(timerId)\n",[29,60421,60422],{"class":31,"line":33800},[29,60423,60424],{"class":309},"      \u002F\u002F 开启定时器\n",[29,60426,60427],{"class":31,"line":33811},[29,60428,60429],{"class":309},"      timerId = setInterval(function () {\n",[29,60431,60432],{"class":31,"line":33817},[29,60433,60434],{"class":309},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[29,60436,60437],{"class":31,"line":33834},[29,60438,60439],{"class":309},"        next.click()\n",[29,60441,60442],{"class":31,"line":33857},[29,60443,60444],{"class":309},"      }, 1000)\n",[29,60446,60447],{"class":31,"line":33880},[29,60448,33590],{"class":309},[29,60450,60451,60453,60455],{"class":31,"line":33886},[29,60452,52546],{"class":309},[29,60454,51942],{"class":51429},[29,60456,51436],{"class":309},[29,60458,60459,60461,60463],{"class":31,"line":33891},[29,60460,51914],{"class":309},[29,60462,51929],{"class":51429},[29,60464,51436],{"class":309},[29,60466,60467],{"class":31,"line":33900},[29,60468,2575],{"emptyLinePlaceholder":233},[29,60470,60471,60473,60475],{"class":31,"line":33910},[29,60472,51914],{"class":309},[29,60474,50764],{"class":51429},[29,60476,51436],{"class":309},[22173,60478,60480],{"id":60479},"_3252-焦点事件","3.2.5.2 焦点事件",[171,60482,60483],{},"小米搜索框案例：",[19,60485,60487],{"className":50762,"code":60486,"language":50764,"meta":24,"style":24},"\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",[26,60488,60489,60499,60513,60517,60525,60539,60559,60579,60591,60599,60605,60615,60625,60637,60641,60645,60652,60656,60667,60671,60675,60682,60693,60706,60720,60724,60728,60737,60749,60761,60775,60788,60801,60819,60830,60834,60838,60847,60864,60868,60872,60879,60889,60899,60910,60923,60935,60951,60962,60974,60978,60982,60990,61001,61018,61030,61042,61053,61057,61061,61072,61083,61087,61095,61099,61107,61111,61119,61134,61157,61172,61203,61230,61257,61284,61311,61338,61365,61374,61382,61390,61395,61415,61435,61440,61445,61463,61468,61478,61483,61497,61502,61507,61524,61533,61545,61549,61557,61565,61569],{"__ignoreMap":24},[29,60490,60491,60493,60495,60497],{"class":31,"line":32},[29,60492,51426],{"class":309},[29,60494,51430],{"class":51429},[29,60496,51433],{"class":35},[29,60498,51436],{"class":309},[29,60500,60501,60503,60505,60507,60509,60511],{"class":31,"line":43},[29,60502,1218],{"class":309},[29,60504,50764],{"class":51429},[29,60506,51445],{"class":35},[29,60508,355],{"class":309},[29,60510,51450],{"class":103},[29,60512,51436],{"class":309},[29,60514,60515],{"class":31,"line":51},[29,60516,2575],{"emptyLinePlaceholder":233},[29,60518,60519,60521,60523],{"class":31,"line":59},[29,60520,1218],{"class":309},[29,60522,51463],{"class":51429},[29,60524,51436],{"class":309},[29,60526,60527,60529,60531,60533,60535,60537],{"class":31,"line":67},[29,60528,51470],{"class":309},[29,60530,51473],{"class":51429},[29,60532,51476],{"class":35},[29,60534,355],{"class":309},[29,60536,51481],{"class":103},[29,60538,51436],{"class":309},[29,60540,60541,60543,60545,60547,60549,60551,60553,60555,60557],{"class":31,"line":75},[29,60542,51470],{"class":309},[29,60544,51473],{"class":51429},[29,60546,51492],{"class":35},[29,60548,355],{"class":309},[29,60550,51497],{"class":103},[29,60552,51500],{"class":35},[29,60554,355],{"class":309},[29,60556,51505],{"class":103},[29,60558,51436],{"class":309},[29,60560,60561,60563,60565,60567,60569,60571,60573,60575,60577],{"class":31,"line":83},[29,60562,51470],{"class":309},[29,60564,51473],{"class":51429},[29,60566,15095],{"class":35},[29,60568,355],{"class":309},[29,60570,51520],{"class":103},[29,60572,51500],{"class":35},[29,60574,355],{"class":309},[29,60576,51527],{"class":103},[29,60578,51436],{"class":309},[29,60580,60581,60583,60585,60587,60589],{"class":31,"line":158},[29,60582,51470],{"class":309},[29,60584,51536],{"class":51429},[29,60586,51539],{"class":309},[29,60588,51536],{"class":51429},[29,60590,51436],{"class":309},[29,60592,60593,60595,60597],{"class":31,"line":166},[29,60594,51470],{"class":309},[29,60596,223],{"class":51429},[29,60598,51436],{"class":309},[29,60600,60601,60603],{"class":31,"line":1505},[29,60602,51556],{"class":51429},[29,60604,15747],{"class":309},[29,60606,60607,60609,60611,60613],{"class":31,"line":1788},[29,60608,51563],{"class":39},[29,60610,51566],{"class":309},[29,60612,499],{"class":39},[29,60614,1468],{"class":309},[29,60616,60617,60619,60621,60623],{"class":31,"line":1793},[29,60618,51575],{"class":39},[29,60620,51566],{"class":309},[29,60622,499],{"class":39},[29,60624,1468],{"class":309},[29,60626,60627,60630,60632,60635],{"class":31,"line":1799},[29,60628,60629],{"class":39},"            box-sizing",[29,60631,51566],{"class":309},[29,60633,60634],{"class":39},"border-box",[29,60636,1468],{"class":309},[29,60638,60639],{"class":31,"line":1804},[29,60640,2704],{"class":309},[29,60642,60643],{"class":31,"line":1818},[29,60644,2575],{"emptyLinePlaceholder":233},[29,60646,60647,60650],{"class":31,"line":1823},[29,60648,60649],{"class":51429},"        ul",[29,60651,15747],{"class":309},[29,60653,60654],{"class":31,"line":1829},[29,60655,2575],{"emptyLinePlaceholder":233},[29,60657,60658,60661,60663,60665],{"class":31,"line":1850},[29,60659,60660],{"class":39},"            list-style",[29,60662,51566],{"class":309},[29,60664,54866],{"class":39},[29,60666,1468],{"class":309},[29,60668,60669],{"class":31,"line":1855},[29,60670,2704],{"class":309},[29,60672,60673],{"class":31,"line":1869},[29,60674,2575],{"emptyLinePlaceholder":233},[29,60676,60677,60680],{"class":31,"line":1874},[29,60678,60679],{"class":35},"        .mi",[29,60681,15747],{"class":309},[29,60683,60684,60687,60689,60691],{"class":31,"line":1903},[29,60685,60686],{"class":39},"            position",[29,60688,51566],{"class":309},[29,60690,54893],{"class":39},[29,60692,1468],{"class":309},[29,60694,60695,60697,60699,60702,60704],{"class":31,"line":1908},[29,60696,51613],{"class":39},[29,60698,51566],{"class":309},[29,60700,60701],{"class":39},"223",[29,60703,51621],{"class":305},[29,60705,1468],{"class":309},[29,60707,60708,60710,60712,60714,60716,60718],{"class":31,"line":1925},[29,60709,51563],{"class":39},[29,60711,51566],{"class":309},[29,60713,619],{"class":39},[29,60715,51621],{"class":305},[29,60717,51685],{"class":39},[29,60719,1468],{"class":309},[29,60721,60722],{"class":31,"line":1930},[29,60723,2704],{"class":309},[29,60725,60726],{"class":31,"line":1935},[29,60727,2575],{"emptyLinePlaceholder":233},[29,60729,60730,60732,60735],{"class":31,"line":1940},[29,60731,60679],{"class":35},[29,60733,60734],{"class":51429}," input",[29,60736,15747],{"class":309},[29,60738,60739,60741,60743,60745,60747],{"class":31,"line":1954},[29,60740,51613],{"class":39},[29,60742,51566],{"class":309},[29,60744,60701],{"class":39},[29,60746,51621],{"class":305},[29,60748,1468],{"class":309},[29,60750,60751,60753,60755,60757,60759],{"class":31,"line":1959},[29,60752,51628],{"class":39},[29,60754,51566],{"class":309},[29,60756,915],{"class":39},[29,60758,51621],{"class":305},[29,60760,1468],{"class":309},[29,60762,60763,60765,60767,60769,60771,60773],{"class":31,"line":2752},[29,60764,51575],{"class":39},[29,60766,51566],{"class":309},[29,60768,499],{"class":39},[29,60770,2213],{"class":39},[29,60772,51621],{"class":305},[29,60774,1468],{"class":309},[29,60776,60777,60780,60782,60784,60786],{"class":31,"line":2766},[29,60778,60779],{"class":39},"            font-size",[29,60781,51566],{"class":309},[29,60783,857],{"class":39},[29,60785,51621],{"class":305},[29,60787,1468],{"class":309},[29,60789,60790,60793,60795,60797,60799],{"class":31,"line":2774},[29,60791,60792],{"class":39},"            line-height",[29,60794,51566],{"class":309},[29,60796,915],{"class":39},[29,60798,51621],{"class":305},[29,60800,1468],{"class":309},[29,60802,60803,60806,60808,60810,60812,60814,60817],{"class":31,"line":2779},[29,60804,60805],{"class":39},"            border",[29,60807,51566],{"class":309},[29,60809,525],{"class":39},[29,60811,51621],{"class":305},[29,60813,51650],{"class":39},[29,60815,60816],{"class":39}," #e0e0e0",[29,60818,1468],{"class":309},[29,60820,60821,60824,60826,60828],{"class":31,"line":2785},[29,60822,60823],{"class":39},"            outline",[29,60825,51566],{"class":309},[29,60827,54866],{"class":39},[29,60829,1468],{"class":309},[29,60831,60832],{"class":31,"line":2791},[29,60833,2704],{"class":309},[29,60835,60836],{"class":31,"line":2796},[29,60837,2575],{"emptyLinePlaceholder":233},[29,60839,60840,60842,60845],{"class":31,"line":8123},[29,60841,60679],{"class":35},[29,60843,60844],{"class":35}," .search",[29,60846,15747],{"class":309},[29,60848,60849,60851,60853,60855,60857,60859,60862],{"class":31,"line":8147},[29,60850,60805],{"class":39},[29,60852,51566],{"class":309},[29,60854,525],{"class":39},[29,60856,51621],{"class":305},[29,60858,51650],{"class":39},[29,60860,60861],{"class":39}," #ff6700",[29,60863,1468],{"class":309},[29,60865,60866],{"class":31,"line":8152},[29,60867,2704],{"class":309},[29,60869,60870],{"class":31,"line":8158},[29,60871,2575],{"emptyLinePlaceholder":233},[29,60873,60874,60877],{"class":31,"line":8185},[29,60875,60876],{"class":35},"        .result-list",[29,60878,15747],{"class":309},[29,60880,60881,60883,60885,60887],{"class":31,"line":8190},[29,60882,51601],{"class":39},[29,60884,51566],{"class":309},[29,60886,54866],{"class":39},[29,60888,1468],{"class":309},[29,60890,60891,60893,60895,60897],{"class":31,"line":8196},[29,60892,60686],{"class":39},[29,60894,51566],{"class":309},[29,60896,54960],{"class":39},[29,60898,1468],{"class":309},[29,60900,60901,60904,60906,60908],{"class":31,"line":8208},[29,60902,60903],{"class":39},"            left",[29,60905,51566],{"class":309},[29,60907,499],{"class":39},[29,60909,1468],{"class":309},[29,60911,60912,60915,60917,60919,60921],{"class":31,"line":8220},[29,60913,60914],{"class":39},"            top",[29,60916,51566],{"class":309},[29,60918,915],{"class":39},[29,60920,51621],{"class":305},[29,60922,1468],{"class":309},[29,60924,60925,60927,60929,60931,60933],{"class":31,"line":8232},[29,60926,51613],{"class":39},[29,60928,51566],{"class":309},[29,60930,60701],{"class":39},[29,60932,51621],{"class":305},[29,60934,1468],{"class":309},[29,60936,60937,60939,60941,60943,60945,60947,60949],{"class":31,"line":9891},[29,60938,60805],{"class":39},[29,60940,51566],{"class":309},[29,60942,525],{"class":39},[29,60944,51621],{"class":305},[29,60946,51650],{"class":39},[29,60948,60861],{"class":39},[29,60950,1468],{"class":309},[29,60952,60953,60956,60958,60960],{"class":31,"line":9916},[29,60954,60955],{"class":39},"            border-top",[29,60957,51566],{"class":309},[29,60959,499],{"class":39},[29,60961,1468],{"class":309},[29,60963,60964,60967,60969,60972],{"class":31,"line":9939},[29,60965,60966],{"class":39},"            background",[29,60968,51566],{"class":309},[29,60970,60971],{"class":39},"#fff",[29,60973,1468],{"class":309},[29,60975,60976],{"class":31,"line":9963},[29,60977,2704],{"class":309},[29,60979,60980],{"class":31,"line":9968},[29,60981,2575],{"emptyLinePlaceholder":233},[29,60983,60984,60986,60988],{"class":31,"line":9973},[29,60985,60876],{"class":35},[29,60987,1574],{"class":51429},[29,60989,15747],{"class":309},[29,60991,60992,60994,60996,60999],{"class":31,"line":9978},[29,60993,51601],{"class":39},[29,60995,51566],{"class":309},[29,60997,60998],{"class":39},"block",[29,61000,1468],{"class":309},[29,61002,61003,61005,61007,61009,61011,61014,61016],{"class":31,"line":9987},[29,61004,51575],{"class":39},[29,61006,51566],{"class":309},[29,61008,652],{"class":39},[29,61010,51621],{"class":305},[29,61012,61013],{"class":39}," 15",[29,61015,51621],{"class":305},[29,61017,1468],{"class":309},[29,61019,61020,61022,61024,61026,61028],{"class":31,"line":9992},[29,61021,60779],{"class":39},[29,61023,51566],{"class":309},[29,61025,806],{"class":39},[29,61027,51621],{"class":305},[29,61029,1468],{"class":309},[29,61031,61032,61035,61037,61040],{"class":31,"line":9998},[29,61033,61034],{"class":39},"            color",[29,61036,51566],{"class":309},[29,61038,61039],{"class":39},"#424242",[29,61041,1468],{"class":309},[29,61043,61044,61047,61049,61051],{"class":31,"line":10019},[29,61045,61046],{"class":39},"            text-decoration",[29,61048,51566],{"class":309},[29,61050,54866],{"class":39},[29,61052,1468],{"class":309},[29,61054,61055],{"class":31,"line":10025},[29,61056,2704],{"class":309},[29,61058,61059],{"class":31,"line":10039},[29,61060,2575],{"emptyLinePlaceholder":233},[29,61062,61063,61065,61067,61070],{"class":31,"line":10045},[29,61064,60876],{"class":35},[29,61066,1574],{"class":51429},[29,61068,61069],{"class":35},":hover",[29,61071,15747],{"class":309},[29,61073,61074,61076,61078,61081],{"class":31,"line":10072},[29,61075,51769],{"class":39},[29,61077,51566],{"class":309},[29,61079,61080],{"class":39},"#eee",[29,61082,1468],{"class":309},[29,61084,61085],{"class":31,"line":10081},[29,61086,2704],{"class":309},[29,61088,61089,61091,61093],{"class":31,"line":10087},[29,61090,51905],{"class":309},[29,61092,223],{"class":51429},[29,61094,51436],{"class":309},[29,61096,61097],{"class":31,"line":10095},[29,61098,2575],{"emptyLinePlaceholder":233},[29,61100,61101,61103,61105],{"class":31,"line":10100},[29,61102,51914],{"class":309},[29,61104,51463],{"class":51429},[29,61106,51436],{"class":309},[29,61108,61109],{"class":31,"line":16779},[29,61110,2575],{"emptyLinePlaceholder":233},[29,61112,61113,61115,61117],{"class":31,"line":16785},[29,61114,1218],{"class":309},[29,61116,51929],{"class":51429},[29,61118,51436],{"class":309},[29,61120,61121,61123,61125,61127,61129,61132],{"class":31,"line":16808},[29,61122,51470],{"class":309},[29,61124,51740],{"class":51429},[29,61126,53615],{"class":35},[29,61128,355],{"class":309},[29,61130,61131],{"class":103},"\"mi\"",[29,61133,51436],{"class":309},[29,61135,61136,61138,61140,61142,61144,61147,61150,61152,61155],{"class":31,"line":16814},[29,61137,55431],{"class":309},[29,61139,53950],{"class":51429},[29,61141,53953],{"class":35},[29,61143,355],{"class":309},[29,61145,61146],{"class":103},"\"search\"",[29,61148,61149],{"class":35}," placeholder",[29,61151,355],{"class":309},[29,61153,61154],{"class":103},"\"小米笔记本\"",[29,61156,51436],{"class":309},[29,61158,61159,61161,61163,61165,61167,61170],{"class":31,"line":16837},[29,61160,55431],{"class":309},[29,61162,175],{"class":51429},[29,61164,53615],{"class":35},[29,61166,355],{"class":309},[29,61168,61169],{"class":103},"\"result-list\"",[29,61171,51436],{"class":309},[29,61173,61174,61177,61179,61182,61184,61187,61189,61192,61195,61197,61199,61201],{"class":31,"line":16851},[29,61175,61176],{"class":309},"            \u003C",[29,61178,178],{"class":51429},[29,61180,61181],{"class":309},">\u003C",[29,61183,546],{"class":51429},[29,61185,61186],{"class":35}," href",[29,61188,355],{"class":309},[29,61190,61191],{"class":103},"\"#\"",[29,61193,61194],{"class":309},">全部商品\u003C\u002F",[29,61196,546],{"class":51429},[29,61198,55443],{"class":309},[29,61200,178],{"class":51429},[29,61202,51436],{"class":309},[29,61204,61205,61207,61209,61211,61213,61215,61217,61219,61222,61224,61226,61228],{"class":31,"line":16871},[29,61206,61176],{"class":309},[29,61208,178],{"class":51429},[29,61210,61181],{"class":309},[29,61212,546],{"class":51429},[29,61214,61186],{"class":35},[29,61216,355],{"class":309},[29,61218,61191],{"class":103},[29,61220,61221],{"class":309},">小米11\u003C\u002F",[29,61223,546],{"class":51429},[29,61225,55443],{"class":309},[29,61227,178],{"class":51429},[29,61229,51436],{"class":309},[29,61231,61232,61234,61236,61238,61240,61242,61244,61246,61249,61251,61253,61255],{"class":31,"line":16877},[29,61233,61176],{"class":309},[29,61235,178],{"class":51429},[29,61237,61181],{"class":309},[29,61239,546],{"class":51429},[29,61241,61186],{"class":35},[29,61243,355],{"class":309},[29,61245,61191],{"class":103},[29,61247,61248],{"class":309},">小米10S\u003C\u002F",[29,61250,546],{"class":51429},[29,61252,55443],{"class":309},[29,61254,178],{"class":51429},[29,61256,51436],{"class":309},[29,61258,61259,61261,61263,61265,61267,61269,61271,61273,61276,61278,61280,61282],{"class":31,"line":16888},[29,61260,61176],{"class":309},[29,61262,178],{"class":51429},[29,61264,61181],{"class":309},[29,61266,546],{"class":51429},[29,61268,61186],{"class":35},[29,61270,355],{"class":309},[29,61272,61191],{"class":103},[29,61274,61275],{"class":309},">小米笔记本\u003C\u002F",[29,61277,546],{"class":51429},[29,61279,55443],{"class":309},[29,61281,178],{"class":51429},[29,61283,51436],{"class":309},[29,61285,61286,61288,61290,61292,61294,61296,61298,61300,61303,61305,61307,61309],{"class":31,"line":16911},[29,61287,61176],{"class":309},[29,61289,178],{"class":51429},[29,61291,61181],{"class":309},[29,61293,546],{"class":51429},[29,61295,61186],{"class":35},[29,61297,355],{"class":309},[29,61299,61191],{"class":103},[29,61301,61302],{"class":309},">小米手机\u003C\u002F",[29,61304,546],{"class":51429},[29,61306,55443],{"class":309},[29,61308,178],{"class":51429},[29,61310,51436],{"class":309},[29,61312,61313,61315,61317,61319,61321,61323,61325,61327,61330,61332,61334,61336],{"class":31,"line":16933},[29,61314,61176],{"class":309},[29,61316,178],{"class":51429},[29,61318,61181],{"class":309},[29,61320,546],{"class":51429},[29,61322,61186],{"class":35},[29,61324,355],{"class":309},[29,61326,61191],{"class":103},[29,61328,61329],{"class":309},">黑鲨4\u003C\u002F",[29,61331,546],{"class":51429},[29,61333,55443],{"class":309},[29,61335,178],{"class":51429},[29,61337,51436],{"class":309},[29,61339,61340,61342,61344,61346,61348,61350,61352,61354,61357,61359,61361,61363],{"class":31,"line":16938},[29,61341,61176],{"class":309},[29,61343,178],{"class":51429},[29,61345,61181],{"class":309},[29,61347,546],{"class":51429},[29,61349,61186],{"class":35},[29,61351,355],{"class":309},[29,61353,61191],{"class":103},[29,61355,61356],{"class":309},">空调\u003C\u002F",[29,61358,546],{"class":51429},[29,61360,55443],{"class":309},[29,61362,178],{"class":51429},[29,61364,51436],{"class":309},[29,61366,61367,61370,61372],{"class":31,"line":16944},[29,61368,61369],{"class":309},"        \u003C\u002F",[29,61371,175],{"class":51429},[29,61373,51436],{"class":309},[29,61375,61376,61378,61380],{"class":31,"line":16958},[29,61377,51905],{"class":309},[29,61379,51740],{"class":51429},[29,61381,51436],{"class":309},[29,61383,61384,61386,61388],{"class":31,"line":16971},[29,61385,51470],{"class":309},[29,61387,51942],{"class":51429},[29,61389,51436],{"class":309},[29,61391,61392],{"class":31,"line":16976},[29,61393,61394],{"class":367},"        \u002F\u002F 1. 获取元素\n",[29,61396,61397,61400,61402,61404,61406,61408,61410,61413],{"class":31,"line":16990},[29,61398,61399],{"class":305},"        const",[29,61401,60734],{"class":39},[29,61403,13739],{"class":305},[29,61405,54525],{"class":309},[29,61407,54528],{"class":35},[29,61409,310],{"class":309},[29,61411,61412],{"class":103},"'[type=search]'",[29,61414,316],{"class":309},[29,61416,61417,61419,61422,61424,61426,61428,61430,61433],{"class":31,"line":16995},[29,61418,61399],{"class":305},[29,61420,61421],{"class":39}," ul",[29,61423,13739],{"class":305},[29,61425,54525],{"class":309},[29,61427,54528],{"class":35},[29,61429,310],{"class":309},[29,61431,61432],{"class":103},"'.result-list'",[29,61434,316],{"class":309},[29,61436,61437],{"class":31,"line":17001},[29,61438,61439],{"class":367},"        \u002F\u002F console.log(input)\n",[29,61441,61442],{"class":31,"line":17006},[29,61443,61444],{"class":367},"        \u002F\u002F 2. 监听事件 获得焦点\n",[29,61446,61447,61450,61452,61454,61457,61459,61461],{"class":31,"line":17020},[29,61448,61449],{"class":309},"        input.",[29,61451,57942],{"class":35},[29,61453,310],{"class":309},[29,61455,61456],{"class":103},"'focus'",[29,61458,12610],{"class":309},[29,61460,54578],{"class":305},[29,61462,54581],{"class":309},[29,61464,61465],{"class":31,"line":17025},[29,61466,61467],{"class":367},"            \u002F\u002F ul显示\n",[29,61469,61470,61473,61475],{"class":31,"line":17030},[29,61471,61472],{"class":309},"            ul.style.display ",[29,61474,355],{"class":305},[29,61476,61477],{"class":103}," 'block'\n",[29,61479,61480],{"class":31,"line":17044},[29,61481,61482],{"class":367},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[29,61484,61485,61488,61490,61492,61495],{"class":31,"line":17056},[29,61486,61487],{"class":309},"            input.classList.",[29,61489,5509],{"class":35},[29,61491,310],{"class":309},[29,61493,61494],{"class":103},"'search'",[29,61496,316],{"class":309},[29,61498,61499],{"class":31,"line":17061},[29,61500,61501],{"class":309},"        })\n",[29,61503,61504],{"class":31,"line":17074},[29,61505,61506],{"class":367},"        \u002F\u002F 3. 监听事件 失去焦点\n",[29,61508,61509,61511,61513,61515,61518,61520,61522],{"class":31,"line":17079},[29,61510,61449],{"class":309},[29,61512,57942],{"class":35},[29,61514,310],{"class":309},[29,61516,61517],{"class":103},"'blur'",[29,61519,12610],{"class":309},[29,61521,54578],{"class":305},[29,61523,54581],{"class":309},[29,61525,61526,61528,61530],{"class":31,"line":17084},[29,61527,61472],{"class":309},[29,61529,355],{"class":305},[29,61531,61532],{"class":103}," 'none'\n",[29,61534,61535,61537,61539,61541,61543],{"class":31,"line":17089},[29,61536,61487],{"class":309},[29,61538,57135],{"class":35},[29,61540,310],{"class":309},[29,61542,61494],{"class":103},[29,61544,316],{"class":309},[29,61546,61547],{"class":31,"line":17102},[29,61548,61501],{"class":309},[29,61550,61551,61553,61555],{"class":31,"line":17107},[29,61552,51905],{"class":309},[29,61554,51942],{"class":51429},[29,61556,51436],{"class":309},[29,61558,61559,61561,61563],{"class":31,"line":32762},[29,61560,51914],{"class":309},[29,61562,51929],{"class":51429},[29,61564,51436],{"class":309},[29,61566,61567],{"class":31,"line":32768},[29,61568,2575],{"emptyLinePlaceholder":233},[29,61570,61571,61573,61575],{"class":31,"line":32774},[29,61572,51914],{"class":309},[29,61574,50764],{"class":51429},[29,61576,51436],{"class":309},[22173,61578,61580],{"id":61579},"_3253-键盘事件","3.2.5.3 键盘事件",[171,61582,61583],{},"评论字数统计案例",[171,61585,61586],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[171,61588,61589],{},"牢记focus伪类选择器",[51473,61591],{"charSet":61592},"UTF-8",[51473,61594],{"name":61595,"content":61596},"viewport","width=device-width, initial-scale=1.0",[51536,61598,61599],{},"Document",[223,61601,61602],{},"\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",[53950,61604],{"type":5362},[175,61606,61607,61610],{},[178,61608,61609],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[178,61611,61612],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[19,61614,61616],{"className":50762,"code":61615,"language":50764,"meta":24,"style":24},"\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",[26,61617,61618,61628,61642,61646,61654,61668,61688,61708,61721,61729,61736,61749,61763,61773,61783,61787,61791,61798,61810,61822,61834,61846,61875,61888,61892,61896,61905,61916,61928,61939,61950,61962,61973,61985,62001,62013,62017,62021,62032,62043,62053,62065,62069,62073,62081,62092,62102,62113,62125,62138,62150,62162,62166,62170,62179,62191,62202,62215,62226,62240,62244,62248,62255,62267,62279,62289,62293,62297,62306,62318,62328,62332,62336,62347,62357,62376,62389,62393,62397,62407,62417,62421,62425,62436,62447,62459,62471,62475,62479,62490,62501,62515,62519,62523,62534,62544,62556,62560,62568,62576,62580,62588,62603,62622,62662,62675,62683,62697,62717,62725,62740,62763,62781,62796,62816,62836,62856,62864,62872,62880,62888,62908,62928,62933,62950,62959,62963,62968,62984,62992,62996,63001,63018,63023,63048,63052,63056,63061,63066,63074,63082,63086],{"__ignoreMap":24},[29,61619,61620,61622,61624,61626],{"class":31,"line":32},[29,61621,51426],{"class":309},[29,61623,51430],{"class":51429},[29,61625,51433],{"class":35},[29,61627,51436],{"class":309},[29,61629,61630,61632,61634,61636,61638,61640],{"class":31,"line":43},[29,61631,1218],{"class":309},[29,61633,50764],{"class":51429},[29,61635,51445],{"class":35},[29,61637,355],{"class":309},[29,61639,51450],{"class":103},[29,61641,51436],{"class":309},[29,61643,61644],{"class":31,"line":51},[29,61645,2575],{"emptyLinePlaceholder":233},[29,61647,61648,61650,61652],{"class":31,"line":59},[29,61649,1218],{"class":309},[29,61651,51463],{"class":51429},[29,61653,51436],{"class":309},[29,61655,61656,61658,61660,61662,61664,61666],{"class":31,"line":67},[29,61657,52273],{"class":309},[29,61659,51473],{"class":51429},[29,61661,51476],{"class":35},[29,61663,355],{"class":309},[29,61665,51481],{"class":103},[29,61667,51436],{"class":309},[29,61669,61670,61672,61674,61676,61678,61680,61682,61684,61686],{"class":31,"line":75},[29,61671,52273],{"class":309},[29,61673,51473],{"class":51429},[29,61675,51492],{"class":35},[29,61677,355],{"class":309},[29,61679,51497],{"class":103},[29,61681,51500],{"class":35},[29,61683,355],{"class":309},[29,61685,51505],{"class":103},[29,61687,51436],{"class":309},[29,61689,61690,61692,61694,61696,61698,61700,61702,61704,61706],{"class":31,"line":83},[29,61691,52273],{"class":309},[29,61693,51473],{"class":51429},[29,61695,15095],{"class":35},[29,61697,355],{"class":309},[29,61699,51520],{"class":103},[29,61701,51500],{"class":35},[29,61703,355],{"class":309},[29,61705,51527],{"class":103},[29,61707,51436],{"class":309},[29,61709,61710,61712,61714,61717,61719],{"class":31,"line":158},[29,61711,52273],{"class":309},[29,61713,51536],{"class":51429},[29,61715,61716],{"class":309},">评论回车发布\u003C\u002F",[29,61718,51536],{"class":51429},[29,61720,51436],{"class":309},[29,61722,61723,61725,61727],{"class":31,"line":166},[29,61724,52273],{"class":309},[29,61726,223],{"class":51429},[29,61728,51436],{"class":309},[29,61730,61731,61734],{"class":31,"line":1505},[29,61732,61733],{"class":35},"    .wrapper",[29,61735,15747],{"class":309},[29,61737,61738,61741,61743,61745,61747],{"class":31,"line":1788},[29,61739,61740],{"class":39},"      min-width",[29,61742,51566],{"class":309},[29,61744,4162],{"class":39},[29,61746,51621],{"class":305},[29,61748,1468],{"class":309},[29,61750,61751,61754,61756,61759,61761],{"class":31,"line":1793},[29,61752,61753],{"class":39},"      max-width",[29,61755,51566],{"class":309},[29,61757,61758],{"class":39},"800",[29,61760,51621],{"class":305},[29,61762,1468],{"class":309},[29,61764,61765,61767,61769,61771],{"class":31,"line":1799},[29,61766,55138],{"class":39},[29,61768,51566],{"class":309},[29,61770,51606],{"class":39},[29,61772,1468],{"class":309},[29,61774,61775,61777,61779,61781],{"class":31,"line":1804},[29,61776,55149],{"class":39},[29,61778,51566],{"class":309},[29,61780,51709],{"class":39},[29,61782,1468],{"class":309},[29,61784,61785],{"class":31,"line":1818},[29,61786,2362],{"class":309},[29,61788,61789],{"class":31,"line":1823},[29,61790,2575],{"emptyLinePlaceholder":233},[29,61792,61793,61796],{"class":31,"line":1829},[29,61794,61795],{"class":35},"    .avatar",[29,61797,15747],{"class":309},[29,61799,61800,61802,61804,61806,61808],{"class":31,"line":1850},[29,61801,54900],{"class":39},[29,61803,51566],{"class":309},[29,61805,915],{"class":39},[29,61807,51621],{"class":305},[29,61809,1468],{"class":309},[29,61811,61812,61814,61816,61818,61820],{"class":31,"line":1855},[29,61813,54914],{"class":39},[29,61815,51566],{"class":309},[29,61817,915],{"class":39},[29,61819,51621],{"class":305},[29,61821,1468],{"class":309},[29,61823,61824,61826,61828,61830,61832],{"class":31,"line":1869},[29,61825,55263],{"class":39},[29,61827,51566],{"class":309},[29,61829,964],{"class":39},[29,61831,636],{"class":305},[29,61833,1468],{"class":309},[29,61835,61836,61839,61841,61844],{"class":31,"line":1874},[29,61837,61838],{"class":39},"      overflow",[29,61840,51566],{"class":309},[29,61842,61843],{"class":39},"hidden",[29,61845,1468],{"class":309},[29,61847,61848,61851,61853,61856,61858,61861,61863,61866,61868,61870,61873],{"class":31,"line":1903},[29,61849,61850],{"class":39},"      background",[29,61852,51566],{"class":309},[29,61854,61855],{"class":39},"url",[29,61857,310],{"class":309},[29,61859,61860],{"class":5391},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[29,61862,13889],{"class":309},[29,61864,61865],{"class":39},"no-repeat",[29,61867,17319],{"class":39},[29,61869,205],{"class":309},[29,61871,61872],{"class":39},"cover",[29,61874,1468],{"class":309},[29,61876,61877,61880,61882,61884,61886],{"class":31,"line":1908},[29,61878,61879],{"class":39},"      margin-right",[29,61881,51566],{"class":309},[29,61883,1008],{"class":39},[29,61885,51621],{"class":305},[29,61887,1468],{"class":309},[29,61889,61890],{"class":31,"line":1925},[29,61891,2362],{"class":309},[29,61893,61894],{"class":31,"line":1930},[29,61895,2575],{"emptyLinePlaceholder":233},[29,61897,61898,61900,61903],{"class":31,"line":1935},[29,61899,61733],{"class":35},[29,61901,61902],{"class":51429}," textarea",[29,61904,15747],{"class":309},[29,61906,61907,61910,61912,61914],{"class":31,"line":1940},[29,61908,61909],{"class":39},"      outline",[29,61911,51566],{"class":309},[29,61913,54866],{"class":39},[29,61915,1468],{"class":309},[29,61917,61918,61921,61923,61926],{"class":31,"line":1954},[29,61919,61920],{"class":39},"      border-color",[29,61922,51566],{"class":309},[29,61924,61925],{"class":39},"transparent",[29,61927,1468],{"class":309},[29,61929,61930,61933,61935,61937],{"class":31,"line":1959},[29,61931,61932],{"class":39},"      resize",[29,61934,51566],{"class":309},[29,61936,54866],{"class":39},[29,61938,1468],{"class":309},[29,61940,61941,61943,61945,61948],{"class":31,"line":2752},[29,61942,61850],{"class":39},[29,61944,51566],{"class":309},[29,61946,61947],{"class":39},"#f5f5f5",[29,61949,1468],{"class":309},[29,61951,61952,61954,61956,61958,61960],{"class":31,"line":2766},[29,61953,55263],{"class":39},[29,61955,51566],{"class":309},[29,61957,601],{"class":39},[29,61959,51621],{"class":305},[29,61961,1468],{"class":309},[29,61963,61964,61967,61969,61971],{"class":31,"line":2774},[29,61965,61966],{"class":39},"      flex",[29,61968,51566],{"class":309},[29,61970,525],{"class":39},[29,61972,1468],{"class":309},[29,61974,61975,61977,61979,61981,61983],{"class":31,"line":2779},[29,61976,54824],{"class":39},[29,61978,51566],{"class":309},[29,61980,754],{"class":39},[29,61982,51621],{"class":305},[29,61984,1468],{"class":309},[29,61986,61987,61990,61992,61994,61997,61999],{"class":31,"line":2785},[29,61988,61989],{"class":39},"      transition",[29,61991,51566],{"class":309},[29,61993,28250],{"class":39},[29,61995,61996],{"class":39}," 0.5",[29,61998,1003],{"class":305},[29,62000,1468],{"class":309},[29,62002,62003,62005,62007,62009,62011],{"class":31,"line":2791},[29,62004,54914],{"class":39},[29,62006,51566],{"class":309},[29,62008,1259],{"class":39},[29,62010,51621],{"class":305},[29,62012,1468],{"class":309},[29,62014,62015],{"class":31,"line":2796},[29,62016,2362],{"class":309},[29,62018,62019],{"class":31,"line":8123},[29,62020,2575],{"emptyLinePlaceholder":233},[29,62022,62023,62025,62027,62030],{"class":31,"line":8147},[29,62024,61733],{"class":35},[29,62026,61902],{"class":51429},[29,62028,62029],{"class":35},":focus",[29,62031,15747],{"class":309},[29,62033,62034,62036,62038,62041],{"class":31,"line":8152},[29,62035,61920],{"class":39},[29,62037,51566],{"class":309},[29,62039,62040],{"class":39},"#e4e4e4",[29,62042,1468],{"class":309},[29,62044,62045,62047,62049,62051],{"class":31,"line":8158},[29,62046,61850],{"class":39},[29,62048,51566],{"class":309},[29,62050,60971],{"class":39},[29,62052,1468],{"class":309},[29,62054,62055,62057,62059,62061,62063],{"class":31,"line":8185},[29,62056,54914],{"class":39},[29,62058,51566],{"class":309},[29,62060,964],{"class":39},[29,62062,51621],{"class":305},[29,62064,1468],{"class":309},[29,62066,62067],{"class":31,"line":8190},[29,62068,2362],{"class":309},[29,62070,62071],{"class":31,"line":8196},[29,62072,2575],{"emptyLinePlaceholder":233},[29,62074,62075,62077,62079],{"class":31,"line":8208},[29,62076,61733],{"class":35},[29,62078,57596],{"class":51429},[29,62080,15747],{"class":309},[29,62082,62083,62085,62087,62090],{"class":31,"line":8220},[29,62084,61850],{"class":39},[29,62086,51566],{"class":309},[29,62088,62089],{"class":39},"#00aeec",[29,62091,1468],{"class":309},[29,62093,62094,62096,62098,62100],{"class":31,"line":8232},[29,62095,57545],{"class":39},[29,62097,51566],{"class":309},[29,62099,60971],{"class":39},[29,62101,1468],{"class":309},[29,62103,62104,62107,62109,62111],{"class":31,"line":9891},[29,62105,62106],{"class":39},"      border",[29,62108,51566],{"class":309},[29,62110,54866],{"class":39},[29,62112,1468],{"class":309},[29,62114,62115,62117,62119,62121,62123],{"class":31,"line":9916},[29,62116,55263],{"class":39},[29,62118,51566],{"class":309},[29,62120,601],{"class":39},[29,62122,51621],{"class":305},[29,62124,1468],{"class":309},[29,62126,62127,62130,62132,62134,62136],{"class":31,"line":9939},[29,62128,62129],{"class":39},"      margin-left",[29,62131,51566],{"class":309},[29,62133,754],{"class":39},[29,62135,51621],{"class":305},[29,62137,1468],{"class":309},[29,62139,62140,62142,62144,62146,62148],{"class":31,"line":9963},[29,62141,54900],{"class":39},[29,62143,51566],{"class":309},[29,62145,664],{"class":39},[29,62147,51621],{"class":305},[29,62149,1468],{"class":309},[29,62151,62152,62155,62157,62160],{"class":31,"line":9968},[29,62153,62154],{"class":39},"      cursor",[29,62156,51566],{"class":309},[29,62158,62159],{"class":39},"pointer",[29,62161,1468],{"class":309},[29,62163,62164],{"class":31,"line":9973},[29,62165,2362],{"class":309},[29,62167,62168],{"class":31,"line":9978},[29,62169,2575],{"emptyLinePlaceholder":233},[29,62171,62172,62174,62177],{"class":31,"line":9987},[29,62173,61733],{"class":35},[29,62175,62176],{"class":35}," .total",[29,62178,15747],{"class":309},[29,62180,62181,62183,62185,62187,62189],{"class":31,"line":9992},[29,62182,61879],{"class":39},[29,62184,51566],{"class":309},[29,62186,920],{"class":39},[29,62188,51621],{"class":305},[29,62190,1468],{"class":309},[29,62192,62193,62195,62197,62200],{"class":31,"line":9998},[29,62194,57545],{"class":39},[29,62196,51566],{"class":309},[29,62198,62199],{"class":39},"#999",[29,62201,1468],{"class":309},[29,62203,62204,62207,62209,62211,62213],{"class":31,"line":10019},[29,62205,62206],{"class":39},"      margin-top",[29,62208,51566],{"class":309},[29,62210,627],{"class":39},[29,62212,51621],{"class":305},[29,62214,1468],{"class":309},[29,62216,62217,62220,62222,62224],{"class":31,"line":10025},[29,62218,62219],{"class":39},"      opacity",[29,62221,51566],{"class":309},[29,62223,499],{"class":39},[29,62225,1468],{"class":309},[29,62227,62228,62230,62232,62234,62236,62238],{"class":31,"line":10039},[29,62229,61989],{"class":39},[29,62231,51566],{"class":309},[29,62233,28250],{"class":39},[29,62235,61996],{"class":39},[29,62237,1003],{"class":305},[29,62239,1468],{"class":309},[29,62241,62242],{"class":31,"line":10045},[29,62243,2362],{"class":309},[29,62245,62246],{"class":31,"line":10072},[29,62247,2575],{"emptyLinePlaceholder":233},[29,62249,62250,62253],{"class":31,"line":10081},[29,62251,62252],{"class":35},"    .list",[29,62254,15747],{"class":309},[29,62256,62257,62259,62261,62263,62265],{"class":31,"line":10087},[29,62258,61740],{"class":39},[29,62260,51566],{"class":309},[29,62262,4162],{"class":39},[29,62264,51621],{"class":305},[29,62266,1468],{"class":309},[29,62268,62269,62271,62273,62275,62277],{"class":31,"line":10095},[29,62270,61753],{"class":39},[29,62272,51566],{"class":309},[29,62274,61758],{"class":39},[29,62276,51621],{"class":305},[29,62278,1468],{"class":309},[29,62280,62281,62283,62285,62287],{"class":31,"line":10100},[29,62282,55138],{"class":39},[29,62284,51566],{"class":309},[29,62286,51606],{"class":39},[29,62288,1468],{"class":309},[29,62290,62291],{"class":31,"line":16779},[29,62292,2362],{"class":309},[29,62294,62295],{"class":31,"line":16785},[29,62296,2575],{"emptyLinePlaceholder":233},[29,62298,62299,62301,62304],{"class":31,"line":16808},[29,62300,62252],{"class":35},[29,62302,62303],{"class":35}," .item",[29,62305,15747],{"class":309},[29,62307,62308,62310,62312,62314,62316],{"class":31,"line":16814},[29,62309,54900],{"class":39},[29,62311,51566],{"class":309},[29,62313,619],{"class":39},[29,62315,636],{"class":305},[29,62317,1468],{"class":309},[29,62319,62320,62322,62324,62326],{"class":31,"line":16837},[29,62321,55138],{"class":39},[29,62323,51566],{"class":309},[29,62325,51606],{"class":39},[29,62327,1468],{"class":309},[29,62329,62330],{"class":31,"line":16851},[29,62331,2362],{"class":309},[29,62333,62334],{"class":31,"line":16871},[29,62335,2575],{"emptyLinePlaceholder":233},[29,62337,62338,62340,62342,62345],{"class":31,"line":16877},[29,62339,62252],{"class":35},[29,62341,62303],{"class":35},[29,62343,62344],{"class":35}," .info",[29,62346,15747],{"class":309},[29,62348,62349,62351,62353,62355],{"class":31,"line":16888},[29,62350,61966],{"class":39},[29,62352,51566],{"class":309},[29,62354,525],{"class":39},[29,62356,1468],{"class":309},[29,62358,62359,62362,62364,62366,62368,62371,62374],{"class":31,"line":16911},[29,62360,62361],{"class":39},"      border-bottom",[29,62363,51566],{"class":309},[29,62365,525],{"class":39},[29,62367,51621],{"class":305},[29,62369,62370],{"class":39}," dashed",[29,62372,62373],{"class":39}," #e4e4e4",[29,62375,1468],{"class":309},[29,62377,62378,62381,62383,62385,62387],{"class":31,"line":16933},[29,62379,62380],{"class":39},"      padding-bottom",[29,62382,51566],{"class":309},[29,62384,754],{"class":39},[29,62386,51621],{"class":305},[29,62388,1468],{"class":309},[29,62390,62391],{"class":31,"line":16938},[29,62392,2362],{"class":309},[29,62394,62395],{"class":31,"line":16944},[29,62396,2575],{"emptyLinePlaceholder":233},[29,62398,62399,62401,62403,62405],{"class":31,"line":16958},[29,62400,62252],{"class":35},[29,62402,62303],{"class":35},[29,62404,7000],{"class":51429},[29,62406,15747],{"class":309},[29,62408,62409,62411,62413,62415],{"class":31,"line":16971},[29,62410,54835],{"class":39},[29,62412,51566],{"class":309},[29,62414,499],{"class":39},[29,62416,1468],{"class":309},[29,62418,62419],{"class":31,"line":16976},[29,62420,2362],{"class":309},[29,62422,62423],{"class":31,"line":16990},[29,62424,2575],{"emptyLinePlaceholder":233},[29,62426,62427,62429,62431,62434],{"class":31,"line":16995},[29,62428,62252],{"class":35},[29,62430,62303],{"class":35},[29,62432,62433],{"class":35}," .name",[29,62435,15747],{"class":309},[29,62437,62438,62440,62442,62445],{"class":31,"line":17001},[29,62439,57545],{"class":39},[29,62441,51566],{"class":309},[29,62443,62444],{"class":39},"#FB7299",[29,62446,1468],{"class":309},[29,62448,62449,62451,62453,62455,62457],{"class":31,"line":17006},[29,62450,55051],{"class":39},[29,62452,51566],{"class":309},[29,62454,857],{"class":39},[29,62456,51621],{"class":305},[29,62458,1468],{"class":309},[29,62460,62461,62464,62466,62469],{"class":31,"line":17020},[29,62462,62463],{"class":39},"      font-weight",[29,62465,51566],{"class":309},[29,62467,62468],{"class":39},"bold",[29,62470,1468],{"class":309},[29,62472,62473],{"class":31,"line":17025},[29,62474,2362],{"class":309},[29,62476,62477],{"class":31,"line":17030},[29,62478,2575],{"emptyLinePlaceholder":233},[29,62480,62481,62483,62485,62488],{"class":31,"line":17044},[29,62482,62252],{"class":35},[29,62484,62303],{"class":35},[29,62486,62487],{"class":35}," .text",[29,62489,15747],{"class":309},[29,62491,62492,62494,62496,62499],{"class":31,"line":17056},[29,62493,57545],{"class":39},[29,62495,51566],{"class":309},[29,62497,62498],{"class":39},"#333",[29,62500,1468],{"class":309},[29,62502,62503,62505,62507,62509,62511,62513],{"class":31,"line":17061},[29,62504,54824],{"class":39},[29,62506,51566],{"class":309},[29,62508,754],{"class":39},[29,62510,51621],{"class":305},[29,62512,4268],{"class":39},[29,62514,1468],{"class":309},[29,62516,62517],{"class":31,"line":17074},[29,62518,2362],{"class":309},[29,62520,62521],{"class":31,"line":17079},[29,62522,2575],{"emptyLinePlaceholder":233},[29,62524,62525,62527,62529,62532],{"class":31,"line":17084},[29,62526,62252],{"class":35},[29,62528,62303],{"class":35},[29,62530,62531],{"class":35}," .time",[29,62533,15747],{"class":309},[29,62535,62536,62538,62540,62542],{"class":31,"line":17089},[29,62537,57545],{"class":39},[29,62539,51566],{"class":309},[29,62541,62199],{"class":39},[29,62543,1468],{"class":309},[29,62545,62546,62548,62550,62552,62554],{"class":31,"line":17102},[29,62547,55051],{"class":39},[29,62549,51566],{"class":309},[29,62551,806],{"class":39},[29,62553,51621],{"class":305},[29,62555,1468],{"class":309},[29,62557,62558],{"class":31,"line":17107},[29,62559,2362],{"class":309},[29,62561,62562,62564,62566],{"class":31,"line":32762},[29,62563,52546],{"class":309},[29,62565,223],{"class":51429},[29,62567,51436],{"class":309},[29,62569,62570,62572,62574],{"class":31,"line":32768},[29,62571,51914],{"class":309},[29,62573,51463],{"class":51429},[29,62575,51436],{"class":309},[29,62577,62578],{"class":31,"line":32774},[29,62579,2575],{"emptyLinePlaceholder":233},[29,62581,62582,62584,62586],{"class":31,"line":32780},[29,62583,1218],{"class":309},[29,62585,51929],{"class":51429},[29,62587,51436],{"class":309},[29,62589,62590,62592,62594,62596,62598,62601],{"class":31,"line":32786},[29,62591,52273],{"class":309},[29,62593,51740],{"class":51429},[29,62595,53615],{"class":35},[29,62597,355],{"class":309},[29,62599,62600],{"class":103},"\"wrapper\"",[29,62602,51436],{"class":309},[29,62604,62605,62607,62609,62611,62613,62616,62618,62620],{"class":31,"line":32797},[29,62606,51470],{"class":309},[29,62608,749],{"class":51429},[29,62610,53615],{"class":35},[29,62612,355],{"class":309},[29,62614,62615],{"class":103},"\"avatar\"",[29,62617,55443],{"class":309},[29,62619,749],{"class":51429},[29,62621,51436],{"class":309},[29,62623,62624,62626,62628,62630,62632,62635,62637,62639,62642,62644,62646,62648,62651,62653,62656,62658,62660],{"class":31,"line":32803},[29,62625,51470],{"class":309},[29,62627,54417],{"class":51429},[29,62629,15134],{"class":35},[29,62631,355],{"class":309},[29,62633,62634],{"class":103},"\"tx\"",[29,62636,61149],{"class":35},[29,62638,355],{"class":309},[29,62640,62641],{"class":103},"\"发一条友善的评论\"",[29,62643,54440],{"class":35},[29,62645,355],{"class":309},[29,62647,3876],{"class":103},[29,62649,62650],{"class":35}," maxlength",[29,62652,355],{"class":309},[29,62654,62655],{"class":103},"\"200\"",[29,62657,55443],{"class":309},[29,62659,54417],{"class":51429},[29,62661,51436],{"class":309},[29,62663,62664,62666,62668,62671,62673],{"class":31,"line":32823},[29,62665,51470],{"class":309},[29,62667,54016],{"class":51429},[29,62669,62670],{"class":309},">发布\u003C\u002F",[29,62672,54016],{"class":51429},[29,62674,51436],{"class":309},[29,62676,62677,62679,62681],{"class":31,"line":32829},[29,62678,52546],{"class":309},[29,62680,51740],{"class":51429},[29,62682,51436],{"class":309},[29,62684,62685,62687,62689,62691,62693,62695],{"class":31,"line":32840},[29,62686,52273],{"class":309},[29,62688,51740],{"class":51429},[29,62690,53615],{"class":35},[29,62692,355],{"class":309},[29,62694,62600],{"class":103},[29,62696,51436],{"class":309},[29,62698,62699,62701,62703,62705,62707,62710,62713,62715],{"class":31,"line":32846},[29,62700,51470],{"class":309},[29,62702,29],{"class":51429},[29,62704,53615],{"class":35},[29,62706,355],{"class":309},[29,62708,62709],{"class":103},"\"total\"",[29,62711,62712],{"class":309},">0\u002F200字\u003C\u002F",[29,62714,29],{"class":51429},[29,62716,51436],{"class":309},[29,62718,62719,62721,62723],{"class":31,"line":32852},[29,62720,52546],{"class":309},[29,62722,51740],{"class":51429},[29,62724,51436],{"class":309},[29,62726,62727,62729,62731,62733,62735,62738],{"class":31,"line":32858},[29,62728,52273],{"class":309},[29,62730,51740],{"class":51429},[29,62732,53615],{"class":35},[29,62734,355],{"class":309},[29,62736,62737],{"class":103},"\"list\"",[29,62739,51436],{"class":309},[29,62741,62742,62744,62746,62748,62750,62753,62756,62758,62761],{"class":31,"line":32864},[29,62743,51470],{"class":309},[29,62745,51740],{"class":51429},[29,62747,53615],{"class":35},[29,62749,355],{"class":309},[29,62751,62752],{"class":103},"\"item\"",[29,62754,62755],{"class":35}," style",[29,62757,355],{"class":309},[29,62759,62760],{"class":103},"\"display: none;\"",[29,62762,51436],{"class":309},[29,62764,62765,62767,62769,62771,62773,62775,62777,62779],{"class":31,"line":32870},[29,62766,55363],{"class":309},[29,62768,749],{"class":51429},[29,62770,53615],{"class":35},[29,62772,355],{"class":309},[29,62774,62615],{"class":103},[29,62776,55443],{"class":309},[29,62778,749],{"class":51429},[29,62780,51436],{"class":309},[29,62782,62783,62785,62787,62789,62791,62794],{"class":31,"line":32876},[29,62784,55363],{"class":309},[29,62786,51740],{"class":51429},[29,62788,53615],{"class":35},[29,62790,355],{"class":309},[29,62792,62793],{"class":103},"\"info\"",[29,62795,51436],{"class":309},[29,62797,62798,62800,62802,62804,62806,62809,62812,62814],{"class":31,"line":32882},[29,62799,55431],{"class":309},[29,62801,171],{"class":51429},[29,62803,53615],{"class":35},[29,62805,355],{"class":309},[29,62807,62808],{"class":103},"\"name\"",[29,62810,62811],{"class":309},">清风徐来\u003C\u002F",[29,62813,171],{"class":51429},[29,62815,51436],{"class":309},[29,62817,62818,62820,62822,62824,62826,62829,62832,62834],{"class":31,"line":32902},[29,62819,55431],{"class":309},[29,62821,171],{"class":51429},[29,62823,53615],{"class":35},[29,62825,355],{"class":309},[29,62827,62828],{"class":103},"\"text\"",[29,62830,62831],{"class":309},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[29,62833,171],{"class":51429},[29,62835,51436],{"class":309},[29,62837,62838,62840,62842,62844,62846,62849,62852,62854],{"class":31,"line":32908},[29,62839,55431],{"class":309},[29,62841,171],{"class":51429},[29,62843,53615],{"class":35},[29,62845,355],{"class":309},[29,62847,62848],{"class":103},"\"time\"",[29,62850,62851],{"class":309},">2022-10-10 20:29:21\u003C\u002F",[29,62853,171],{"class":51429},[29,62855,51436],{"class":309},[29,62857,62858,62860,62862],{"class":31,"line":32924},[29,62859,55536],{"class":309},[29,62861,51740],{"class":51429},[29,62863,51436],{"class":309},[29,62865,62866,62868,62870],{"class":31,"line":32930},[29,62867,51905],{"class":309},[29,62869,51740],{"class":51429},[29,62871,51436],{"class":309},[29,62873,62874,62876,62878],{"class":31,"line":32944},[29,62875,52546],{"class":309},[29,62877,51740],{"class":51429},[29,62879,51436],{"class":309},[29,62881,62882,62884,62886],{"class":31,"line":32950},[29,62883,52273],{"class":309},[29,62885,51942],{"class":51429},[29,62887,51436],{"class":309},[29,62889,62890,62892,62895,62897,62899,62901,62903,62906],{"class":31,"line":32965},[29,62891,11396],{"class":305},[29,62893,62894],{"class":39}," tx",[29,62896,13739],{"class":305},[29,62898,54525],{"class":309},[29,62900,54528],{"class":35},[29,62902,310],{"class":309},[29,62904,62905],{"class":103},"'#tx'",[29,62907,316],{"class":309},[29,62909,62910,62912,62915,62917,62919,62921,62923,62926],{"class":31,"line":32971},[29,62911,11396],{"class":305},[29,62913,62914],{"class":39}," total",[29,62916,13739],{"class":305},[29,62918,54525],{"class":309},[29,62920,54528],{"class":35},[29,62922,310],{"class":309},[29,62924,62925],{"class":103},"'.total'",[29,62927,316],{"class":309},[29,62929,62930],{"class":31,"line":32980},[29,62931,62932],{"class":367},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[29,62934,62935,62938,62940,62942,62944,62946,62948],{"class":31,"line":32986},[29,62936,62937],{"class":309},"    tx.",[29,62939,57942],{"class":35},[29,62941,310],{"class":309},[29,62943,61456],{"class":103},[29,62945,12610],{"class":309},[29,62947,54578],{"class":305},[29,62949,54581],{"class":309},[29,62951,62952,62955,62957],{"class":31,"line":32995},[29,62953,62954],{"class":309},"      total.style.opacity ",[29,62956,355],{"class":305},[29,62958,55828],{"class":39},[29,62960,62961],{"class":31,"line":33001},[29,62962,33590],{"class":309},[29,62964,62965],{"class":31,"line":33007},[29,62966,62967],{"class":367},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[29,62969,62970,62972,62974,62976,62978,62980,62982],{"class":31,"line":33016},[29,62971,62937],{"class":309},[29,62973,57942],{"class":35},[29,62975,310],{"class":309},[29,62977,61517],{"class":103},[29,62979,12610],{"class":309},[29,62981,54578],{"class":305},[29,62983,54581],{"class":309},[29,62985,62986,62988,62990],{"class":31,"line":33022},[29,62987,62954],{"class":309},[29,62989,355],{"class":305},[29,62991,47462],{"class":39},[29,62993,62994],{"class":31,"line":33033},[29,62995,33590],{"class":309},[29,62997,62998],{"class":31,"line":33039},[29,62999,63000],{"class":367},"    \u002F\u002F 3. 检测用户输入\n",[29,63002,63003,63005,63007,63009,63012,63014,63016],{"class":31,"line":33058},[29,63004,62937],{"class":309},[29,63006,57942],{"class":35},[29,63008,310],{"class":309},[29,63010,63011],{"class":103},"'input'",[29,63013,12610],{"class":309},[29,63015,54578],{"class":305},[29,63017,54581],{"class":309},[29,63019,63020],{"class":31,"line":33064},[29,63021,63022],{"class":367},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[29,63024,63025,63028,63030,63033,63036,63038,63041,63043,63045],{"class":31,"line":33075},[29,63026,63027],{"class":309},"      total.innerHTML ",[29,63029,355],{"class":305},[29,63031,63032],{"class":103}," `${",[29,63034,63035],{"class":309},"tx",[29,63037,866],{"class":103},[29,63039,63040],{"class":309},"value",[29,63042,866],{"class":103},[29,63044,52097],{"class":39},[29,63046,63047],{"class":103},"}\u002F200字`\n",[29,63049,63050],{"class":31,"line":33081},[29,63051,33590],{"class":309},[29,63053,63054],{"class":31,"line":33101},[29,63055,2575],{"emptyLinePlaceholder":233},[29,63057,63058],{"class":31,"line":33117},[29,63059,63060],{"class":367},"    \u002F\u002F const str = 'andy'\n",[29,63062,63063],{"class":31,"line":33123},[29,63064,63065],{"class":367},"    \u002F\u002F console.log(str.length)\n",[29,63067,63068,63070,63072],{"class":31,"line":33137},[29,63069,52546],{"class":309},[29,63071,51942],{"class":51429},[29,63073,51436],{"class":309},[29,63075,63076,63078,63080],{"class":31,"line":33143},[29,63077,51914],{"class":309},[29,63079,51929],{"class":51429},[29,63081,51436],{"class":309},[29,63083,63084],{"class":31,"line":33149},[29,63085,2575],{"emptyLinePlaceholder":233},[29,63087,63088,63090,63092],{"class":31,"line":33160},[29,63089,51914],{"class":309},[29,63091,50764],{"class":51429},[29,63093,51436],{"class":309},[22173,63095,63097],{"id":63096},"_3254-change事件","3.2.5.4 change事件",[171,63099,63100],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[171,63102,63103],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[171,63105,63106],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[19,63108,63110],{"className":50762,"code":63109,"language":50764,"meta":24,"style":24},"\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",[26,63111,63112,63122,63136,63140,63148,63162,63182,63194,63202,63206,63214,63228,63236,63254,63272,63284,63288,63296,63304,63308],{"__ignoreMap":24},[29,63113,63114,63116,63118,63120],{"class":31,"line":32},[29,63115,51426],{"class":309},[29,63117,51430],{"class":51429},[29,63119,51433],{"class":35},[29,63121,51436],{"class":309},[29,63123,63124,63126,63128,63130,63132,63134],{"class":31,"line":43},[29,63125,1218],{"class":309},[29,63127,50764],{"class":51429},[29,63129,51445],{"class":35},[29,63131,355],{"class":309},[29,63133,51450],{"class":103},[29,63135,51436],{"class":309},[29,63137,63138],{"class":31,"line":51},[29,63139,2575],{"emptyLinePlaceholder":233},[29,63141,63142,63144,63146],{"class":31,"line":59},[29,63143,1218],{"class":309},[29,63145,51463],{"class":51429},[29,63147,51436],{"class":309},[29,63149,63150,63152,63154,63156,63158,63160],{"class":31,"line":67},[29,63151,52273],{"class":309},[29,63153,51473],{"class":51429},[29,63155,51476],{"class":35},[29,63157,355],{"class":309},[29,63159,51481],{"class":103},[29,63161,51436],{"class":309},[29,63163,63164,63166,63168,63170,63172,63174,63176,63178,63180],{"class":31,"line":75},[29,63165,52273],{"class":309},[29,63167,51473],{"class":51429},[29,63169,15095],{"class":35},[29,63171,355],{"class":309},[29,63173,51520],{"class":103},[29,63175,51500],{"class":35},[29,63177,355],{"class":309},[29,63179,51527],{"class":103},[29,63181,51436],{"class":309},[29,63183,63184,63186,63188,63190,63192],{"class":31,"line":83},[29,63185,52273],{"class":309},[29,63187,51536],{"class":51429},[29,63189,51539],{"class":309},[29,63191,51536],{"class":51429},[29,63193,51436],{"class":309},[29,63195,63196,63198,63200],{"class":31,"line":158},[29,63197,51914],{"class":309},[29,63199,51463],{"class":51429},[29,63201,51436],{"class":309},[29,63203,63204],{"class":31,"line":166},[29,63205,2575],{"emptyLinePlaceholder":233},[29,63207,63208,63210,63212],{"class":31,"line":1505},[29,63209,1218],{"class":309},[29,63211,51929],{"class":51429},[29,63213,51436],{"class":309},[29,63215,63216,63218,63220,63222,63224,63226],{"class":31,"line":1788},[29,63217,52273],{"class":309},[29,63219,53950],{"class":51429},[29,63221,53953],{"class":35},[29,63223,355],{"class":309},[29,63225,62828],{"class":103},[29,63227,51436],{"class":309},[29,63229,63230,63232,63234],{"class":31,"line":1793},[29,63231,52273],{"class":309},[29,63233,51942],{"class":51429},[29,63235,51436],{"class":309},[29,63237,63238,63240,63242,63244,63246,63248,63250,63252],{"class":31,"line":1799},[29,63239,11396],{"class":305},[29,63241,60734],{"class":39},[29,63243,13739],{"class":305},[29,63245,54525],{"class":309},[29,63247,54528],{"class":35},[29,63249,310],{"class":309},[29,63251,63011],{"class":103},[29,63253,316],{"class":309},[29,63255,63256,63259,63261,63263,63266,63268,63270],{"class":31,"line":1804},[29,63257,63258],{"class":309},"    input.",[29,63260,57942],{"class":35},[29,63262,310],{"class":309},[29,63264,63265],{"class":103},"'change'",[29,63267,12610],{"class":309},[29,63269,54578],{"class":305},[29,63271,54581],{"class":309},[29,63273,63274,63276,63278,63280,63282],{"class":31,"line":1818},[29,63275,58373],{"class":309},[29,63277,58376],{"class":35},[29,63279,310],{"class":309},[29,63281,901],{"class":39},[29,63283,316],{"class":309},[29,63285,63286],{"class":31,"line":1823},[29,63287,33590],{"class":309},[29,63289,63290,63292,63294],{"class":31,"line":1829},[29,63291,52546],{"class":309},[29,63293,51942],{"class":51429},[29,63295,51436],{"class":309},[29,63297,63298,63300,63302],{"class":31,"line":1850},[29,63299,51914],{"class":309},[29,63301,51929],{"class":51429},[29,63303,51436],{"class":309},[29,63305,63306],{"class":31,"line":1855},[29,63307,2575],{"emptyLinePlaceholder":233},[29,63309,63310,63312,63314],{"class":31,"line":1869},[29,63311,51914],{"class":309},[29,63313,50764],{"class":51429},[29,63315,51436],{"class":309},[171,63317,63318],{},"总结：内容发生改变才回去触发",[275,63320,63322],{"id":63321},"_326-事件对象","3.2.6 事件对象",[22173,63324,63326],{"id":63325},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[171,63328,63329],{},[1638,63330],{"alt":24,"src":63331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[171,63333,63334],{},[1638,63335],{"alt":24,"src":63336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[171,63338,63339],{},"点击一次，就输出了事件对象，它是个对象",[171,63341,63342],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[171,63344,63345],{},[1638,63346],{"alt":24,"src":63347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22173,63349,63351],{"id":63350},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[171,63353,63354],{},[1638,63355],{"alt":24,"src":63356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[171,63358,63359],{},"实现按特殊字符才是实现打印输出效果：",[19,63361,63363],{"className":53196,"code":63362,"language":53198,"meta":24,"style":24},"\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",[26,63364,63365,63373,63378,63392,63400,63405,63410,63415,63420,63425,63430,63435,63440,63445,63449,63453,63461],{"__ignoreMap":24},[29,63366,63367,63369,63371],{"class":31,"line":32},[29,63368,1218],{"class":309},[29,63370,51929],{"class":51429},[29,63372,51436],{"class":309},[29,63374,63375],{"class":31,"line":43},[29,63376,63377],{"class":367},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[29,63379,63380,63382,63384,63386,63388,63390],{"class":31,"line":51},[29,63381,52273],{"class":309},[29,63383,53950],{"class":51429},[29,63385,53953],{"class":35},[29,63387,355],{"class":309},[29,63389,62828],{"class":103},[29,63391,51436],{"class":309},[29,63393,63394,63396,63398],{"class":31,"line":59},[29,63395,52273],{"class":309},[29,63397,51942],{"class":51429},[29,63399,51436],{"class":309},[29,63401,63402],{"class":31,"line":67},[29,63403,63404],{"class":309},"    \u002F\u002F const btn = document.querySelector('button')\n",[29,63406,63407],{"class":31,"line":75},[29,63408,63409],{"class":309},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[29,63411,63412],{"class":31,"line":83},[29,63413,63414],{"class":309},"    \u002F\u002F   console.log(e);\n",[29,63416,63417],{"class":31,"line":158},[29,63418,63419],{"class":309},"    \u002F\u002F })\n",[29,63421,63422],{"class":31,"line":166},[29,63423,63424],{"class":309},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[29,63426,63427],{"class":31,"line":1505},[29,63428,63429],{"class":309},"    const input = document.querySelector('input')\n",[29,63431,63432],{"class":31,"line":1788},[29,63433,63434],{"class":309},"    input.addEventListener('keyup', function (e) {\n",[29,63436,63437],{"class":31,"line":1793},[29,63438,63439],{"class":309},"      if (e.key === 'Enter') {\n",[29,63441,63442],{"class":31,"line":1799},[29,63443,63444],{"class":309},"        console.log('我按下了回车键')\n",[29,63446,63447],{"class":31,"line":1804},[29,63448,52527],{"class":309},[29,63450,63451],{"class":31,"line":1818},[29,63452,33590],{"class":309},[29,63454,63455,63457,63459],{"class":31,"line":1823},[29,63456,52546],{"class":309},[29,63458,51942],{"class":51429},[29,63460,51436],{"class":309},[29,63462,63463,63465,63467],{"class":31,"line":1829},[29,63464,51914],{"class":309},[29,63466,51929],{"class":51429},[29,63468,51436],{"class":309},[22173,63470,63472],{"id":63471},"_3263-trim方法","3.2.6.3 trim方法",[171,63474,63475],{},[1638,63476],{"alt":24,"src":63477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[171,63479,63480],{},[1638,63481],{"alt":24,"src":63482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[171,63484,63485],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[171,63487,63488],{},"str.trim()",[275,63490,63492],{"id":63491},"_327-环境对象","3.2.7 环境对象",[171,63494,63495],{},[1638,63496],{"alt":24,"src":63497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[171,63499,63500],{},[1638,63501],{"alt":24,"src":63502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[171,63504,63505],{},[1638,63506],{"alt":24,"src":63507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[171,63509,63510],{},"实际函数调用是window.fn()",[171,63512,63513],{},"普通函数里面this指向的是window",[175,63515,63516,63519,63522],{},[178,63517,63518],{},"在普通函数下，this指向的是window",[178,63520,63521],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[178,63523,63524],{},"箭头函数没有this",[171,63526,63527],{},"粗略记法就是：谁调用，this就指向谁",[171,63529,63530],{},[1638,63531],{"alt":24,"src":63532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[171,63534,63535],{},[1638,63536],{"alt":24,"src":63537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[171,63539,63540],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[171,63542,63543],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[19,63545,63547],{"className":53196,"code":63546,"language":53198,"meta":24,"style":24},"\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",[26,63548,63549,63557,63569,63577,63582,63587,63592,63597,63601,63609],{"__ignoreMap":24},[29,63550,63551,63553,63555],{"class":31,"line":32},[29,63552,1218],{"class":309},[29,63554,51929],{"class":51429},[29,63556,51436],{"class":309},[29,63558,63559,63561,63563,63565,63567],{"class":31,"line":43},[29,63560,52273],{"class":309},[29,63562,54016],{"class":51429},[29,63564,54022],{"class":309},[29,63566,54016],{"class":51429},[29,63568,51436],{"class":309},[29,63570,63571,63573,63575],{"class":31,"line":51},[29,63572,52273],{"class":309},[29,63574,51942],{"class":51429},[29,63576,51436],{"class":309},[29,63578,63579],{"class":31,"line":59},[29,63580,63581],{"class":309},"    const button = document.querySelector('button')\n",[29,63583,63584],{"class":31,"line":67},[29,63585,63586],{"class":309},"    button.addEventListener('click', function () {\n",[29,63588,63589],{"class":31,"line":75},[29,63590,63591],{"class":309},"      \u002F\u002F console.log(this);\n",[29,63593,63594],{"class":31,"line":83},[29,63595,63596],{"class":309},"      this.style.color = 'pink'\n",[29,63598,63599],{"class":31,"line":158},[29,63600,33590],{"class":309},[29,63602,63603,63605,63607],{"class":31,"line":166},[29,63604,52546],{"class":309},[29,63606,51942],{"class":51429},[29,63608,51436],{"class":309},[29,63610,63611,63613,63615],{"class":31,"line":1505},[29,63612,51914],{"class":309},[29,63614,51929],{"class":51429},[29,63616,51436],{"class":309},[275,63618,63620],{"id":63619},"_328-回调函数","3.2.8 回调函数",[171,63622,63623],{},[1638,63624],{"alt":24,"src":63625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[171,63627,63628],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[171,63630,11507],{},[175,63632,63633,63636,63639],{},[178,63634,63635],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[178,63637,63638],{},"回调函数本质还是函数，只不过把它当成参数使用",[178,63640,63641],{},"使用匿名函数做为回调函数比较常见",[275,63643,63645],{"id":63644},"_329-tab栏切换","3.2.9 tab栏切换",[171,63647,63648],{},[1638,63649],{"alt":24,"src":63650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[19,63652,63654],{"className":50762,"code":63653,"language":50764,"meta":24,"style":24},"\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",[26,63655,63656,63666,63680,63684,63692,63706,63726,63746,63759,63767,63773,63783,63793,63797,63801,63808,63821,63834,63846,63862,63866,63870,63877,63889,63901,63913,63923,63933,63937,63941,63950,63962,63973,63985,63989,63993,64001,64011,64021,64031,64035,64039,64049,64063,64075,64079,64083,64095,64106,64123,64133,64137,64141,64156,64167,64177,64181,64185,64192,64207,64211,64215,64223,64233,64237,64241,64250,64260,64264,64272,64280,64284,64292,64307,64322,64335,64343,64377,64404,64431,64458,64485,64493,64501,64516,64553,64588,64623,64658,64693,64701,64709,64717,64722,64727,64747,64752,64781,64786,64791,64809,64814,64819,64824,64846,64851,64867,64871,64876,64881,64902,64907,64936,64940,64945,64949,64957,64965,64969],{"__ignoreMap":24},[29,63657,63658,63660,63662,63664],{"class":31,"line":32},[29,63659,51426],{"class":309},[29,63661,51430],{"class":51429},[29,63663,51433],{"class":35},[29,63665,51436],{"class":309},[29,63667,63668,63670,63672,63674,63676,63678],{"class":31,"line":43},[29,63669,1218],{"class":309},[29,63671,50764],{"class":51429},[29,63673,51445],{"class":35},[29,63675,355],{"class":309},[29,63677,51450],{"class":103},[29,63679,51436],{"class":309},[29,63681,63682],{"class":31,"line":51},[29,63683,2575],{"emptyLinePlaceholder":233},[29,63685,63686,63688,63690],{"class":31,"line":59},[29,63687,1218],{"class":309},[29,63689,51463],{"class":51429},[29,63691,51436],{"class":309},[29,63693,63694,63696,63698,63700,63702,63704],{"class":31,"line":67},[29,63695,52273],{"class":309},[29,63697,51473],{"class":51429},[29,63699,51476],{"class":35},[29,63701,355],{"class":309},[29,63703,51481],{"class":103},[29,63705,59256],{"class":309},[29,63707,63708,63710,63712,63714,63716,63718,63720,63722,63724],{"class":31,"line":75},[29,63709,52273],{"class":309},[29,63711,51473],{"class":51429},[29,63713,51492],{"class":35},[29,63715,355],{"class":309},[29,63717,51497],{"class":103},[29,63719,51500],{"class":35},[29,63721,355],{"class":309},[29,63723,51505],{"class":103},[29,63725,59256],{"class":309},[29,63727,63728,63730,63732,63734,63736,63738,63740,63742,63744],{"class":31,"line":83},[29,63729,52273],{"class":309},[29,63731,51473],{"class":51429},[29,63733,15095],{"class":35},[29,63735,355],{"class":309},[29,63737,51520],{"class":103},[29,63739,51500],{"class":35},[29,63741,355],{"class":309},[29,63743,51527],{"class":103},[29,63745,59256],{"class":309},[29,63747,63748,63750,63752,63755,63757],{"class":31,"line":158},[29,63749,52273],{"class":309},[29,63751,51536],{"class":51429},[29,63753,63754],{"class":309},">tab栏切换\u003C\u002F",[29,63756,51536],{"class":51429},[29,63758,51436],{"class":309},[29,63760,63761,63763,63765],{"class":31,"line":166},[29,63762,52273],{"class":309},[29,63764,223],{"class":51429},[29,63766,51436],{"class":309},[29,63768,63769,63771],{"class":31,"line":1505},[29,63770,6578],{"class":51429},[29,63772,15747],{"class":309},[29,63774,63775,63777,63779,63781],{"class":31,"line":1788},[29,63776,54835],{"class":39},[29,63778,51566],{"class":309},[29,63780,499],{"class":39},[29,63782,1468],{"class":309},[29,63784,63785,63787,63789,63791],{"class":31,"line":1793},[29,63786,54824],{"class":39},[29,63788,51566],{"class":309},[29,63790,499],{"class":39},[29,63792,1468],{"class":309},[29,63794,63795],{"class":31,"line":1799},[29,63796,2362],{"class":309},[29,63798,63799],{"class":31,"line":1804},[29,63800,2575],{"emptyLinePlaceholder":233},[29,63802,63803,63806],{"class":31,"line":1818},[29,63804,63805],{"class":35},"    .tab",[29,63807,15747],{"class":309},[29,63809,63810,63812,63814,63817,63819],{"class":31,"line":1823},[29,63811,54900],{"class":39},[29,63813,51566],{"class":309},[29,63815,63816],{"class":39},"590",[29,63818,51621],{"class":305},[29,63820,1468],{"class":309},[29,63822,63823,63825,63827,63830,63832],{"class":31,"line":1829},[29,63824,54914],{"class":39},[29,63826,51566],{"class":309},[29,63828,63829],{"class":39},"340",[29,63831,51621],{"class":305},[29,63833,1468],{"class":309},[29,63835,63836,63838,63840,63842,63844],{"class":31,"line":1850},[29,63837,54835],{"class":39},[29,63839,51566],{"class":309},[29,63841,1008],{"class":39},[29,63843,51621],{"class":305},[29,63845,1468],{"class":309},[29,63847,63848,63850,63852,63854,63856,63858,63860],{"class":31,"line":1855},[29,63849,62106],{"class":39},[29,63851,51566],{"class":309},[29,63853,525],{"class":39},[29,63855,51621],{"class":305},[29,63857,51650],{"class":39},[29,63859,62373],{"class":39},[29,63861,1468],{"class":309},[29,63863,63864],{"class":31,"line":1869},[29,63865,2362],{"class":309},[29,63867,63868],{"class":31,"line":1874},[29,63869,2575],{"emptyLinePlaceholder":233},[29,63871,63872,63875],{"class":31,"line":1903},[29,63873,63874],{"class":35},"    .tab-nav",[29,63876,15747],{"class":309},[29,63878,63879,63881,63883,63885,63887],{"class":31,"line":1908},[29,63880,54900],{"class":39},[29,63882,51566],{"class":309},[29,63884,619],{"class":39},[29,63886,636],{"class":305},[29,63888,1468],{"class":309},[29,63890,63891,63893,63895,63897,63899],{"class":31,"line":1925},[29,63892,54914],{"class":39},[29,63894,51566],{"class":309},[29,63896,1215],{"class":39},[29,63898,51621],{"class":305},[29,63900,1468],{"class":309},[29,63902,63903,63905,63907,63909,63911],{"class":31,"line":1930},[29,63904,57488],{"class":39},[29,63906,51566],{"class":309},[29,63908,1215],{"class":39},[29,63910,51621],{"class":305},[29,63912,1468],{"class":309},[29,63914,63915,63917,63919,63921],{"class":31,"line":1935},[29,63916,55138],{"class":39},[29,63918,51566],{"class":309},[29,63920,51606],{"class":39},[29,63922,1468],{"class":309},[29,63924,63925,63927,63929,63931],{"class":31,"line":1940},[29,63926,55149],{"class":39},[29,63928,51566],{"class":309},[29,63930,51797],{"class":39},[29,63932,1468],{"class":309},[29,63934,63935],{"class":31,"line":1954},[29,63936,2362],{"class":309},[29,63938,63939],{"class":31,"line":1959},[29,63940,2575],{"emptyLinePlaceholder":233},[29,63942,63943,63945,63948],{"class":31,"line":2752},[29,63944,63874],{"class":35},[29,63946,63947],{"class":51429}," h3",[29,63949,15747],{"class":309},[29,63951,63952,63954,63956,63958,63960],{"class":31,"line":2766},[29,63953,55051],{"class":39},[29,63955,51566],{"class":309},[29,63957,1108],{"class":39},[29,63959,51621],{"class":305},[29,63961,1468],{"class":309},[29,63963,63964,63966,63968,63971],{"class":31,"line":2774},[29,63965,62463],{"class":39},[29,63967,51566],{"class":309},[29,63969,63970],{"class":39},"normal",[29,63972,1468],{"class":309},[29,63974,63975,63977,63979,63981,63983],{"class":31,"line":2779},[29,63976,62129],{"class":39},[29,63978,51566],{"class":309},[29,63980,1008],{"class":39},[29,63982,51621],{"class":305},[29,63984,1468],{"class":309},[29,63986,63987],{"class":31,"line":2785},[29,63988,2362],{"class":309},[29,63990,63991],{"class":31,"line":2791},[29,63992,2575],{"emptyLinePlaceholder":233},[29,63994,63995,63997,63999],{"class":31,"line":2796},[29,63996,63874],{"class":35},[29,63998,61421],{"class":51429},[29,64000,15747],{"class":309},[29,64002,64003,64005,64007,64009],{"class":31,"line":8123},[29,64004,54861],{"class":39},[29,64006,51566],{"class":309},[29,64008,54866],{"class":39},[29,64010,1468],{"class":309},[29,64012,64013,64015,64017,64019],{"class":31,"line":8147},[29,64014,55138],{"class":39},[29,64016,51566],{"class":309},[29,64018,51606],{"class":39},[29,64020,1468],{"class":309},[29,64022,64023,64025,64027,64029],{"class":31,"line":8152},[29,64024,55149],{"class":39},[29,64026,51566],{"class":309},[29,64028,51709],{"class":39},[29,64030,1468],{"class":309},[29,64032,64033],{"class":31,"line":8158},[29,64034,2362],{"class":309},[29,64036,64037],{"class":31,"line":8185},[29,64038,2575],{"emptyLinePlaceholder":233},[29,64040,64041,64043,64045,64047],{"class":31,"line":8190},[29,64042,63874],{"class":35},[29,64044,61421],{"class":51429},[29,64046,55204],{"class":51429},[29,64048,15747],{"class":309},[29,64050,64051,64053,64055,64057,64059,64061],{"class":31,"line":8196},[29,64052,54835],{"class":39},[29,64054,51566],{"class":309},[29,64056,499],{"class":39},[29,64058,9125],{"class":39},[29,64060,51621],{"class":305},[29,64062,1468],{"class":309},[29,64064,64065,64067,64069,64071,64073],{"class":31,"line":8208},[29,64066,55051],{"class":39},[29,64068,51566],{"class":309},[29,64070,857],{"class":39},[29,64072,51621],{"class":305},[29,64074,1468],{"class":309},[29,64076,64077],{"class":31,"line":8220},[29,64078,2362],{"class":309},[29,64080,64081],{"class":31,"line":8232},[29,64082,2575],{"emptyLinePlaceholder":233},[29,64084,64085,64087,64089,64091,64093],{"class":31,"line":9891},[29,64086,63874],{"class":35},[29,64088,61421],{"class":51429},[29,64090,55204],{"class":51429},[29,64092,1574],{"class":51429},[29,64094,15747],{"class":309},[29,64096,64097,64100,64102,64104],{"class":31,"line":9916},[29,64098,64099],{"class":39},"      text-decoration",[29,64101,51566],{"class":309},[29,64103,54866],{"class":39},[29,64105,1468],{"class":309},[29,64107,64108,64110,64112,64114,64116,64118,64121],{"class":31,"line":9939},[29,64109,62361],{"class":39},[29,64111,51566],{"class":309},[29,64113,386],{"class":39},[29,64115,51621],{"class":305},[29,64117,51650],{"class":39},[29,64119,64120],{"class":39}," transparent",[29,64122,1468],{"class":309},[29,64124,64125,64127,64129,64131],{"class":31,"line":9963},[29,64126,57545],{"class":39},[29,64128,51566],{"class":309},[29,64130,62498],{"class":39},[29,64132,1468],{"class":309},[29,64134,64135],{"class":31,"line":9968},[29,64136,2362],{"class":309},[29,64138,64139],{"class":31,"line":9973},[29,64140,2575],{"emptyLinePlaceholder":233},[29,64142,64143,64145,64147,64149,64151,64154],{"class":31,"line":9978},[29,64144,63874],{"class":35},[29,64146,61421],{"class":51429},[29,64148,55204],{"class":51429},[29,64150,1574],{"class":51429},[29,64152,64153],{"class":35},".active",[29,64155,15747],{"class":309},[29,64157,64158,64160,64162,64165],{"class":31,"line":9987},[29,64159,61920],{"class":39},[29,64161,51566],{"class":309},[29,64163,64164],{"class":39},"#e1251b",[29,64166,1468],{"class":309},[29,64168,64169,64171,64173,64175],{"class":31,"line":9992},[29,64170,57545],{"class":39},[29,64172,51566],{"class":309},[29,64174,64164],{"class":39},[29,64176,1468],{"class":309},[29,64178,64179],{"class":31,"line":9998},[29,64180,2362],{"class":309},[29,64182,64183],{"class":31,"line":10019},[29,64184,2575],{"emptyLinePlaceholder":233},[29,64186,64187,64190],{"class":31,"line":10025},[29,64188,64189],{"class":35},"    .tab-content",[29,64191,15747],{"class":309},[29,64193,64194,64196,64198,64200,64203,64205],{"class":31,"line":10039},[29,64195,54824],{"class":39},[29,64197,51566],{"class":309},[29,64199,499],{"class":39},[29,64201,64202],{"class":39}," 16",[29,64204,51621],{"class":305},[29,64206,1468],{"class":309},[29,64208,64209],{"class":31,"line":10045},[29,64210,2362],{"class":309},[29,64212,64213],{"class":31,"line":10072},[29,64214,2575],{"emptyLinePlaceholder":233},[29,64216,64217,64219,64221],{"class":31,"line":10081},[29,64218,64189],{"class":35},[29,64220,62303],{"class":35},[29,64222,15747],{"class":309},[29,64224,64225,64227,64229,64231],{"class":31,"line":10087},[29,64226,55138],{"class":39},[29,64228,51566],{"class":309},[29,64230,54866],{"class":39},[29,64232,1468],{"class":309},[29,64234,64235],{"class":31,"line":10095},[29,64236,2362],{"class":309},[29,64238,64239],{"class":31,"line":10100},[29,64240,2575],{"emptyLinePlaceholder":233},[29,64242,64243,64245,64248],{"class":31,"line":16779},[29,64244,64189],{"class":35},[29,64246,64247],{"class":35}," .item.active",[29,64249,15747],{"class":309},[29,64251,64252,64254,64256,64258],{"class":31,"line":16785},[29,64253,55138],{"class":39},[29,64255,51566],{"class":309},[29,64257,60998],{"class":39},[29,64259,1468],{"class":309},[29,64261,64262],{"class":31,"line":16808},[29,64263,2362],{"class":309},[29,64265,64266,64268,64270],{"class":31,"line":16814},[29,64267,52546],{"class":309},[29,64269,223],{"class":51429},[29,64271,51436],{"class":309},[29,64273,64274,64276,64278],{"class":31,"line":16837},[29,64275,51914],{"class":309},[29,64277,51463],{"class":51429},[29,64279,51436],{"class":309},[29,64281,64282],{"class":31,"line":16851},[29,64283,2575],{"emptyLinePlaceholder":233},[29,64285,64286,64288,64290],{"class":31,"line":16871},[29,64287,1218],{"class":309},[29,64289,51929],{"class":51429},[29,64291,51436],{"class":309},[29,64293,64294,64296,64298,64300,64302,64305],{"class":31,"line":16877},[29,64295,52273],{"class":309},[29,64297,51740],{"class":51429},[29,64299,53615],{"class":35},[29,64301,355],{"class":309},[29,64303,64304],{"class":103},"\"tab\"",[29,64306,51436],{"class":309},[29,64308,64309,64311,64313,64315,64317,64320],{"class":31,"line":16888},[29,64310,51470],{"class":309},[29,64312,51740],{"class":51429},[29,64314,53615],{"class":35},[29,64316,355],{"class":309},[29,64318,64319],{"class":103},"\"tab-nav\"",[29,64321,51436],{"class":309},[29,64323,64324,64326,64328,64331,64333],{"class":31,"line":16911},[29,64325,55363],{"class":309},[29,64327,275],{"class":51429},[29,64329,64330],{"class":309},">每日特价\u003C\u002F",[29,64332,275],{"class":51429},[29,64334,51436],{"class":309},[29,64336,64337,64339,64341],{"class":31,"line":16933},[29,64338,55363],{"class":309},[29,64340,175],{"class":51429},[29,64342,51436],{"class":309},[29,64344,64345,64347,64349,64351,64353,64355,64357,64359,64361,64363,64366,64369,64371,64373,64375],{"class":31,"line":16938},[29,64346,55431],{"class":309},[29,64348,178],{"class":51429},[29,64350,61181],{"class":309},[29,64352,546],{"class":51429},[29,64354,53615],{"class":35},[29,64356,355],{"class":309},[29,64358,59835],{"class":103},[29,64360,61186],{"class":35},[29,64362,355],{"class":309},[29,64364,64365],{"class":103},"\"javascript:;\"",[29,64367,64368],{"class":309},">精选\u003C\u002F",[29,64370,546],{"class":51429},[29,64372,55443],{"class":309},[29,64374,178],{"class":51429},[29,64376,51436],{"class":309},[29,64378,64379,64381,64383,64385,64387,64389,64391,64393,64396,64398,64400,64402],{"class":31,"line":16944},[29,64380,55431],{"class":309},[29,64382,178],{"class":51429},[29,64384,61181],{"class":309},[29,64386,546],{"class":51429},[29,64388,61186],{"class":35},[29,64390,355],{"class":309},[29,64392,64365],{"class":103},[29,64394,64395],{"class":309},">美食\u003C\u002F",[29,64397,546],{"class":51429},[29,64399,55443],{"class":309},[29,64401,178],{"class":51429},[29,64403,51436],{"class":309},[29,64405,64406,64408,64410,64412,64414,64416,64418,64420,64423,64425,64427,64429],{"class":31,"line":16958},[29,64407,55431],{"class":309},[29,64409,178],{"class":51429},[29,64411,61181],{"class":309},[29,64413,546],{"class":51429},[29,64415,61186],{"class":35},[29,64417,355],{"class":309},[29,64419,64365],{"class":103},[29,64421,64422],{"class":309},">百货\u003C\u002F",[29,64424,546],{"class":51429},[29,64426,55443],{"class":309},[29,64428,178],{"class":51429},[29,64430,51436],{"class":309},[29,64432,64433,64435,64437,64439,64441,64443,64445,64447,64450,64452,64454,64456],{"class":31,"line":16971},[29,64434,55431],{"class":309},[29,64436,178],{"class":51429},[29,64438,61181],{"class":309},[29,64440,546],{"class":51429},[29,64442,61186],{"class":35},[29,64444,355],{"class":309},[29,64446,64365],{"class":103},[29,64448,64449],{"class":309},">个护\u003C\u002F",[29,64451,546],{"class":51429},[29,64453,55443],{"class":309},[29,64455,178],{"class":51429},[29,64457,51436],{"class":309},[29,64459,64460,64462,64464,64466,64468,64470,64472,64474,64477,64479,64481,64483],{"class":31,"line":16976},[29,64461,55431],{"class":309},[29,64463,178],{"class":51429},[29,64465,61181],{"class":309},[29,64467,546],{"class":51429},[29,64469,61186],{"class":35},[29,64471,355],{"class":309},[29,64473,64365],{"class":103},[29,64475,64476],{"class":309},">预告\u003C\u002F",[29,64478,546],{"class":51429},[29,64480,55443],{"class":309},[29,64482,178],{"class":51429},[29,64484,51436],{"class":309},[29,64486,64487,64489,64491],{"class":31,"line":16990},[29,64488,55536],{"class":309},[29,64490,175],{"class":51429},[29,64492,51436],{"class":309},[29,64494,64495,64497,64499],{"class":31,"line":16995},[29,64496,51905],{"class":309},[29,64498,51740],{"class":51429},[29,64500,51436],{"class":309},[29,64502,64503,64505,64507,64509,64511,64514],{"class":31,"line":17001},[29,64504,51470],{"class":309},[29,64506,51740],{"class":51429},[29,64508,53615],{"class":35},[29,64510,355],{"class":309},[29,64512,64513],{"class":103},"\"tab-content\"",[29,64515,51436],{"class":309},[29,64517,64518,64520,64522,64524,64526,64529,64531,64533,64535,64537,64540,64542,64544,64546,64549,64551],{"class":31,"line":17006},[29,64519,55363],{"class":309},[29,64521,51740],{"class":51429},[29,64523,53615],{"class":35},[29,64525,355],{"class":309},[29,64527,64528],{"class":103},"\"item active\"",[29,64530,61181],{"class":309},[29,64532,1638],{"class":51429},[29,64534,55368],{"class":35},[29,64536,355],{"class":309},[29,64538,64539],{"class":103},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[29,64541,55376],{"class":35},[29,64543,355],{"class":309},[29,64545,7827],{"class":103},[29,64547,64548],{"class":309}," \u002F>\u003C\u002F",[29,64550,51740],{"class":51429},[29,64552,51436],{"class":309},[29,64554,64555,64557,64559,64561,64563,64565,64567,64569,64571,64573,64576,64578,64580,64582,64584,64586],{"class":31,"line":17020},[29,64556,55363],{"class":309},[29,64558,51740],{"class":51429},[29,64560,53615],{"class":35},[29,64562,355],{"class":309},[29,64564,62752],{"class":103},[29,64566,61181],{"class":309},[29,64568,1638],{"class":51429},[29,64570,55368],{"class":35},[29,64572,355],{"class":309},[29,64574,64575],{"class":103},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[29,64577,55376],{"class":35},[29,64579,355],{"class":309},[29,64581,7827],{"class":103},[29,64583,64548],{"class":309},[29,64585,51740],{"class":51429},[29,64587,51436],{"class":309},[29,64589,64590,64592,64594,64596,64598,64600,64602,64604,64606,64608,64611,64613,64615,64617,64619,64621],{"class":31,"line":17025},[29,64591,55363],{"class":309},[29,64593,51740],{"class":51429},[29,64595,53615],{"class":35},[29,64597,355],{"class":309},[29,64599,62752],{"class":103},[29,64601,61181],{"class":309},[29,64603,1638],{"class":51429},[29,64605,55368],{"class":35},[29,64607,355],{"class":309},[29,64609,64610],{"class":103},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[29,64612,55376],{"class":35},[29,64614,355],{"class":309},[29,64616,7827],{"class":103},[29,64618,64548],{"class":309},[29,64620,51740],{"class":51429},[29,64622,51436],{"class":309},[29,64624,64625,64627,64629,64631,64633,64635,64637,64639,64641,64643,64646,64648,64650,64652,64654,64656],{"class":31,"line":17030},[29,64626,55363],{"class":309},[29,64628,51740],{"class":51429},[29,64630,53615],{"class":35},[29,64632,355],{"class":309},[29,64634,62752],{"class":103},[29,64636,61181],{"class":309},[29,64638,1638],{"class":51429},[29,64640,55368],{"class":35},[29,64642,355],{"class":309},[29,64644,64645],{"class":103},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[29,64647,55376],{"class":35},[29,64649,355],{"class":309},[29,64651,7827],{"class":103},[29,64653,64548],{"class":309},[29,64655,51740],{"class":51429},[29,64657,51436],{"class":309},[29,64659,64660,64662,64664,64666,64668,64670,64672,64674,64676,64678,64681,64683,64685,64687,64689,64691],{"class":31,"line":17044},[29,64661,55363],{"class":309},[29,64663,51740],{"class":51429},[29,64665,53615],{"class":35},[29,64667,355],{"class":309},[29,64669,62752],{"class":103},[29,64671,61181],{"class":309},[29,64673,1638],{"class":51429},[29,64675,55368],{"class":35},[29,64677,355],{"class":309},[29,64679,64680],{"class":103},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[29,64682,55376],{"class":35},[29,64684,355],{"class":309},[29,64686,7827],{"class":103},[29,64688,64548],{"class":309},[29,64690,51740],{"class":51429},[29,64692,51436],{"class":309},[29,64694,64695,64697,64699],{"class":31,"line":17056},[29,64696,51905],{"class":309},[29,64698,51740],{"class":51429},[29,64700,51436],{"class":309},[29,64702,64703,64705,64707],{"class":31,"line":17061},[29,64704,52546],{"class":309},[29,64706,51740],{"class":51429},[29,64708,51436],{"class":309},[29,64710,64711,64713,64715],{"class":31,"line":17074},[29,64712,52273],{"class":309},[29,64714,51942],{"class":51429},[29,64716,51436],{"class":309},[29,64718,64719],{"class":31,"line":17079},[29,64720,64721],{"class":367},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[29,64723,64724],{"class":31,"line":17084},[29,64725,64726],{"class":367},"    \u002F\u002F 1.1 获取 a 元素 \n",[29,64728,64729,64731,64734,64736,64738,64740,64742,64745],{"class":31,"line":17089},[29,64730,11396],{"class":305},[29,64732,64733],{"class":39}," as",[29,64735,13739],{"class":305},[29,64737,54525],{"class":309},[29,64739,55810],{"class":35},[29,64741,310],{"class":309},[29,64743,64744],{"class":103},"'.tab-nav a'",[29,64746,316],{"class":309},[29,64748,64749],{"class":31,"line":17102},[29,64750,64751],{"class":367},"    \u002F\u002F console.log(as) \n",[29,64753,64754,64756,64758,64760,64762,64764,64766,64768,64770,64773,64775,64777,64779],{"class":31,"line":17107},[29,64755,3376],{"class":305},[29,64757,1834],{"class":309},[29,64759,51976],{"class":305},[29,64761,9613],{"class":309},[29,64763,355],{"class":305},[29,64765,4268],{"class":39},[29,64767,9620],{"class":309},[29,64769,1218],{"class":305},[29,64771,64772],{"class":309}," as.",[29,64774,52097],{"class":39},[29,64776,3389],{"class":309},[29,64778,2467],{"class":305},[29,64780,12617],{"class":309},[29,64782,64783],{"class":31,"line":32762},[29,64784,64785],{"class":367},"      \u002F\u002F console.log(as[i])\n",[29,64787,64788],{"class":31,"line":32768},[29,64789,64790],{"class":367},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[29,64792,64793,64796,64798,64800,64803,64805,64807],{"class":31,"line":32774},[29,64794,64795],{"class":309},"      as[i].",[29,64797,57942],{"class":35},[29,64799,310],{"class":309},[29,64801,64802],{"class":103},"'mouseenter'",[29,64804,12610],{"class":309},[29,64806,54578],{"class":305},[29,64808,54581],{"class":309},[29,64810,64811],{"class":31,"line":32780},[29,64812,64813],{"class":367},"        \u002F\u002F console.log('鼠标经过')\n",[29,64815,64816],{"class":31,"line":32786},[29,64817,64818],{"class":367},"        \u002F\u002F 排他思想  \n",[29,64820,64821],{"class":31,"line":32797},[29,64822,64823],{"class":367},"        \u002F\u002F 干掉别人 移除类active\n",[29,64825,64826,64828,64830,64832,64835,64837,64839,64841,64844],{"class":31,"line":32803},[29,64827,52054],{"class":309},[29,64829,54528],{"class":35},[29,64831,310],{"class":309},[29,64833,64834],{"class":103},"'.tab-nav .active'",[29,64836,57132],{"class":309},[29,64838,57135],{"class":35},[29,64840,310],{"class":309},[29,64842,64843],{"class":103},"'active'",[29,64845,316],{"class":309},[29,64847,64848],{"class":31,"line":32823},[29,64849,64850],{"class":367},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[29,64852,64853,64856,64859,64861,64863,64865],{"class":31,"line":32829},[29,64854,64855],{"class":39},"        this",[29,64857,64858],{"class":309},".classList.",[29,64860,5509],{"class":35},[29,64862,310],{"class":309},[29,64864,64843],{"class":103},[29,64866,316],{"class":309},[29,64868,64869],{"class":31,"line":32840},[29,64870,2575],{"emptyLinePlaceholder":233},[29,64872,64873],{"class":31,"line":32846},[29,64874,64875],{"class":367},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[29,64877,64878],{"class":31,"line":32852},[29,64879,64880],{"class":367},"        \u002F\u002F 干掉别人\n",[29,64882,64883,64885,64887,64889,64892,64894,64896,64898,64900],{"class":31,"line":32858},[29,64884,52054],{"class":309},[29,64886,54528],{"class":35},[29,64888,310],{"class":309},[29,64890,64891],{"class":103},"'.tab-content .active'",[29,64893,57132],{"class":309},[29,64895,57135],{"class":35},[29,64897,310],{"class":309},[29,64899,64843],{"class":103},[29,64901,316],{"class":309},[29,64903,64904],{"class":31,"line":32864},[29,64905,64906],{"class":367},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[29,64908,64909,64911,64913,64915,64918,64920,64922,64924,64926,64928,64930,64932,64934],{"class":31,"line":32870},[29,64910,52054],{"class":309},[29,64912,54528],{"class":35},[29,64914,310],{"class":309},[29,64916,64917],{"class":103},"`.tab-content .item:nth-child(${",[29,64919,749],{"class":309},[29,64921,45695],{"class":305},[29,64923,25247],{"class":39},[29,64925,57161],{"class":103},[29,64927,57132],{"class":309},[29,64929,5509],{"class":35},[29,64931,310],{"class":309},[29,64933,64843],{"class":103},[29,64935,316],{"class":309},[29,64937,64938],{"class":31,"line":32876},[29,64939,2575],{"emptyLinePlaceholder":233},[29,64941,64942],{"class":31,"line":32882},[29,64943,64944],{"class":309},"      })\n",[29,64946,64947],{"class":31,"line":32902},[29,64948,2362],{"class":309},[29,64950,64951,64953,64955],{"class":31,"line":32908},[29,64952,52546],{"class":309},[29,64954,51942],{"class":51429},[29,64956,51436],{"class":309},[29,64958,64959,64961,64963],{"class":31,"line":32924},[29,64960,51914],{"class":309},[29,64962,51929],{"class":51429},[29,64964,51436],{"class":309},[29,64966,64967],{"class":31,"line":32930},[29,64968,2575],{"emptyLinePlaceholder":233},[29,64970,64971,64973,64975],{"class":31,"line":32944},[29,64972,51914],{"class":309},[29,64974,50764],{"class":51429},[29,64976,51436],{"class":309},[171,64978,64979],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[171,64981,64982],{},"在监听事件中，this指向的就是他的调用者",[171,64984,64985],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[171,64987,53849],{},[171,64989,64990],{},"(function () {",[171,64992,64993],{},"const list = document.querySelector('.xtx-elevator-list')",[171,64995,64996],{},"list.addEventListener('click', function (e) {",[171,64998,64999],{},"if (e.target.tagName === 'A') {",[171,65001,65002],{},"\u002F\u002F 排他思想",[171,65004,65005],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[171,65007,65008],{},"const old = document.querySelector('.xtx-elevator-list .active')",[171,65010,65011],{},"\u002F\u002F console.log(old);",[171,65013,65014],{},"\u002F\u002F 判断",[171,65016,65017],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[171,65019,65020],{},"if (old) old.classList.remove('active')",[171,65022,65023],{},"e.target.classList.add('active')",[171,65025,1254],{},[171,65027,52593],{},[171,65029,65030],{},"})();",[275,65032,65034],{"id":65033},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[19,65036,65038],{"className":50762,"code":65037,"language":50764,"meta":24,"style":24},"\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",[26,65039,65040,65050,65054,65062,65066,65080,65094,65106,65114,65120,65130,65140,65144,65148,65155,65167,65178,65195,65208,65222,65232,65236,65240,65247,65258,65276,65286,65298,65302,65306,65313,65330,65341,65353,65357,65361,65368,65380,65384,65392,65400,65404,65412,65420,65428,65443,65487,65495,65508,65521,65534,65542,65550,65558,65586,65594,65606,65619,65632,65640,65648,65656,65682,65690,65703,65715,65728,65736,65744,65752,65778,65786,65799,65811,65824,65832,65840,65848,65853,65873,65878,65898,65903,65920,65925,65933,65938,65967,65980,65984,65988,65993,65997,66025,66030,66047,66052,66057,66062,66067,66093,66097,66101,66109,66117,66121],{"__ignoreMap":24},[29,65041,65042,65044,65046,65048],{"class":31,"line":32},[29,65043,51426],{"class":309},[29,65045,51430],{"class":51429},[29,65047,51433],{"class":35},[29,65049,51436],{"class":309},[29,65051,65052],{"class":31,"line":43},[29,65053,2575],{"emptyLinePlaceholder":233},[29,65055,65056,65058,65060],{"class":31,"line":51},[29,65057,1218],{"class":309},[29,65059,50764],{"class":51429},[29,65061,51436],{"class":309},[29,65063,65064],{"class":31,"line":59},[29,65065,2575],{"emptyLinePlaceholder":233},[29,65067,65068,65070,65072,65074,65076,65078],{"class":31,"line":67},[29,65069,1218],{"class":309},[29,65071,51463],{"class":51429},[29,65073,51445],{"class":35},[29,65075,355],{"class":309},[29,65077,51450],{"class":103},[29,65079,51436],{"class":309},[29,65081,65082,65084,65086,65088,65090,65092],{"class":31,"line":75},[29,65083,52273],{"class":309},[29,65085,51473],{"class":51429},[29,65087,51476],{"class":35},[29,65089,355],{"class":309},[29,65091,51481],{"class":103},[29,65093,51436],{"class":309},[29,65095,65096,65098,65100,65102,65104],{"class":31,"line":83},[29,65097,52273],{"class":309},[29,65099,51536],{"class":51429},[29,65101,55443],{"class":309},[29,65103,51536],{"class":51429},[29,65105,51436],{"class":309},[29,65107,65108,65110,65112],{"class":31,"line":158},[29,65109,52273],{"class":309},[29,65111,223],{"class":51429},[29,65113,51436],{"class":309},[29,65115,65116,65118],{"class":31,"line":166},[29,65117,6578],{"class":51429},[29,65119,15747],{"class":309},[29,65121,65122,65124,65126,65128],{"class":31,"line":1505},[29,65123,54835],{"class":39},[29,65125,51566],{"class":309},[29,65127,499],{"class":39},[29,65129,1468],{"class":309},[29,65131,65132,65134,65136,65138],{"class":31,"line":1788},[29,65133,54824],{"class":39},[29,65135,51566],{"class":309},[29,65137,499],{"class":39},[29,65139,1468],{"class":309},[29,65141,65142],{"class":31,"line":1793},[29,65143,2362],{"class":309},[29,65145,65146],{"class":31,"line":1799},[29,65147,2575],{"emptyLinePlaceholder":233},[29,65149,65150,65153],{"class":31,"line":1804},[29,65151,65152],{"class":51429},"    table",[29,65154,15747],{"class":309},[29,65156,65157,65160,65162,65165],{"class":31,"line":1818},[29,65158,65159],{"class":39},"      border-collapse",[29,65161,51566],{"class":309},[29,65163,65164],{"class":39},"collapse",[29,65166,1468],{"class":309},[29,65168,65169,65172,65174,65176],{"class":31,"line":1823},[29,65170,65171],{"class":39},"      border-spacing",[29,65173,51566],{"class":309},[29,65175,499],{"class":39},[29,65177,1468],{"class":309},[29,65179,65180,65182,65184,65186,65188,65190,65193],{"class":31,"line":1829},[29,65181,62106],{"class":39},[29,65183,51566],{"class":309},[29,65185,525],{"class":39},[29,65187,51621],{"class":305},[29,65189,51650],{"class":39},[29,65191,65192],{"class":39}," #c0c0c0",[29,65194,1468],{"class":309},[29,65196,65197,65199,65201,65204,65206],{"class":31,"line":1850},[29,65198,54900],{"class":39},[29,65200,51566],{"class":309},[29,65202,65203],{"class":39},"500",[29,65205,51621],{"class":305},[29,65207,1468],{"class":309},[29,65209,65210,65212,65214,65216,65218,65220],{"class":31,"line":1855},[29,65211,54835],{"class":39},[29,65213,51566],{"class":309},[29,65215,619],{"class":39},[29,65217,51621],{"class":305},[29,65219,51685],{"class":39},[29,65221,1468],{"class":309},[29,65223,65224,65226,65228,65230],{"class":31,"line":1869},[29,65225,57415],{"class":39},[29,65227,51566],{"class":309},[29,65229,51721],{"class":39},[29,65231,1468],{"class":309},[29,65233,65234],{"class":31,"line":1874},[29,65235,2362],{"class":309},[29,65237,65238],{"class":31,"line":1903},[29,65239,2575],{"emptyLinePlaceholder":233},[29,65241,65242,65245],{"class":31,"line":1908},[29,65243,65244],{"class":51429},"    th",[29,65246,15747],{"class":309},[29,65248,65249,65251,65253,65256],{"class":31,"line":1925},[29,65250,55013],{"class":39},[29,65252,51566],{"class":309},[29,65254,65255],{"class":39},"#09c",[29,65257,1468],{"class":309},[29,65259,65260,65263,65265,65267,65269,65271,65274],{"class":31,"line":1930},[29,65261,65262],{"class":39},"      font",[29,65264,51566],{"class":309},[29,65266,62468],{"class":39},[29,65268,64202],{"class":39},[29,65270,51621],{"class":305},[29,65272,65273],{"class":103}," \"微软雅黑\"",[29,65275,1468],{"class":309},[29,65277,65278,65280,65282,65284],{"class":31,"line":1935},[29,65279,57545],{"class":39},[29,65281,51566],{"class":309},[29,65283,60971],{"class":39},[29,65285,1468],{"class":309},[29,65287,65288,65290,65292,65294,65296],{"class":31,"line":1940},[29,65289,54914],{"class":39},[29,65291,51566],{"class":309},[29,65293,1108],{"class":39},[29,65295,51621],{"class":305},[29,65297,1468],{"class":309},[29,65299,65300],{"class":31,"line":1954},[29,65301,2362],{"class":309},[29,65303,65304],{"class":31,"line":1959},[29,65305,2575],{"emptyLinePlaceholder":233},[29,65307,65308,65311],{"class":31,"line":2752},[29,65309,65310],{"class":51429},"    td",[29,65312,15747],{"class":309},[29,65314,65315,65317,65319,65321,65323,65325,65328],{"class":31,"line":2766},[29,65316,62106],{"class":39},[29,65318,51566],{"class":309},[29,65320,525],{"class":39},[29,65322,51621],{"class":305},[29,65324,51650],{"class":39},[29,65326,65327],{"class":39}," #d0d0d0",[29,65329,1468],{"class":309},[29,65331,65332,65334,65336,65339],{"class":31,"line":2774},[29,65333,57545],{"class":39},[29,65335,51566],{"class":309},[29,65337,65338],{"class":39},"#404060",[29,65340,1468],{"class":309},[29,65342,65343,65345,65347,65349,65351],{"class":31,"line":2779},[29,65344,54824],{"class":39},[29,65346,51566],{"class":309},[29,65348,754],{"class":39},[29,65350,51621],{"class":305},[29,65352,1468],{"class":309},[29,65354,65355],{"class":31,"line":2785},[29,65356,2362],{"class":309},[29,65358,65359],{"class":31,"line":2791},[29,65360,2575],{"emptyLinePlaceholder":233},[29,65362,65363,65366],{"class":31,"line":2796},[29,65364,65365],{"class":35},"    .allCheck",[29,65367,15747],{"class":309},[29,65369,65370,65372,65374,65376,65378],{"class":31,"line":8123},[29,65371,54900],{"class":39},[29,65373,51566],{"class":309},[29,65375,920],{"class":39},[29,65377,51621],{"class":305},[29,65379,1468],{"class":309},[29,65381,65382],{"class":31,"line":8147},[29,65383,2362],{"class":309},[29,65385,65386,65388,65390],{"class":31,"line":8152},[29,65387,52546],{"class":309},[29,65389,223],{"class":51429},[29,65391,51436],{"class":309},[29,65393,65394,65396,65398],{"class":31,"line":8158},[29,65395,51914],{"class":309},[29,65397,51463],{"class":51429},[29,65399,51436],{"class":309},[29,65401,65402],{"class":31,"line":8185},[29,65403,2575],{"emptyLinePlaceholder":233},[29,65405,65406,65408,65410],{"class":31,"line":8190},[29,65407,1218],{"class":309},[29,65409,51929],{"class":51429},[29,65411,51436],{"class":309},[29,65413,65414,65416,65418],{"class":31,"line":8196},[29,65415,52273],{"class":309},[29,65417,445],{"class":51429},[29,65419,51436],{"class":309},[29,65421,65422,65424,65426],{"class":31,"line":8208},[29,65423,51470],{"class":309},[29,65425,451],{"class":51429},[29,65427,51436],{"class":309},[29,65429,65430,65432,65434,65436,65438,65441],{"class":31,"line":8220},[29,65431,55363],{"class":309},[29,65433,454],{"class":51429},[29,65435,53615],{"class":35},[29,65437,355],{"class":309},[29,65439,65440],{"class":103},"\"allCheck\"",[29,65442,51436],{"class":309},[29,65444,65445,65447,65449,65451,65453,65455,65457,65459,65461,65463,65465,65468,65471,65473,65475,65477,65480,65483,65485],{"class":31,"line":8232},[29,65446,55431],{"class":309},[29,65448,53950],{"class":51429},[29,65450,53953],{"class":35},[29,65452,355],{"class":309},[29,65454,53958],{"class":103},[29,65456,15095],{"class":35},[29,65458,355],{"class":309},[29,65460,7827],{"class":103},[29,65462,15134],{"class":35},[29,65464,355],{"class":309},[29,65466,65467],{"class":103},"\"checkAll\"",[29,65469,65470],{"class":309},"> \u003C",[29,65472,29],{"class":51429},[29,65474,53615],{"class":35},[29,65476,355],{"class":309},[29,65478,65479],{"class":103},"\"all\"",[29,65481,65482],{"class":309},">全选\u003C\u002F",[29,65484,29],{"class":51429},[29,65486,51436],{"class":309},[29,65488,65489,65491,65493],{"class":31,"line":9891},[29,65490,55536],{"class":309},[29,65492,454],{"class":51429},[29,65494,51436],{"class":309},[29,65496,65497,65499,65501,65504,65506],{"class":31,"line":9916},[29,65498,55363],{"class":309},[29,65500,454],{"class":51429},[29,65502,65503],{"class":309},">商品\u003C\u002F",[29,65505,454],{"class":51429},[29,65507,51436],{"class":309},[29,65509,65510,65512,65514,65517,65519],{"class":31,"line":9939},[29,65511,55363],{"class":309},[29,65513,454],{"class":51429},[29,65515,65516],{"class":309},">商家\u003C\u002F",[29,65518,454],{"class":51429},[29,65520,51436],{"class":309},[29,65522,65523,65525,65527,65530,65532],{"class":31,"line":9963},[29,65524,55363],{"class":309},[29,65526,454],{"class":51429},[29,65528,65529],{"class":309},">价格\u003C\u002F",[29,65531,454],{"class":51429},[29,65533,51436],{"class":309},[29,65535,65536,65538,65540],{"class":31,"line":9968},[29,65537,51905],{"class":309},[29,65539,451],{"class":51429},[29,65541,51436],{"class":309},[29,65543,65544,65546,65548],{"class":31,"line":9973},[29,65545,51470],{"class":309},[29,65547,451],{"class":51429},[29,65549,51436],{"class":309},[29,65551,65552,65554,65556],{"class":31,"line":9978},[29,65553,55363],{"class":309},[29,65555,497],{"class":51429},[29,65557,51436],{"class":309},[29,65559,65560,65562,65564,65566,65568,65570,65572,65574,65577,65579,65581,65584],{"class":31,"line":9987},[29,65561,55431],{"class":309},[29,65563,53950],{"class":51429},[29,65565,53953],{"class":35},[29,65567,355],{"class":309},[29,65569,53958],{"class":103},[29,65571,15095],{"class":35},[29,65573,355],{"class":309},[29,65575,65576],{"class":103},"\"check\"",[29,65578,53615],{"class":35},[29,65580,355],{"class":309},[29,65582,65583],{"class":103},"\"ck\"",[29,65585,51436],{"class":309},[29,65587,65588,65590,65592],{"class":31,"line":9992},[29,65589,55536],{"class":309},[29,65591,497],{"class":51429},[29,65593,51436],{"class":309},[29,65595,65596,65598,65600,65602,65604],{"class":31,"line":9998},[29,65597,55363],{"class":309},[29,65599,497],{"class":51429},[29,65601,61302],{"class":309},[29,65603,497],{"class":51429},[29,65605,51436],{"class":309},[29,65607,65608,65610,65612,65615,65617],{"class":31,"line":10019},[29,65609,55363],{"class":309},[29,65611,497],{"class":51429},[29,65613,65614],{"class":309},">小米\u003C\u002F",[29,65616,497],{"class":51429},[29,65618,51436],{"class":309},[29,65620,65621,65623,65625,65628,65630],{"class":31,"line":10025},[29,65622,55363],{"class":309},[29,65624,497],{"class":51429},[29,65626,65627],{"class":309},">￥1999\u003C\u002F",[29,65629,497],{"class":51429},[29,65631,51436],{"class":309},[29,65633,65634,65636,65638],{"class":31,"line":10039},[29,65635,51905],{"class":309},[29,65637,451],{"class":51429},[29,65639,51436],{"class":309},[29,65641,65642,65644,65646],{"class":31,"line":10045},[29,65643,51470],{"class":309},[29,65645,451],{"class":51429},[29,65647,51436],{"class":309},[29,65649,65650,65652,65654],{"class":31,"line":10072},[29,65651,55363],{"class":309},[29,65653,497],{"class":51429},[29,65655,51436],{"class":309},[29,65657,65658,65660,65662,65664,65666,65668,65670,65672,65674,65676,65678,65680],{"class":31,"line":10081},[29,65659,55431],{"class":309},[29,65661,53950],{"class":51429},[29,65663,53953],{"class":35},[29,65665,355],{"class":309},[29,65667,53958],{"class":103},[29,65669,15095],{"class":35},[29,65671,355],{"class":309},[29,65673,65576],{"class":103},[29,65675,53615],{"class":35},[29,65677,355],{"class":309},[29,65679,65583],{"class":103},[29,65681,51436],{"class":309},[29,65683,65684,65686,65688],{"class":31,"line":10087},[29,65685,55536],{"class":309},[29,65687,497],{"class":51429},[29,65689,51436],{"class":309},[29,65691,65692,65694,65696,65699,65701],{"class":31,"line":10095},[29,65693,55363],{"class":309},[29,65695,497],{"class":51429},[29,65697,65698],{"class":309},">小米净水器\u003C\u002F",[29,65700,497],{"class":51429},[29,65702,51436],{"class":309},[29,65704,65705,65707,65709,65711,65713],{"class":31,"line":10100},[29,65706,55363],{"class":309},[29,65708,497],{"class":51429},[29,65710,65614],{"class":309},[29,65712,497],{"class":51429},[29,65714,51436],{"class":309},[29,65716,65717,65719,65721,65724,65726],{"class":31,"line":16779},[29,65718,55363],{"class":309},[29,65720,497],{"class":51429},[29,65722,65723],{"class":309},">￥4999\u003C\u002F",[29,65725,497],{"class":51429},[29,65727,51436],{"class":309},[29,65729,65730,65732,65734],{"class":31,"line":16785},[29,65731,51905],{"class":309},[29,65733,451],{"class":51429},[29,65735,51436],{"class":309},[29,65737,65738,65740,65742],{"class":31,"line":16808},[29,65739,51470],{"class":309},[29,65741,451],{"class":51429},[29,65743,51436],{"class":309},[29,65745,65746,65748,65750],{"class":31,"line":16814},[29,65747,55363],{"class":309},[29,65749,497],{"class":51429},[29,65751,51436],{"class":309},[29,65753,65754,65756,65758,65760,65762,65764,65766,65768,65770,65772,65774,65776],{"class":31,"line":16837},[29,65755,55431],{"class":309},[29,65757,53950],{"class":51429},[29,65759,53953],{"class":35},[29,65761,355],{"class":309},[29,65763,53958],{"class":103},[29,65765,15095],{"class":35},[29,65767,355],{"class":309},[29,65769,65576],{"class":103},[29,65771,53615],{"class":35},[29,65773,355],{"class":309},[29,65775,65583],{"class":103},[29,65777,51436],{"class":309},[29,65779,65780,65782,65784],{"class":31,"line":16851},[29,65781,55536],{"class":309},[29,65783,497],{"class":51429},[29,65785,51436],{"class":309},[29,65787,65788,65790,65792,65795,65797],{"class":31,"line":16871},[29,65789,55363],{"class":309},[29,65791,497],{"class":51429},[29,65793,65794],{"class":309},">小米电视\u003C\u002F",[29,65796,497],{"class":51429},[29,65798,51436],{"class":309},[29,65800,65801,65803,65805,65807,65809],{"class":31,"line":16877},[29,65802,55363],{"class":309},[29,65804,497],{"class":51429},[29,65806,65614],{"class":309},[29,65808,497],{"class":51429},[29,65810,51436],{"class":309},[29,65812,65813,65815,65817,65820,65822],{"class":31,"line":16888},[29,65814,55363],{"class":309},[29,65816,497],{"class":51429},[29,65818,65819],{"class":309},">￥5999\u003C\u002F",[29,65821,497],{"class":51429},[29,65823,51436],{"class":309},[29,65825,65826,65828,65830],{"class":31,"line":16911},[29,65827,51905],{"class":309},[29,65829,451],{"class":51429},[29,65831,51436],{"class":309},[29,65833,65834,65836,65838],{"class":31,"line":16933},[29,65835,52546],{"class":309},[29,65837,445],{"class":51429},[29,65839,51436],{"class":309},[29,65841,65842,65844,65846],{"class":31,"line":16938},[29,65843,52273],{"class":309},[29,65845,51942],{"class":51429},[29,65847,51436],{"class":309},[29,65849,65850],{"class":31,"line":16944},[29,65851,65852],{"class":367},"    \u002F\u002F 1. 获取大复选框\n",[29,65854,65855,65857,65860,65862,65864,65866,65868,65871],{"class":31,"line":16958},[29,65856,11396],{"class":305},[29,65858,65859],{"class":39}," checkAll",[29,65861,13739],{"class":305},[29,65863,54525],{"class":309},[29,65865,54528],{"class":35},[29,65867,310],{"class":309},[29,65869,65870],{"class":103},"'#checkAll'",[29,65872,316],{"class":309},[29,65874,65875],{"class":31,"line":16971},[29,65876,65877],{"class":367},"    \u002F\u002F 2. 获取所有的小复选框\n",[29,65879,65880,65882,65885,65887,65889,65891,65893,65896],{"class":31,"line":16976},[29,65881,11396],{"class":305},[29,65883,65884],{"class":39}," cks",[29,65886,13739],{"class":305},[29,65888,54525],{"class":309},[29,65890,55810],{"class":35},[29,65892,310],{"class":309},[29,65894,65895],{"class":103},"'.ck'",[29,65897,316],{"class":309},[29,65899,65900],{"class":31,"line":16990},[29,65901,65902],{"class":367},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[29,65904,65905,65908,65910,65912,65914,65916,65918],{"class":31,"line":16995},[29,65906,65907],{"class":309},"    checkAll.",[29,65909,57942],{"class":35},[29,65911,310],{"class":309},[29,65913,57947],{"class":103},[29,65915,12610],{"class":309},[29,65917,54578],{"class":305},[29,65919,54581],{"class":309},[29,65921,65922],{"class":31,"line":17001},[29,65923,65924],{"class":367},"      \u002F\u002F 得到当前大复选框的选中状态\n",[29,65926,65927,65930],{"class":31,"line":17006},[29,65928,65929],{"class":367},"      \u002F\u002F console.log(checkAll.checked)",[29,65931,65932],{"class":367},"  \u002F\u002F 得到 是 true 或者是 false\n",[29,65934,65935],{"class":31,"line":17020},[29,65936,65937],{"class":367},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[29,65939,65940,65942,65944,65946,65948,65950,65952,65954,65956,65959,65961,65963,65965],{"class":31,"line":17025},[29,65941,52413],{"class":305},[29,65943,1834],{"class":309},[29,65945,51976],{"class":305},[29,65947,9613],{"class":309},[29,65949,355],{"class":305},[29,65951,4268],{"class":39},[29,65953,9620],{"class":309},[29,65955,1218],{"class":305},[29,65957,65958],{"class":309}," cks.",[29,65960,52097],{"class":39},[29,65962,3389],{"class":309},[29,65964,2467],{"class":305},[29,65966,12617],{"class":309},[29,65968,65969,65972,65974,65977],{"class":31,"line":17030},[29,65970,65971],{"class":309},"        cks[i].checked ",[29,65973,355],{"class":305},[29,65975,65976],{"class":39}," this",[29,65978,65979],{"class":309},".checked\n",[29,65981,65982],{"class":31,"line":17044},[29,65983,52527],{"class":309},[29,65985,65986],{"class":31,"line":17056},[29,65987,33590],{"class":309},[29,65989,65990],{"class":31,"line":17061},[29,65991,65992],{"class":367},"    \u002F\u002F 5. 小复选框控制大复选框\n",[29,65994,65995],{"class":31,"line":17074},[29,65996,2575],{"emptyLinePlaceholder":233},[29,65998,65999,66001,66003,66005,66007,66009,66011,66013,66015,66017,66019,66021,66023],{"class":31,"line":17079},[29,66000,3376],{"class":305},[29,66002,1834],{"class":309},[29,66004,51976],{"class":305},[29,66006,9613],{"class":309},[29,66008,355],{"class":305},[29,66010,4268],{"class":39},[29,66012,9620],{"class":309},[29,66014,1218],{"class":305},[29,66016,65958],{"class":309},[29,66018,52097],{"class":39},[29,66020,3389],{"class":309},[29,66022,2467],{"class":305},[29,66024,12617],{"class":309},[29,66026,66027],{"class":31,"line":17084},[29,66028,66029],{"class":367},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[29,66031,66032,66035,66037,66039,66041,66043,66045],{"class":31,"line":17089},[29,66033,66034],{"class":309},"      cks[i].",[29,66036,57942],{"class":35},[29,66038,310],{"class":309},[29,66040,57947],{"class":103},[29,66042,12610],{"class":309},[29,66044,54578],{"class":305},[29,66046,54581],{"class":309},[29,66048,66049],{"class":31,"line":17102},[29,66050,66051],{"class":367},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[29,66053,66054],{"class":31,"line":17107},[29,66055,66056],{"class":367},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[29,66058,66059],{"class":31,"line":32762},[29,66060,66061],{"class":367},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[29,66063,66064],{"class":31,"line":32768},[29,66065,66066],{"class":367},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[29,66068,66069,66072,66074,66076,66078,66080,66083,66085,66087,66089,66091],{"class":31,"line":32774},[29,66070,66071],{"class":309},"        checkAll.checked ",[29,66073,355],{"class":305},[29,66075,54525],{"class":309},[29,66077,55810],{"class":35},[29,66079,310],{"class":309},[29,66081,66082],{"class":103},"'.ck:checked'",[29,66084,30955],{"class":309},[29,66086,52097],{"class":39},[29,66088,58035],{"class":305},[29,66090,65958],{"class":309},[29,66092,55960],{"class":39},[29,66094,66095],{"class":31,"line":32780},[29,66096,64944],{"class":309},[29,66098,66099],{"class":31,"line":32786},[29,66100,2362],{"class":309},[29,66102,66103,66105,66107],{"class":31,"line":32797},[29,66104,52546],{"class":309},[29,66106,51942],{"class":51429},[29,66108,51436],{"class":309},[29,66110,66111,66113,66115],{"class":31,"line":32803},[29,66112,51914],{"class":309},[29,66114,51929],{"class":51429},[29,66116,51436],{"class":309},[29,66118,66119],{"class":31,"line":32823},[29,66120,2575],{"emptyLinePlaceholder":233},[29,66122,66123,66125,66127],{"class":31,"line":32829},[29,66124,51914],{"class":309},[29,66126,50764],{"class":51429},[29,66128,51436],{"class":309},[171,66130,66131],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[171,66133,66134],{},"用好之间比较得到的布尔值！！！",[171,66136,66137,66138,66141,66142,1834,66145,892,66147,66150],{},"在 JS 里访问的时候，",[26,66139,66140],{},"checkbox.checked"," 是一个 ",[457,66143,66144],{},"布尔值",[26,66146,1538],{},[26,66148,66149],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[171,66152,66153,66154,66157,66158],{},"HTML 的 ",[26,66155,66156],{},"checked=\"checked\""," 只是 ",[457,66159,66160,66161,66164],{},"初始值；JS 的 ",[26,66162,66163],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[171,66166,66167],{},"：checked是一个伪类选择器",[171,66169,66170],{},[1638,66171],{"alt":24,"src":66172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[171,66174,66175,66178],{},[66176,66177],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[171,66180,66181],{},[1638,66182],{"alt":24,"src":66183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66185,66187],{"id":66186},"_33-dom事件进阶","3.3 DOM事件进阶",[275,66189,66191],{"id":66190},"_331-事件流","3.3.1 事件流",[171,66193,66194],{},[1638,66195],{"alt":24,"src":66196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22173,66198,66200],{"id":66199},"_3311-事件捕获","3.3.1.1 事件捕获",[171,66202,66203],{},[1638,66204],{"alt":24,"src":66205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[19,66207,66209],{"className":50762,"code":66208,"language":50764,"meta":24,"style":24},"\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",[26,66210,66211,66221,66235,66239,66247,66261,66281,66293,66301,66308,66320,66332,66342,66346,66350,66357,66369,66381,66391,66395,66403,66411,66415,66423,66438,66457,66465,66473,66493,66513,66529,66540,66548,66565,66576,66584,66601,66612,66620,66628,66636,66640],{"__ignoreMap":24},[29,66212,66213,66215,66217,66219],{"class":31,"line":32},[29,66214,51426],{"class":309},[29,66216,51430],{"class":51429},[29,66218,51433],{"class":35},[29,66220,51436],{"class":309},[29,66222,66223,66225,66227,66229,66231,66233],{"class":31,"line":43},[29,66224,1218],{"class":309},[29,66226,50764],{"class":51429},[29,66228,51445],{"class":35},[29,66230,355],{"class":309},[29,66232,51450],{"class":103},[29,66234,51436],{"class":309},[29,66236,66237],{"class":31,"line":51},[29,66238,2575],{"emptyLinePlaceholder":233},[29,66240,66241,66243,66245],{"class":31,"line":59},[29,66242,1218],{"class":309},[29,66244,51463],{"class":51429},[29,66246,51436],{"class":309},[29,66248,66249,66251,66253,66255,66257,66259],{"class":31,"line":67},[29,66250,52273],{"class":309},[29,66252,51473],{"class":51429},[29,66254,51476],{"class":35},[29,66256,355],{"class":309},[29,66258,51481],{"class":103},[29,66260,51436],{"class":309},[29,66262,66263,66265,66267,66269,66271,66273,66275,66277,66279],{"class":31,"line":75},[29,66264,52273],{"class":309},[29,66266,51473],{"class":51429},[29,66268,15095],{"class":35},[29,66270,355],{"class":309},[29,66272,51520],{"class":103},[29,66274,51500],{"class":35},[29,66276,355],{"class":309},[29,66278,51527],{"class":103},[29,66280,51436],{"class":309},[29,66282,66283,66285,66287,66289,66291],{"class":31,"line":83},[29,66284,52273],{"class":309},[29,66286,51536],{"class":51429},[29,66288,51539],{"class":309},[29,66290,51536],{"class":51429},[29,66292,51436],{"class":309},[29,66294,66295,66297,66299],{"class":31,"line":158},[29,66296,52273],{"class":309},[29,66298,223],{"class":51429},[29,66300,51436],{"class":309},[29,66302,66303,66306],{"class":31,"line":166},[29,66304,66305],{"class":35},"    .father",[29,66307,15747],{"class":309},[29,66309,66310,66312,66314,66316,66318],{"class":31,"line":1505},[29,66311,54900],{"class":39},[29,66313,51566],{"class":309},[29,66315,65203],{"class":39},[29,66317,51621],{"class":305},[29,66319,1468],{"class":309},[29,66321,66322,66324,66326,66328,66330],{"class":31,"line":1788},[29,66323,54914],{"class":39},[29,66325,51566],{"class":309},[29,66327,65203],{"class":39},[29,66329,51621],{"class":305},[29,66331,1468],{"class":309},[29,66333,66334,66336,66338,66340],{"class":31,"line":1793},[29,66335,55013],{"class":39},[29,66337,51566],{"class":309},[29,66339,51774],{"class":39},[29,66341,1468],{"class":309},[29,66343,66344],{"class":31,"line":1799},[29,66345,2362],{"class":309},[29,66347,66348],{"class":31,"line":1804},[29,66349,2575],{"emptyLinePlaceholder":233},[29,66351,66352,66355],{"class":31,"line":1818},[29,66353,66354],{"class":35},"    .son",[29,66356,15747],{"class":309},[29,66358,66359,66361,66363,66365,66367],{"class":31,"line":1823},[29,66360,54900],{"class":39},[29,66362,51566],{"class":309},[29,66364,1898],{"class":39},[29,66366,51621],{"class":305},[29,66368,1468],{"class":309},[29,66370,66371,66373,66375,66377,66379],{"class":31,"line":1829},[29,66372,54914],{"class":39},[29,66374,51566],{"class":309},[29,66376,1898],{"class":39},[29,66378,51621],{"class":305},[29,66380,1468],{"class":309},[29,66382,66383,66385,66387,66389],{"class":31,"line":1850},[29,66384,55013],{"class":39},[29,66386,51566],{"class":309},[29,66388,55018],{"class":39},[29,66390,1468],{"class":309},[29,66392,66393],{"class":31,"line":1855},[29,66394,2362],{"class":309},[29,66396,66397,66399,66401],{"class":31,"line":1869},[29,66398,52546],{"class":309},[29,66400,223],{"class":51429},[29,66402,51436],{"class":309},[29,66404,66405,66407,66409],{"class":31,"line":1874},[29,66406,51914],{"class":309},[29,66408,51463],{"class":51429},[29,66410,51436],{"class":309},[29,66412,66413],{"class":31,"line":1903},[29,66414,2575],{"emptyLinePlaceholder":233},[29,66416,66417,66419,66421],{"class":31,"line":1908},[29,66418,1218],{"class":309},[29,66420,51929],{"class":51429},[29,66422,51436],{"class":309},[29,66424,66425,66427,66429,66431,66433,66436],{"class":31,"line":1925},[29,66426,52273],{"class":309},[29,66428,51740],{"class":51429},[29,66430,53615],{"class":35},[29,66432,355],{"class":309},[29,66434,66435],{"class":103},"\"father\"",[29,66437,51436],{"class":309},[29,66439,66440,66442,66444,66446,66448,66451,66453,66455],{"class":31,"line":1930},[29,66441,51470],{"class":309},[29,66443,51740],{"class":51429},[29,66445,53615],{"class":35},[29,66447,355],{"class":309},[29,66449,66450],{"class":103},"\"son\"",[29,66452,55443],{"class":309},[29,66454,51740],{"class":51429},[29,66456,51436],{"class":309},[29,66458,66459,66461,66463],{"class":31,"line":1935},[29,66460,52546],{"class":309},[29,66462,51740],{"class":51429},[29,66464,51436],{"class":309},[29,66466,66467,66469,66471],{"class":31,"line":1940},[29,66468,52273],{"class":309},[29,66470,51942],{"class":51429},[29,66472,51436],{"class":309},[29,66474,66475,66477,66480,66482,66484,66486,66488,66491],{"class":31,"line":1954},[29,66476,11396],{"class":305},[29,66478,66479],{"class":39}," fa",[29,66481,13739],{"class":305},[29,66483,54525],{"class":309},[29,66485,54528],{"class":35},[29,66487,310],{"class":309},[29,66489,66490],{"class":103},"'.father'",[29,66492,316],{"class":309},[29,66494,66495,66497,66500,66502,66504,66506,66508,66511],{"class":31,"line":1959},[29,66496,11396],{"class":305},[29,66498,66499],{"class":39}," son",[29,66501,13739],{"class":305},[29,66503,54525],{"class":309},[29,66505,54528],{"class":35},[29,66507,310],{"class":309},[29,66509,66510],{"class":103},"'.son'",[29,66512,316],{"class":309},[29,66514,66515,66517,66519,66521,66523,66525,66527],{"class":31,"line":2752},[29,66516,52536],{"class":309},[29,66518,57942],{"class":35},[29,66520,310],{"class":309},[29,66522,57947],{"class":103},[29,66524,12610],{"class":309},[29,66526,54578],{"class":305},[29,66528,54581],{"class":309},[29,66530,66531,66533,66535,66538],{"class":31,"line":2766},[29,66532,59054],{"class":35},[29,66534,310],{"class":309},[29,66536,66537],{"class":103},"'woshiu1'",[29,66539,316],{"class":309},[29,66541,66542,66544,66546],{"class":31,"line":2774},[29,66543,54664],{"class":309},[29,66545,1538],{"class":39},[29,66547,316],{"class":309},[29,66549,66550,66553,66555,66557,66559,66561,66563],{"class":31,"line":2779},[29,66551,66552],{"class":309},"    fa.",[29,66554,57942],{"class":35},[29,66556,310],{"class":309},[29,66558,57947],{"class":103},[29,66560,12610],{"class":309},[29,66562,54578],{"class":305},[29,66564,54581],{"class":309},[29,66566,66567,66569,66571,66574],{"class":31,"line":2785},[29,66568,59054],{"class":35},[29,66570,310],{"class":309},[29,66572,66573],{"class":103},"'1'",[29,66575,316],{"class":309},[29,66577,66578,66580,66582],{"class":31,"line":2791},[29,66579,54664],{"class":309},[29,66581,1538],{"class":39},[29,66583,316],{"class":309},[29,66585,66586,66589,66591,66593,66595,66597,66599],{"class":31,"line":2796},[29,66587,66588],{"class":309},"    son.",[29,66590,57942],{"class":35},[29,66592,310],{"class":309},[29,66594,57947],{"class":103},[29,66596,12610],{"class":309},[29,66598,54578],{"class":305},[29,66600,54581],{"class":309},[29,66602,66603,66605,66607,66610],{"class":31,"line":8123},[29,66604,59054],{"class":35},[29,66606,310],{"class":309},[29,66608,66609],{"class":103},"'2'",[29,66611,316],{"class":309},[29,66613,66614,66616,66618],{"class":31,"line":8147},[29,66615,54664],{"class":309},[29,66617,1538],{"class":39},[29,66619,316],{"class":309},[29,66621,66622,66624,66626],{"class":31,"line":8152},[29,66623,52546],{"class":309},[29,66625,51942],{"class":51429},[29,66627,51436],{"class":309},[29,66629,66630,66632,66634],{"class":31,"line":8158},[29,66631,51914],{"class":309},[29,66633,51929],{"class":51429},[29,66635,51436],{"class":309},[29,66637,66638],{"class":31,"line":8185},[29,66639,2575],{"emptyLinePlaceholder":233},[29,66641,66642,66644,66646],{"class":31,"line":8190},[29,66643,51914],{"class":309},[29,66645,50764],{"class":51429},[29,66647,51436],{"class":309},[171,66649,66650],{},[1638,66651],{"alt":24,"src":66652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[171,66654,66655],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22173,66657,66659],{"id":66658},"_3312-事件冒泡","3.3.1.2 事件冒泡",[171,66661,66662],{},[1638,66663],{"alt":24,"src":66664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[171,66666,66667],{},"反着来",[171,66669,66670],{},"注意是同名事件，比如都是‘click’",[22173,66672,66674],{"id":66673},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[171,66676,66677],{},[1638,66678],{"alt":24,"src":66679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22173,66681,66683],{"id":66682},"_3314-解绑事件","3.3.1.4 解绑事件",[171,66685,66686],{},[1638,66687],{"alt":24,"src":66688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[171,66690,66691],{},[1638,66692],{"alt":24,"src":66693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22173,66695,66697],{"id":66696},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[259,66699,66700],{},[178,66701,66702],{},"事件类型的区别",[171,66704,66705],{},[1638,66706],{"alt":24,"src":66707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[171,66709,66710],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[259,66712,66713],{"start":43},[178,66714,66715],{},"注册事件的区别",[171,66717,66718],{},[1638,66719],{"alt":24,"src":66720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22173,66722,66724],{"id":66723},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[171,66726,66727],{},[1638,66728],{"alt":24,"src":66729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[171,66731,66732],{},[1638,66733],{"alt":24,"src":66734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[19,66736,66738],{"className":53196,"code":66737,"language":53198,"meta":24,"style":24},"\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",[26,66739,66740,66748,66765,66788,66796,66801,66806,66811,66815,66823,66831],{"__ignoreMap":24},[29,66741,66742,66744,66746],{"class":31,"line":32},[29,66743,1218],{"class":309},[29,66745,51929],{"class":51429},[29,66747,51436],{"class":309},[29,66749,66750,66752,66755,66758,66760,66763],{"class":31,"line":43},[29,66751,52273],{"class":309},[29,66753,66754],{"class":51429},"form",[29,66756,66757],{"class":35}," action",[29,66759,355],{"class":309},[29,66761,66762],{"class":103},"\"http:\u002F\u002Fwww.itcast.cn\"",[29,66764,51436],{"class":309},[29,66766,66767,66769,66771,66773,66775,66778,66781,66783,66786],{"class":31,"line":51},[29,66768,51470],{"class":309},[29,66770,53950],{"class":51429},[29,66772,53953],{"class":35},[29,66774,355],{"class":309},[29,66776,66777],{"class":103},"\"submit\"",[29,66779,66780],{"class":35}," value",[29,66782,355],{"class":309},[29,66784,66785],{"class":103},"\"免费注册\"",[29,66787,51436],{"class":309},[29,66789,66790,66792,66794],{"class":31,"line":59},[29,66791,51470],{"class":309},[29,66793,51942],{"class":51429},[29,66795,51436],{"class":309},[29,66797,66798],{"class":31,"line":67},[29,66799,66800],{"class":309},"      const form = document.querySelector('form')\n",[29,66802,66803],{"class":31,"line":75},[29,66804,66805],{"class":309},"      form.addEventListener('submit', function (e) {\n",[29,66807,66808],{"class":31,"line":83},[29,66809,66810],{"class":309},"        e.preventDefault()\n",[29,66812,66813],{"class":31,"line":158},[29,66814,64944],{"class":309},[29,66816,66817,66819,66821],{"class":31,"line":166},[29,66818,51905],{"class":309},[29,66820,51942],{"class":51429},[29,66822,51436],{"class":309},[29,66824,66825,66827,66829],{"class":31,"line":1505},[29,66826,52546],{"class":309},[29,66828,66754],{"class":51429},[29,66830,51436],{"class":309},[29,66832,66833,66835,66837],{"class":31,"line":1788},[29,66834,51914],{"class":309},[29,66836,51929],{"class":51429},[29,66838,51436],{"class":309},[171,66840,66841],{},"点击不在跳转！！！",[275,66843,66845],{"id":66844},"_332-事件委托","3.3.2 事件委托",[171,66847,66848],{},[1638,66849],{"alt":24,"src":66850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[19,66852,66854],{"className":50762,"code":66853,"language":50764,"meta":24,"style":24},"\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",[26,66855,66856,66866,66880,66884,66892,66906,66926,66938,66946,66950,66958,66966,66978,66990,67002,67014,67026,67039,67047,67055,67060,67079,67100,67105,67110,67115,67120,67129,67133,67143,67147,67152,67157,67171,67181,67185,67189,67197,67205,67209],{"__ignoreMap":24},[29,66857,66858,66860,66862,66864],{"class":31,"line":32},[29,66859,51426],{"class":309},[29,66861,51430],{"class":51429},[29,66863,51433],{"class":35},[29,66865,51436],{"class":309},[29,66867,66868,66870,66872,66874,66876,66878],{"class":31,"line":43},[29,66869,1218],{"class":309},[29,66871,50764],{"class":51429},[29,66873,51445],{"class":35},[29,66875,355],{"class":309},[29,66877,51450],{"class":103},[29,66879,51436],{"class":309},[29,66881,66882],{"class":31,"line":51},[29,66883,2575],{"emptyLinePlaceholder":233},[29,66885,66886,66888,66890],{"class":31,"line":59},[29,66887,1218],{"class":309},[29,66889,51463],{"class":51429},[29,66891,51436],{"class":309},[29,66893,66894,66896,66898,66900,66902,66904],{"class":31,"line":67},[29,66895,52273],{"class":309},[29,66897,51473],{"class":51429},[29,66899,51476],{"class":35},[29,66901,355],{"class":309},[29,66903,51481],{"class":103},[29,66905,51436],{"class":309},[29,66907,66908,66910,66912,66914,66916,66918,66920,66922,66924],{"class":31,"line":75},[29,66909,52273],{"class":309},[29,66911,51473],{"class":51429},[29,66913,15095],{"class":35},[29,66915,355],{"class":309},[29,66917,51520],{"class":103},[29,66919,51500],{"class":35},[29,66921,355],{"class":309},[29,66923,51527],{"class":103},[29,66925,51436],{"class":309},[29,66927,66928,66930,66932,66934,66936],{"class":31,"line":83},[29,66929,52273],{"class":309},[29,66931,51536],{"class":51429},[29,66933,51539],{"class":309},[29,66935,51536],{"class":51429},[29,66937,51436],{"class":309},[29,66939,66940,66942,66944],{"class":31,"line":158},[29,66941,51914],{"class":309},[29,66943,51463],{"class":51429},[29,66945,51436],{"class":309},[29,66947,66948],{"class":31,"line":166},[29,66949,2575],{"emptyLinePlaceholder":233},[29,66951,66952,66954,66956],{"class":31,"line":1505},[29,66953,1218],{"class":309},[29,66955,51929],{"class":51429},[29,66957,51436],{"class":309},[29,66959,66960,66962,66964],{"class":31,"line":1788},[29,66961,52273],{"class":309},[29,66963,175],{"class":51429},[29,66965,51436],{"class":309},[29,66967,66968,66970,66972,66974,66976],{"class":31,"line":1793},[29,66969,51470],{"class":309},[29,66971,178],{"class":51429},[29,66973,54095],{"class":309},[29,66975,178],{"class":51429},[29,66977,51436],{"class":309},[29,66979,66980,66982,66984,66986,66988],{"class":31,"line":1799},[29,66981,51470],{"class":309},[29,66983,178],{"class":51429},[29,66985,54114],{"class":309},[29,66987,178],{"class":51429},[29,66989,51436],{"class":309},[29,66991,66992,66994,66996,66998,67000],{"class":31,"line":1804},[29,66993,51470],{"class":309},[29,66995,178],{"class":51429},[29,66997,54133],{"class":309},[29,66999,178],{"class":51429},[29,67001,51436],{"class":309},[29,67003,67004,67006,67008,67010,67012],{"class":31,"line":1818},[29,67005,51470],{"class":309},[29,67007,178],{"class":51429},[29,67009,54152],{"class":309},[29,67011,178],{"class":51429},[29,67013,51436],{"class":309},[29,67015,67016,67018,67020,67022,67024],{"class":31,"line":1823},[29,67017,51470],{"class":309},[29,67019,178],{"class":51429},[29,67021,54171],{"class":309},[29,67023,178],{"class":51429},[29,67025,51436],{"class":309},[29,67027,67028,67030,67032,67035,67037],{"class":31,"line":1829},[29,67029,51470],{"class":309},[29,67031,171],{"class":51429},[29,67033,67034],{"class":309},">我不需要变色\u003C\u002F",[29,67036,171],{"class":51429},[29,67038,51436],{"class":309},[29,67040,67041,67043,67045],{"class":31,"line":1850},[29,67042,52546],{"class":309},[29,67044,175],{"class":51429},[29,67046,51436],{"class":309},[29,67048,67049,67051,67053],{"class":31,"line":1855},[29,67050,52273],{"class":309},[29,67052,51942],{"class":51429},[29,67054,51436],{"class":309},[29,67056,67057],{"class":31,"line":1869},[29,67058,67059],{"class":367},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[29,67061,67062,67064,67066,67068,67070,67072,67074,67077],{"class":31,"line":1874},[29,67063,11396],{"class":305},[29,67065,61421],{"class":39},[29,67067,13739],{"class":305},[29,67069,54525],{"class":309},[29,67071,54528],{"class":35},[29,67073,310],{"class":309},[29,67075,67076],{"class":103},"'ul'",[29,67078,316],{"class":309},[29,67080,67081,67084,67086,67088,67090,67092,67094,67096,67098],{"class":31,"line":1903},[29,67082,67083],{"class":309},"    ul.",[29,67085,57942],{"class":35},[29,67087,310],{"class":309},[29,67089,57947],{"class":103},[29,67091,12610],{"class":309},[29,67093,54578],{"class":305},[29,67095,1834],{"class":309},[29,67097,383],{"class":5391},[29,67099,12617],{"class":309},[29,67101,67102],{"class":31,"line":1908},[29,67103,67104],{"class":367},"      \u002F\u002F alert(1)\n",[29,67106,67107],{"class":31,"line":1925},[29,67108,67109],{"class":367},"      \u002F\u002F e.target就是我们点击的对象\n",[29,67111,67112],{"class":31,"line":1930},[29,67113,67114],{"class":367},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[29,67116,67117],{"class":31,"line":1935},[29,67118,67119],{"class":367},"      \u002F\u002F e.target.style.color = 'red'\n",[29,67121,67122,67124,67126],{"class":31,"line":1940},[29,67123,58373],{"class":309},[29,67125,58376],{"class":35},[29,67127,67128],{"class":309},"(e)\n",[29,67130,67131],{"class":31,"line":1954},[29,67132,2575],{"emptyLinePlaceholder":233},[29,67134,67135,67137,67140],{"class":31,"line":1959},[29,67136,58373],{"class":309},[29,67138,67139],{"class":35},"dir",[29,67141,67142],{"class":309},"(e.target)\n",[29,67144,67145],{"class":31,"line":2752},[29,67146,2575],{"emptyLinePlaceholder":233},[29,67148,67149],{"class":31,"line":2766},[29,67150,67151],{"class":367},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[29,67153,67154],{"class":31,"line":2774},[29,67155,67156],{"class":367},"      \u002F\u002F 通过tagName来进行判断\n",[29,67158,67159,67161,67164,67166,67169],{"class":31,"line":2779},[29,67160,54609],{"class":305},[29,67162,67163],{"class":309}," (e.target.tagName ",[29,67165,54615],{"class":305},[29,67167,67168],{"class":103}," 'LI'",[29,67170,12617],{"class":309},[29,67172,67173,67176,67178],{"class":31,"line":2785},[29,67174,67175],{"class":309},"        e.target.style.color ",[29,67177,355],{"class":305},[29,67179,67180],{"class":103}," 'red'\n",[29,67182,67183],{"class":31,"line":2791},[29,67184,52527],{"class":309},[29,67186,67187],{"class":31,"line":2796},[29,67188,33590],{"class":309},[29,67190,67191,67193,67195],{"class":31,"line":8123},[29,67192,52546],{"class":309},[29,67194,51942],{"class":51429},[29,67196,51436],{"class":309},[29,67198,67199,67201,67203],{"class":31,"line":8147},[29,67200,51914],{"class":309},[29,67202,51929],{"class":51429},[29,67204,51436],{"class":309},[29,67206,67207],{"class":31,"line":8152},[29,67208,2575],{"emptyLinePlaceholder":233},[29,67210,67211,67213,67215],{"class":31,"line":8158},[29,67212,51914],{"class":309},[29,67214,50764],{"class":51429},[29,67216,51436],{"class":309},[171,67218,67219],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[171,67221,67222],{},"if(e.target.ragName==='P') {}",[171,67224,67225],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[171,67227,67228],{},"通过事件委托的方式实现tab栏切换改造：",[171,67230,67231],{},"一定要记住自定义属性！！！！！！",[171,67233,67234],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[171,67236,67237],{},"id是自定义的属性名",[171,67239,67240],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[19,67242,67244],{"className":50762,"code":67243,"language":50764,"meta":24,"style":24},"\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",[26,67245,67246,67256,67270,67274,67282,67296,67316,67336,67348,67356,67362,67372,67382,67386,67390,67396,67408,67420,67432,67448,67452,67456,67462,67474,67486,67498,67508,67518,67522,67526,67534,67546,67556,67568,67572,67576,67584,67594,67604,67614,67618,67622,67632,67646,67658,67662,67666,67678,67688,67704,67714,67718,67722,67736,67746,67756,67760,67764,67770,67784,67788,67792,67800,67810,67814,67818,67827,67837,67841,67849,67857,67861,67869,67883,67897,67909,67917,67956,67988,68020,68052,68084,68092,68100,68114,68148,68182,68216,68250,68284,68292,68300,68308,68313,68318,68337,68342,68362,68370,68375,68388,68409,68422,68426,68431,68436,68449,68469,68497,68501,68505,68509,68517,68525,68529],{"__ignoreMap":24},[29,67247,67248,67250,67252,67254],{"class":31,"line":32},[29,67249,51426],{"class":309},[29,67251,51430],{"class":51429},[29,67253,51433],{"class":35},[29,67255,51436],{"class":309},[29,67257,67258,67260,67262,67264,67266,67268],{"class":31,"line":43},[29,67259,1218],{"class":309},[29,67261,50764],{"class":51429},[29,67263,51445],{"class":35},[29,67265,355],{"class":309},[29,67267,51450],{"class":103},[29,67269,51436],{"class":309},[29,67271,67272],{"class":31,"line":51},[29,67273,2575],{"emptyLinePlaceholder":233},[29,67275,67276,67278,67280],{"class":31,"line":59},[29,67277,1218],{"class":309},[29,67279,51463],{"class":51429},[29,67281,51436],{"class":309},[29,67283,67284,67286,67288,67290,67292,67294],{"class":31,"line":67},[29,67285,52273],{"class":309},[29,67287,51473],{"class":51429},[29,67289,51476],{"class":35},[29,67291,355],{"class":309},[29,67293,51481],{"class":103},[29,67295,59256],{"class":309},[29,67297,67298,67300,67302,67304,67306,67308,67310,67312,67314],{"class":31,"line":75},[29,67299,52273],{"class":309},[29,67301,51473],{"class":51429},[29,67303,51492],{"class":35},[29,67305,355],{"class":309},[29,67307,51497],{"class":103},[29,67309,51500],{"class":35},[29,67311,355],{"class":309},[29,67313,51505],{"class":103},[29,67315,59256],{"class":309},[29,67317,67318,67320,67322,67324,67326,67328,67330,67332,67334],{"class":31,"line":83},[29,67319,52273],{"class":309},[29,67321,51473],{"class":51429},[29,67323,15095],{"class":35},[29,67325,355],{"class":309},[29,67327,51520],{"class":103},[29,67329,51500],{"class":35},[29,67331,355],{"class":309},[29,67333,51527],{"class":103},[29,67335,59256],{"class":309},[29,67337,67338,67340,67342,67344,67346],{"class":31,"line":158},[29,67339,52273],{"class":309},[29,67341,51536],{"class":51429},[29,67343,63754],{"class":309},[29,67345,51536],{"class":51429},[29,67347,51436],{"class":309},[29,67349,67350,67352,67354],{"class":31,"line":166},[29,67351,52273],{"class":309},[29,67353,223],{"class":51429},[29,67355,51436],{"class":309},[29,67357,67358,67360],{"class":31,"line":1505},[29,67359,6578],{"class":51429},[29,67361,15747],{"class":309},[29,67363,67364,67366,67368,67370],{"class":31,"line":1788},[29,67365,54835],{"class":39},[29,67367,51566],{"class":309},[29,67369,499],{"class":39},[29,67371,1468],{"class":309},[29,67373,67374,67376,67378,67380],{"class":31,"line":1793},[29,67375,54824],{"class":39},[29,67377,51566],{"class":309},[29,67379,499],{"class":39},[29,67381,1468],{"class":309},[29,67383,67384],{"class":31,"line":1799},[29,67385,2362],{"class":309},[29,67387,67388],{"class":31,"line":1804},[29,67389,2575],{"emptyLinePlaceholder":233},[29,67391,67392,67394],{"class":31,"line":1818},[29,67393,63805],{"class":35},[29,67395,15747],{"class":309},[29,67397,67398,67400,67402,67404,67406],{"class":31,"line":1823},[29,67399,54900],{"class":39},[29,67401,51566],{"class":309},[29,67403,63816],{"class":39},[29,67405,51621],{"class":305},[29,67407,1468],{"class":309},[29,67409,67410,67412,67414,67416,67418],{"class":31,"line":1829},[29,67411,54914],{"class":39},[29,67413,51566],{"class":309},[29,67415,63829],{"class":39},[29,67417,51621],{"class":305},[29,67419,1468],{"class":309},[29,67421,67422,67424,67426,67428,67430],{"class":31,"line":1850},[29,67423,54835],{"class":39},[29,67425,51566],{"class":309},[29,67427,1008],{"class":39},[29,67429,51621],{"class":305},[29,67431,1468],{"class":309},[29,67433,67434,67436,67438,67440,67442,67444,67446],{"class":31,"line":1855},[29,67435,62106],{"class":39},[29,67437,51566],{"class":309},[29,67439,525],{"class":39},[29,67441,51621],{"class":305},[29,67443,51650],{"class":39},[29,67445,62373],{"class":39},[29,67447,1468],{"class":309},[29,67449,67450],{"class":31,"line":1869},[29,67451,2362],{"class":309},[29,67453,67454],{"class":31,"line":1874},[29,67455,2575],{"emptyLinePlaceholder":233},[29,67457,67458,67460],{"class":31,"line":1903},[29,67459,63874],{"class":35},[29,67461,15747],{"class":309},[29,67463,67464,67466,67468,67470,67472],{"class":31,"line":1908},[29,67465,54900],{"class":39},[29,67467,51566],{"class":309},[29,67469,619],{"class":39},[29,67471,636],{"class":305},[29,67473,1468],{"class":309},[29,67475,67476,67478,67480,67482,67484],{"class":31,"line":1925},[29,67477,54914],{"class":39},[29,67479,51566],{"class":309},[29,67481,1215],{"class":39},[29,67483,51621],{"class":305},[29,67485,1468],{"class":309},[29,67487,67488,67490,67492,67494,67496],{"class":31,"line":1930},[29,67489,57488],{"class":39},[29,67491,51566],{"class":309},[29,67493,1215],{"class":39},[29,67495,51621],{"class":305},[29,67497,1468],{"class":309},[29,67499,67500,67502,67504,67506],{"class":31,"line":1935},[29,67501,55138],{"class":39},[29,67503,51566],{"class":309},[29,67505,51606],{"class":39},[29,67507,1468],{"class":309},[29,67509,67510,67512,67514,67516],{"class":31,"line":1940},[29,67511,55149],{"class":39},[29,67513,51566],{"class":309},[29,67515,51797],{"class":39},[29,67517,1468],{"class":309},[29,67519,67520],{"class":31,"line":1954},[29,67521,2362],{"class":309},[29,67523,67524],{"class":31,"line":1959},[29,67525,2575],{"emptyLinePlaceholder":233},[29,67527,67528,67530,67532],{"class":31,"line":2752},[29,67529,63874],{"class":35},[29,67531,63947],{"class":51429},[29,67533,15747],{"class":309},[29,67535,67536,67538,67540,67542,67544],{"class":31,"line":2766},[29,67537,55051],{"class":39},[29,67539,51566],{"class":309},[29,67541,1108],{"class":39},[29,67543,51621],{"class":305},[29,67545,1468],{"class":309},[29,67547,67548,67550,67552,67554],{"class":31,"line":2774},[29,67549,62463],{"class":39},[29,67551,51566],{"class":309},[29,67553,63970],{"class":39},[29,67555,1468],{"class":309},[29,67557,67558,67560,67562,67564,67566],{"class":31,"line":2779},[29,67559,62129],{"class":39},[29,67561,51566],{"class":309},[29,67563,1008],{"class":39},[29,67565,51621],{"class":305},[29,67567,1468],{"class":309},[29,67569,67570],{"class":31,"line":2785},[29,67571,2362],{"class":309},[29,67573,67574],{"class":31,"line":2791},[29,67575,2575],{"emptyLinePlaceholder":233},[29,67577,67578,67580,67582],{"class":31,"line":2796},[29,67579,63874],{"class":35},[29,67581,61421],{"class":51429},[29,67583,15747],{"class":309},[29,67585,67586,67588,67590,67592],{"class":31,"line":8123},[29,67587,54861],{"class":39},[29,67589,51566],{"class":309},[29,67591,54866],{"class":39},[29,67593,1468],{"class":309},[29,67595,67596,67598,67600,67602],{"class":31,"line":8147},[29,67597,55138],{"class":39},[29,67599,51566],{"class":309},[29,67601,51606],{"class":39},[29,67603,1468],{"class":309},[29,67605,67606,67608,67610,67612],{"class":31,"line":8152},[29,67607,55149],{"class":39},[29,67609,51566],{"class":309},[29,67611,51709],{"class":39},[29,67613,1468],{"class":309},[29,67615,67616],{"class":31,"line":8158},[29,67617,2362],{"class":309},[29,67619,67620],{"class":31,"line":8185},[29,67621,2575],{"emptyLinePlaceholder":233},[29,67623,67624,67626,67628,67630],{"class":31,"line":8190},[29,67625,63874],{"class":35},[29,67627,61421],{"class":51429},[29,67629,55204],{"class":51429},[29,67631,15747],{"class":309},[29,67633,67634,67636,67638,67640,67642,67644],{"class":31,"line":8196},[29,67635,54835],{"class":39},[29,67637,51566],{"class":309},[29,67639,499],{"class":39},[29,67641,9125],{"class":39},[29,67643,51621],{"class":305},[29,67645,1468],{"class":309},[29,67647,67648,67650,67652,67654,67656],{"class":31,"line":8208},[29,67649,55051],{"class":39},[29,67651,51566],{"class":309},[29,67653,857],{"class":39},[29,67655,51621],{"class":305},[29,67657,1468],{"class":309},[29,67659,67660],{"class":31,"line":8220},[29,67661,2362],{"class":309},[29,67663,67664],{"class":31,"line":8232},[29,67665,2575],{"emptyLinePlaceholder":233},[29,67667,67668,67670,67672,67674,67676],{"class":31,"line":9891},[29,67669,63874],{"class":35},[29,67671,61421],{"class":51429},[29,67673,55204],{"class":51429},[29,67675,1574],{"class":51429},[29,67677,15747],{"class":309},[29,67679,67680,67682,67684,67686],{"class":31,"line":9916},[29,67681,64099],{"class":39},[29,67683,51566],{"class":309},[29,67685,54866],{"class":39},[29,67687,1468],{"class":309},[29,67689,67690,67692,67694,67696,67698,67700,67702],{"class":31,"line":9939},[29,67691,62361],{"class":39},[29,67693,51566],{"class":309},[29,67695,386],{"class":39},[29,67697,51621],{"class":305},[29,67699,51650],{"class":39},[29,67701,64120],{"class":39},[29,67703,1468],{"class":309},[29,67705,67706,67708,67710,67712],{"class":31,"line":9963},[29,67707,57545],{"class":39},[29,67709,51566],{"class":309},[29,67711,62498],{"class":39},[29,67713,1468],{"class":309},[29,67715,67716],{"class":31,"line":9968},[29,67717,2362],{"class":309},[29,67719,67720],{"class":31,"line":9973},[29,67721,2575],{"emptyLinePlaceholder":233},[29,67723,67724,67726,67728,67730,67732,67734],{"class":31,"line":9978},[29,67725,63874],{"class":35},[29,67727,61421],{"class":51429},[29,67729,55204],{"class":51429},[29,67731,1574],{"class":51429},[29,67733,64153],{"class":35},[29,67735,15747],{"class":309},[29,67737,67738,67740,67742,67744],{"class":31,"line":9987},[29,67739,61920],{"class":39},[29,67741,51566],{"class":309},[29,67743,64164],{"class":39},[29,67745,1468],{"class":309},[29,67747,67748,67750,67752,67754],{"class":31,"line":9992},[29,67749,57545],{"class":39},[29,67751,51566],{"class":309},[29,67753,64164],{"class":39},[29,67755,1468],{"class":309},[29,67757,67758],{"class":31,"line":9998},[29,67759,2362],{"class":309},[29,67761,67762],{"class":31,"line":10019},[29,67763,2575],{"emptyLinePlaceholder":233},[29,67765,67766,67768],{"class":31,"line":10025},[29,67767,64189],{"class":35},[29,67769,15747],{"class":309},[29,67771,67772,67774,67776,67778,67780,67782],{"class":31,"line":10039},[29,67773,54824],{"class":39},[29,67775,51566],{"class":309},[29,67777,499],{"class":39},[29,67779,64202],{"class":39},[29,67781,51621],{"class":305},[29,67783,1468],{"class":309},[29,67785,67786],{"class":31,"line":10045},[29,67787,2362],{"class":309},[29,67789,67790],{"class":31,"line":10072},[29,67791,2575],{"emptyLinePlaceholder":233},[29,67793,67794,67796,67798],{"class":31,"line":10081},[29,67795,64189],{"class":35},[29,67797,62303],{"class":35},[29,67799,15747],{"class":309},[29,67801,67802,67804,67806,67808],{"class":31,"line":10087},[29,67803,55138],{"class":39},[29,67805,51566],{"class":309},[29,67807,54866],{"class":39},[29,67809,1468],{"class":309},[29,67811,67812],{"class":31,"line":10095},[29,67813,2362],{"class":309},[29,67815,67816],{"class":31,"line":10100},[29,67817,2575],{"emptyLinePlaceholder":233},[29,67819,67820,67822,67825],{"class":31,"line":16779},[29,67821,64189],{"class":35},[29,67823,67824],{"class":35}," .active",[29,67826,15747],{"class":309},[29,67828,67829,67831,67833,67835],{"class":31,"line":16785},[29,67830,55138],{"class":39},[29,67832,51566],{"class":309},[29,67834,60998],{"class":39},[29,67836,1468],{"class":309},[29,67838,67839],{"class":31,"line":16808},[29,67840,2362],{"class":309},[29,67842,67843,67845,67847],{"class":31,"line":16814},[29,67844,52546],{"class":309},[29,67846,223],{"class":51429},[29,67848,51436],{"class":309},[29,67850,67851,67853,67855],{"class":31,"line":16837},[29,67852,51914],{"class":309},[29,67854,51463],{"class":51429},[29,67856,51436],{"class":309},[29,67858,67859],{"class":31,"line":16851},[29,67860,2575],{"emptyLinePlaceholder":233},[29,67862,67863,67865,67867],{"class":31,"line":16871},[29,67864,1218],{"class":309},[29,67866,51929],{"class":51429},[29,67868,51436],{"class":309},[29,67870,67871,67873,67875,67877,67879,67881],{"class":31,"line":16877},[29,67872,52273],{"class":309},[29,67874,51740],{"class":51429},[29,67876,53615],{"class":35},[29,67878,355],{"class":309},[29,67880,64304],{"class":103},[29,67882,51436],{"class":309},[29,67884,67885,67887,67889,67891,67893,67895],{"class":31,"line":16888},[29,67886,51470],{"class":309},[29,67888,51740],{"class":51429},[29,67890,53615],{"class":35},[29,67892,355],{"class":309},[29,67894,64319],{"class":103},[29,67896,51436],{"class":309},[29,67898,67899,67901,67903,67905,67907],{"class":31,"line":16911},[29,67900,55363],{"class":309},[29,67902,275],{"class":51429},[29,67904,64330],{"class":309},[29,67906,275],{"class":51429},[29,67908,51436],{"class":309},[29,67910,67911,67913,67915],{"class":31,"line":16933},[29,67912,55363],{"class":309},[29,67914,175],{"class":51429},[29,67916,51436],{"class":309},[29,67918,67919,67921,67923,67925,67927,67929,67931,67933,67935,67937,67939,67941,67943,67946,67948,67950,67952,67954],{"class":31,"line":16938},[29,67920,55431],{"class":309},[29,67922,178],{"class":51429},[29,67924,61181],{"class":309},[29,67926,546],{"class":51429},[29,67928,53615],{"class":35},[29,67930,355],{"class":309},[29,67932,59835],{"class":103},[29,67934,61186],{"class":35},[29,67936,355],{"class":309},[29,67938,64365],{"class":103},[29,67940,54080],{"class":35},[29,67942,355],{"class":309},[29,67944,67945],{"class":103},"\"0\"",[29,67947,64368],{"class":309},[29,67949,546],{"class":51429},[29,67951,55443],{"class":309},[29,67953,178],{"class":51429},[29,67955,51436],{"class":309},[29,67957,67958,67960,67962,67964,67966,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986],{"class":31,"line":16944},[29,67959,55431],{"class":309},[29,67961,178],{"class":51429},[29,67963,61181],{"class":309},[29,67965,546],{"class":51429},[29,67967,61186],{"class":35},[29,67969,355],{"class":309},[29,67971,64365],{"class":103},[29,67973,54080],{"class":35},[29,67975,355],{"class":309},[29,67977,3853],{"class":103},[29,67979,64395],{"class":309},[29,67981,546],{"class":51429},[29,67983,55443],{"class":309},[29,67985,178],{"class":51429},[29,67987,51436],{"class":309},[29,67989,67990,67992,67994,67996,67998,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018],{"class":31,"line":16958},[29,67991,55431],{"class":309},[29,67993,178],{"class":51429},[29,67995,61181],{"class":309},[29,67997,546],{"class":51429},[29,67999,61186],{"class":35},[29,68001,355],{"class":309},[29,68003,64365],{"class":103},[29,68005,54080],{"class":35},[29,68007,355],{"class":309},[29,68009,3876],{"class":103},[29,68011,64422],{"class":309},[29,68013,546],{"class":51429},[29,68015,55443],{"class":309},[29,68017,178],{"class":51429},[29,68019,51436],{"class":309},[29,68021,68022,68024,68026,68028,68030,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050],{"class":31,"line":16971},[29,68023,55431],{"class":309},[29,68025,178],{"class":51429},[29,68027,61181],{"class":309},[29,68029,546],{"class":51429},[29,68031,61186],{"class":35},[29,68033,355],{"class":309},[29,68035,64365],{"class":103},[29,68037,54080],{"class":35},[29,68039,355],{"class":309},[29,68041,3889],{"class":103},[29,68043,64449],{"class":309},[29,68045,546],{"class":51429},[29,68047,55443],{"class":309},[29,68049,178],{"class":51429},[29,68051,51436],{"class":309},[29,68053,68054,68056,68058,68060,68062,68064,68066,68068,68070,68072,68074,68076,68078,68080,68082],{"class":31,"line":16976},[29,68055,55431],{"class":309},[29,68057,178],{"class":51429},[29,68059,61181],{"class":309},[29,68061,546],{"class":51429},[29,68063,61186],{"class":35},[29,68065,355],{"class":309},[29,68067,64365],{"class":103},[29,68069,54080],{"class":35},[29,68071,355],{"class":309},[29,68073,3902],{"class":103},[29,68075,64476],{"class":309},[29,68077,546],{"class":51429},[29,68079,55443],{"class":309},[29,68081,178],{"class":51429},[29,68083,51436],{"class":309},[29,68085,68086,68088,68090],{"class":31,"line":16990},[29,68087,55536],{"class":309},[29,68089,175],{"class":51429},[29,68091,51436],{"class":309},[29,68093,68094,68096,68098],{"class":31,"line":16995},[29,68095,51905],{"class":309},[29,68097,51740],{"class":51429},[29,68099,51436],{"class":309},[29,68101,68102,68104,68106,68108,68110,68112],{"class":31,"line":17001},[29,68103,51470],{"class":309},[29,68105,51740],{"class":51429},[29,68107,53615],{"class":35},[29,68109,355],{"class":309},[29,68111,64513],{"class":103},[29,68113,51436],{"class":309},[29,68115,68116,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146],{"class":31,"line":17006},[29,68117,55363],{"class":309},[29,68119,51740],{"class":51429},[29,68121,53615],{"class":35},[29,68123,355],{"class":309},[29,68125,64528],{"class":103},[29,68127,61181],{"class":309},[29,68129,1638],{"class":51429},[29,68131,55368],{"class":35},[29,68133,355],{"class":309},[29,68135,64539],{"class":103},[29,68137,55376],{"class":35},[29,68139,355],{"class":309},[29,68141,7827],{"class":103},[29,68143,64548],{"class":309},[29,68145,51740],{"class":51429},[29,68147,51436],{"class":309},[29,68149,68150,68152,68154,68156,68158,68160,68162,68164,68166,68168,68170,68172,68174,68176,68178,68180],{"class":31,"line":17020},[29,68151,55363],{"class":309},[29,68153,51740],{"class":51429},[29,68155,53615],{"class":35},[29,68157,355],{"class":309},[29,68159,62752],{"class":103},[29,68161,61181],{"class":309},[29,68163,1638],{"class":51429},[29,68165,55368],{"class":35},[29,68167,355],{"class":309},[29,68169,64575],{"class":103},[29,68171,55376],{"class":35},[29,68173,355],{"class":309},[29,68175,7827],{"class":103},[29,68177,64548],{"class":309},[29,68179,51740],{"class":51429},[29,68181,51436],{"class":309},[29,68183,68184,68186,68188,68190,68192,68194,68196,68198,68200,68202,68204,68206,68208,68210,68212,68214],{"class":31,"line":17025},[29,68185,55363],{"class":309},[29,68187,51740],{"class":51429},[29,68189,53615],{"class":35},[29,68191,355],{"class":309},[29,68193,62752],{"class":103},[29,68195,61181],{"class":309},[29,68197,1638],{"class":51429},[29,68199,55368],{"class":35},[29,68201,355],{"class":309},[29,68203,64610],{"class":103},[29,68205,55376],{"class":35},[29,68207,355],{"class":309},[29,68209,7827],{"class":103},[29,68211,64548],{"class":309},[29,68213,51740],{"class":51429},[29,68215,51436],{"class":309},[29,68217,68218,68220,68222,68224,68226,68228,68230,68232,68234,68236,68238,68240,68242,68244,68246,68248],{"class":31,"line":17030},[29,68219,55363],{"class":309},[29,68221,51740],{"class":51429},[29,68223,53615],{"class":35},[29,68225,355],{"class":309},[29,68227,62752],{"class":103},[29,68229,61181],{"class":309},[29,68231,1638],{"class":51429},[29,68233,55368],{"class":35},[29,68235,355],{"class":309},[29,68237,64645],{"class":103},[29,68239,55376],{"class":35},[29,68241,355],{"class":309},[29,68243,7827],{"class":103},[29,68245,64548],{"class":309},[29,68247,51740],{"class":51429},[29,68249,51436],{"class":309},[29,68251,68252,68254,68256,68258,68260,68262,68264,68266,68268,68270,68272,68274,68276,68278,68280,68282],{"class":31,"line":17044},[29,68253,55363],{"class":309},[29,68255,51740],{"class":51429},[29,68257,53615],{"class":35},[29,68259,355],{"class":309},[29,68261,62752],{"class":103},[29,68263,61181],{"class":309},[29,68265,1638],{"class":51429},[29,68267,55368],{"class":35},[29,68269,355],{"class":309},[29,68271,64680],{"class":103},[29,68273,55376],{"class":35},[29,68275,355],{"class":309},[29,68277,7827],{"class":103},[29,68279,64548],{"class":309},[29,68281,51740],{"class":51429},[29,68283,51436],{"class":309},[29,68285,68286,68288,68290],{"class":31,"line":17056},[29,68287,51905],{"class":309},[29,68289,51740],{"class":51429},[29,68291,51436],{"class":309},[29,68293,68294,68296,68298],{"class":31,"line":17061},[29,68295,52546],{"class":309},[29,68297,51740],{"class":51429},[29,68299,51436],{"class":309},[29,68301,68302,68304,68306],{"class":31,"line":17074},[29,68303,52273],{"class":309},[29,68305,51942],{"class":51429},[29,68307,51436],{"class":309},[29,68309,68310],{"class":31,"line":17079},[29,68311,68312],{"class":367},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[29,68314,68315],{"class":31,"line":17084},[29,68316,68317],{"class":367},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[29,68319,68320,68322,68324,68326,68328,68330,68332,68335],{"class":31,"line":17089},[29,68321,11396],{"class":305},[29,68323,61421],{"class":39},[29,68325,13739],{"class":305},[29,68327,54525],{"class":309},[29,68329,54528],{"class":35},[29,68331,310],{"class":309},[29,68333,68334],{"class":103},"'.tab-nav ul'",[29,68336,316],{"class":309},[29,68338,68339],{"class":31,"line":17102},[29,68340,68341],{"class":367},"    \u002F\u002F 2.添加事件\n",[29,68343,68344,68346,68348,68350,68352,68354,68356,68358,68360],{"class":31,"line":17107},[29,68345,67083],{"class":309},[29,68347,57942],{"class":35},[29,68349,310],{"class":309},[29,68351,57947],{"class":103},[29,68353,12610],{"class":309},[29,68355,54578],{"class":305},[29,68357,1834],{"class":309},[29,68359,383],{"class":5391},[29,68361,12617],{"class":309},[29,68363,68364,68366,68368],{"class":31,"line":32762},[29,68365,58373],{"class":309},[29,68367,67139],{"class":35},[29,68369,67142],{"class":309},[29,68371,68372],{"class":31,"line":32768},[29,68373,68374],{"class":367},"      \u002F\u002Fe.targer是我们点击的对象\n",[29,68376,68377,68379,68381,68383,68386],{"class":31,"line":32774},[29,68378,54609],{"class":305},[29,68380,67163],{"class":309},[29,68382,54615],{"class":305},[29,68384,68385],{"class":103}," 'A'",[29,68387,12617],{"class":309},[29,68389,68390,68392,68394,68396,68399,68401,68403,68405,68407],{"class":31,"line":32780},[29,68391,52054],{"class":309},[29,68393,54528],{"class":35},[29,68395,310],{"class":309},[29,68397,68398],{"class":103},"'.active'",[29,68400,57132],{"class":309},[29,68402,57135],{"class":35},[29,68404,310],{"class":309},[29,68406,64843],{"class":103},[29,68408,316],{"class":309},[29,68410,68411,68414,68416,68418,68420],{"class":31,"line":32786},[29,68412,68413],{"class":309},"        e.target.classList.",[29,68415,5509],{"class":35},[29,68417,310],{"class":309},[29,68419,64843],{"class":103},[29,68421,316],{"class":309},[29,68423,68424],{"class":31,"line":32797},[29,68425,2575],{"emptyLinePlaceholder":233},[29,68427,68428],{"class":31,"line":32803},[29,68429,68430],{"class":367},"        \u002F\u002F 下面大盒子模块\n",[29,68432,68433],{"class":31,"line":32823},[29,68434,68435],{"class":367},"        \u002F\u002F console.log(e.target.dataset.id)\n",[29,68437,68438,68440,68442,68444,68446],{"class":31,"line":32829},[29,68439,61399],{"class":305},[29,68441,3207],{"class":39},[29,68443,13739],{"class":305},[29,68445,45695],{"class":305},[29,68447,68448],{"class":309},"e.target.dataset.id\n",[29,68450,68451,68453,68455,68457,68459,68461,68463,68465,68467],{"class":31,"line":32840},[29,68452,52054],{"class":309},[29,68454,54528],{"class":35},[29,68456,310],{"class":309},[29,68458,64891],{"class":103},[29,68460,57132],{"class":309},[29,68462,57135],{"class":35},[29,68464,310],{"class":309},[29,68466,64843],{"class":103},[29,68468,316],{"class":309},[29,68470,68471,68473,68475,68477,68479,68481,68483,68485,68487,68489,68491,68493,68495],{"class":31,"line":32846},[29,68472,52054],{"class":309},[29,68474,54528],{"class":35},[29,68476,310],{"class":309},[29,68478,64917],{"class":103},[29,68480,749],{"class":309},[29,68482,45695],{"class":305},[29,68484,25247],{"class":39},[29,68486,57161],{"class":103},[29,68488,57132],{"class":309},[29,68490,5509],{"class":35},[29,68492,310],{"class":309},[29,68494,64843],{"class":103},[29,68496,316],{"class":309},[29,68498,68499],{"class":31,"line":32852},[29,68500,2575],{"emptyLinePlaceholder":233},[29,68502,68503],{"class":31,"line":32858},[29,68504,52527],{"class":309},[29,68506,68507],{"class":31,"line":32864},[29,68508,33590],{"class":309},[29,68510,68511,68513,68515],{"class":31,"line":32870},[29,68512,52546],{"class":309},[29,68514,51942],{"class":51429},[29,68516,51436],{"class":309},[29,68518,68519,68521,68523],{"class":31,"line":32876},[29,68520,51914],{"class":309},[29,68522,51929],{"class":51429},[29,68524,51436],{"class":309},[29,68526,68527],{"class":31,"line":32882},[29,68528,2575],{"emptyLinePlaceholder":233},[29,68530,68531,68533,68535],{"class":31,"line":32902},[29,68532,51914],{"class":309},[29,68534,50764],{"class":51429},[29,68536,51436],{"class":309},[275,68538,68540],{"id":68539},"_333-页面加载事件","3.3.3 页面加载事件",[259,68542,68543],{},[178,68544,68545],{},"load",[171,68547,68548],{},[1638,68549],{"alt":24,"src":68550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[171,68552,68553],{},"window代表整个窗口，比document还要大",[171,68555,68556],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[171,68558,68559],{},"img.addEventListener('load', function () {",[171,68561,68562],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[171,68564,52593],{},[259,68566,68567],{"start":43},[178,68568,68569],{},"DOMContentLoaded",[171,68571,68572],{},[1638,68573],{"alt":24,"src":68574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[171,68576,68577],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[275,68579,68581],{"id":68580},"_334-元素滚动事件","3.3.4 元素滚动事件",[171,68583,68584],{},[1638,68585],{"alt":24,"src":68586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[171,68588,68589],{},[1638,68590],{"alt":24,"src":68591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[171,68593,68594],{},[1638,68595],{"alt":24,"src":68596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[171,68598,68599],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[171,68601,68602],{},"获得的是数字型数据，不带单位",[171,68604,68605],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[171,68607,68608],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[171,68610,68611],{},"它是通过document.documentElement来获取",[171,68613,68614],{},[1638,68615],{"alt":24,"src":68616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[171,68618,68619],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[275,68621,68623],{"id":68622},"_335-页面缩放事件","3.3.5 页面缩放事件",[171,68625,68626],{},[1638,68627],{"alt":24,"src":68628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[171,68630,68631],{},[1638,68632],{"alt":24,"src":68633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[275,68635,68637],{"id":68636},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[171,68639,68640],{},[1638,68641],{"alt":24,"src":68642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[171,68644,68645],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[171,68647,68648],{},[1638,68649],{"alt":24,"src":68650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[171,68652,68653],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[171,68655,68656],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[171,68658,68659],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[171,68661,68662],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[171,68664,68665],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[171,68667,68668],{},[1638,68669],{"alt":24,"src":68670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[171,68672,68673],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[171,68675,68676],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[171,68678,68679],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[171,68681,68682],{},"e.pageX-box.getBoundingClientRect()",[275,68684,68686],{"id":68685},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[171,68688,68689],{},[1638,68690],{"alt":24,"src":68691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[171,68693,68694],{},"这个是相对于视口来说的，它是个方法，不是属性值",[275,68696,68698],{"id":68697},"_338-总结","3.3.8 总结",[171,68700,68701],{},[1638,68702],{"alt":24,"src":68703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[171,68705,68706],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[171,68708,68709],{},"修改盒子的宽高只能通过width和height来实现",[275,68711,68713],{"id":68712},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[19,68715,68717],{"className":50762,"code":68716,"language":50764,"meta":24,"style":24},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[26,68718,68719,68724,68729,68734,68739],{"__ignoreMap":24},[29,68720,68721],{"class":31,"line":32},[29,68722,68723],{"class":309},"\u002F* 页面滑动 *\u002F\n",[29,68725,68726],{"class":31,"line":43},[29,68727,68728],{"class":309},"html {\n",[29,68730,68731],{"class":31,"line":51},[29,68732,68733],{"class":309},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[29,68735,68736],{"class":31,"line":59},[29,68737,68738],{"class":309},"  scroll-behavior: smooth;\n",[29,68740,68741],{"class":31,"line":67},[29,68742,1741],{"class":309},[171,68744,68745],{},"默认是auto",[275,68747,68749],{"id":68748},"_3310-日期对象","3.3.10 日期对象",[22173,68751,68753],{"id":68752},"_33101-实例化","3.3.10.1 实例化",[171,68755,68756],{},[1638,68757],{"alt":24,"src":68758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22173,68760,68762],{"id":68761},"_33102-时期对象方法","3.3.10.2 时期对象方法",[171,68764,68765],{},[1638,68766],{"alt":24,"src":68767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[171,68769,68770],{},"月份+1",[171,68772,68773],{},"老外认为第一天为0，星期天",[171,68775,68776],{},"方法使用的时候必须要跟括号",[171,68778,68779],{},"快速获得日期",[171,68781,68782],{},"\u002F\u002F 得到年月日",[171,68784,68785],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[171,68787,68788],{},"\u002F\u002F 得到当地日期",[171,68790,68791],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[171,68793,68794],{},"\u002F\u002F 得到当地时间",[171,68796,68797],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[171,68799,68800],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[171,68802,68803],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51942,68805,68806],{},"\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",[171,68808,68809],{},"学会去封装函数！",[22173,68811,68813],{"id":68812},"_33103-时间戳","3.3.10.3 时间戳",[171,68815,68816],{},[1638,68817],{"alt":24,"src":68818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[171,68820,68821],{},[1638,68822],{"alt":24,"src":68823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[171,68825,68826],{},"三种方法记住一个就可以",[275,68828,68830],{"id":68829},"_3311-节点操作","3.3.11 节点操作",[22173,68832,68834],{"id":68833},"_33111-dom节点","3.3.11.1 DOM节点",[171,68836,68837],{},[1638,68838],{"alt":24,"src":68839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[171,68841,68842],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22173,68844,68846],{"id":68845},"_33112-查找节点","3.3.11.2 查找节点",[171,68848,68849],{},"前边的document.querySelector()是获取的元素",[171,68851,68852],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[171,68854,68855],{},[1638,68856],{"alt":24,"src":68857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[259,68859,68860],{},[178,68861,68862],{},"父节点",[171,68864,68865],{},[1638,68866],{"alt":24,"src":68867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[259,68869,68870],{"start":43},[178,68871,68872],{},"子节点",[171,68874,68875],{},[1638,68876],{"alt":24,"src":68877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[171,68879,68880],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[171,68882,68883],{},"children获得的是伪数组，是亲儿子",[259,68885,68886],{"start":51},[178,68887,68888],{},"兄弟节点",[171,68890,68891],{},[1638,68892],{"alt":24,"src":68893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22173,68895,68897],{"id":68896},"_33113-增加节点","3.3.11.3 增加节点",[171,68899,68900],{},[1638,68901],{"alt":24,"src":68902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[171,68904,68905],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[171,68907,68908],{},[1638,68909],{"alt":24,"src":68910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[171,68912,68913],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[171,68915,68916],{},"下面是写法的部分展示，就按照下边的格式来写",[171,68918,68919],{},"例：",[51942,68921,68922],{},"\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",[171,68924,68925],{},[1638,68926],{"alt":24,"src":68927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[171,68929,68930],{},"false只克隆标签，里边的内容不会克隆过来",[19,68932,68934],{"className":50762,"code":68933,"language":50764,"meta":24,"style":24},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[26,68935,68936],{"__ignoreMap":24},[29,68937,68938],{"class":31,"line":32},[29,68939,68933],{"class":309},[22173,68941,68943],{"id":68942},"_33114-删除节点","3.3.11.4 删除节点",[171,68945,68946],{},[1638,68947],{"alt":24,"src":68948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[171,68950,68951],{},"父亲删儿子",[171,68953,68954],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[275,68956,68958],{"id":68957},"_3312-m端事件","3.3.12 M端事件",[171,68960,68961],{},"M端就是移动端",[171,68963,68964],{},[1638,68965],{"alt":24,"src":68966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[275,68968,68970],{"id":68969},"_3313-插件","3.3.13 插件",[171,68972,68973],{},"要熟悉官网！！！",[171,68975,68976],{},[546,68977,68978],{"href":68978,"rel":68979},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24038],[171,68981,68982],{},[546,68983,68984],{"href":68984,"rel":68985},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24038],[275,68987,68989],{"id":68988},"_3314-学生信息表","3.3.14 学生信息表",[259,68991,68992,68995,68998,69001,69004,69007,69010,69013],{},[178,68993,68994],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[178,68996,68997],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[178,68999,69000],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[178,69002,69003],{},"用好表单元素自带的属性，value,name等",[178,69005,69006],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[178,69008,69009],{},"不要忘记事件对象",[178,69011,69012],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[178,69014,69015],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[171,69017,69018],{},"结构：",[19,69020,69022],{"className":50762,"code":69021,"language":50764,"meta":24,"style":24},"\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",[26,69023,69024,69034,69048,69052,69060,69074,69094,69115,69128,69152,69160,69164,69172,69185,69206,69234,69262,69267,69289,69309,69328,69336,69364,69386,69406,69426,69446,69466,69486,69494,69514,69522,69526,69539,69547,69555,69563,69576,69589,69602,69615,69628,69641,69654,69662,69670,69678,69683,69688,69693,69698,69703,69708,69713,69718,69723,69728,69733,69738,69743,69751,69759,69767,69771,69791,69810,69830,69850,69870,69890,69894,69899,69919,69924,69934,69939,69944,69964,69986,69991,70001,70005,70009,70014,70019,70048,70062,70077,70081,70085,70089,70094,70105,70118,70123,70128,70133,70138,70143,70147,70152,70157,70166,70171,70176,70188,70193,70200,70204,70209,70219,70224,70234,70239,70267,70288,70298,70318,70336,70353,70370,70387,70404,70408,70418,70423,70428,70433,70444,70448,70452,70456,70461,70466,70487,70499,70504,70509,70514,70528,70533,70540,70544,70548,70556,70560,70568,70572],{"__ignoreMap":24},[29,69025,69026,69028,69030,69032],{"class":31,"line":32},[29,69027,51426],{"class":309},[29,69029,51430],{"class":51429},[29,69031,51433],{"class":35},[29,69033,51436],{"class":309},[29,69035,69036,69038,69040,69042,69044,69046],{"class":31,"line":43},[29,69037,1218],{"class":309},[29,69039,50764],{"class":51429},[29,69041,51445],{"class":35},[29,69043,355],{"class":309},[29,69045,51450],{"class":103},[29,69047,51436],{"class":309},[29,69049,69050],{"class":31,"line":51},[29,69051,2575],{"emptyLinePlaceholder":233},[29,69053,69054,69056,69058],{"class":31,"line":59},[29,69055,1218],{"class":309},[29,69057,51463],{"class":51429},[29,69059,51436],{"class":309},[29,69061,69062,69064,69066,69068,69070,69072],{"class":31,"line":67},[29,69063,52273],{"class":309},[29,69065,51473],{"class":51429},[29,69067,51476],{"class":35},[29,69069,355],{"class":309},[29,69071,51481],{"class":103},[29,69073,59256],{"class":309},[29,69075,69076,69078,69080,69082,69084,69086,69088,69090,69092],{"class":31,"line":75},[29,69077,52273],{"class":309},[29,69079,51473],{"class":51429},[29,69081,15095],{"class":35},[29,69083,355],{"class":309},[29,69085,51520],{"class":103},[29,69087,51500],{"class":35},[29,69089,355],{"class":309},[29,69091,51527],{"class":103},[29,69093,59256],{"class":309},[29,69095,69096,69098,69100,69102,69104,69106,69108,69110,69113],{"class":31,"line":83},[29,69097,52273],{"class":309},[29,69099,51473],{"class":51429},[29,69101,51492],{"class":35},[29,69103,355],{"class":309},[29,69105,51497],{"class":103},[29,69107,51500],{"class":35},[29,69109,355],{"class":309},[29,69111,69112],{"class":103},"\"ie=edge\"",[29,69114,59256],{"class":309},[29,69116,69117,69119,69121,69124,69126],{"class":31,"line":158},[29,69118,52273],{"class":309},[29,69120,51536],{"class":51429},[29,69122,69123],{"class":309},">学生信息管理\u003C\u002F",[29,69125,51536],{"class":51429},[29,69127,51436],{"class":309},[29,69129,69130,69132,69135,69138,69140,69143,69145,69147,69150],{"class":31,"line":166},[29,69131,52273],{"class":309},[29,69133,69134],{"class":51429},"link",[29,69136,69137],{"class":35}," rel",[29,69139,355],{"class":309},[29,69141,69142],{"class":103},"\"stylesheet\"",[29,69144,61186],{"class":35},[29,69146,355],{"class":309},[29,69148,69149],{"class":103},"\"css\u002Findex.css\"",[29,69151,59256],{"class":309},[29,69153,69154,69156,69158],{"class":31,"line":1505},[29,69155,51914],{"class":309},[29,69157,51463],{"class":51429},[29,69159,51436],{"class":309},[29,69161,69162],{"class":31,"line":1788},[29,69163,2575],{"emptyLinePlaceholder":233},[29,69165,69166,69168,69170],{"class":31,"line":1793},[29,69167,1218],{"class":309},[29,69169,51929],{"class":51429},[29,69171,51436],{"class":309},[29,69173,69174,69176,69178,69181,69183],{"class":31,"line":1799},[29,69175,52273],{"class":309},[29,69177,10],{"class":51429},[29,69179,69180],{"class":309},">新增学员\u003C\u002F",[29,69182,10],{"class":51429},[29,69184,51436],{"class":309},[29,69186,69187,69189,69191,69193,69195,69197,69200,69202,69204],{"class":31,"line":1804},[29,69188,52273],{"class":309},[29,69190,66754],{"class":51429},[29,69192,53615],{"class":35},[29,69194,355],{"class":309},[29,69196,62793],{"class":103},[29,69198,69199],{"class":35}," autocomplete",[29,69201,355],{"class":309},[29,69203,31905],{"class":103},[29,69205,51436],{"class":309},[29,69207,69208,69211,69213,69215,69217,69219,69221,69223,69226,69228,69230,69232],{"class":31,"line":1818},[29,69209,69210],{"class":309},"    姓名：\u003C",[29,69212,53950],{"class":51429},[29,69214,53953],{"class":35},[29,69216,355],{"class":309},[29,69218,62828],{"class":103},[29,69220,53615],{"class":35},[29,69222,355],{"class":309},[29,69224,69225],{"class":103},"\"uname\"",[29,69227,15095],{"class":35},[29,69229,355],{"class":309},[29,69231,69225],{"class":103},[29,69233,59256],{"class":309},[29,69235,69236,69239,69241,69243,69245,69247,69249,69251,69254,69256,69258,69260],{"class":31,"line":1823},[29,69237,69238],{"class":309},"    年龄：\u003C",[29,69240,53950],{"class":51429},[29,69242,53953],{"class":35},[29,69244,355],{"class":309},[29,69246,62828],{"class":103},[29,69248,53615],{"class":35},[29,69250,355],{"class":309},[29,69252,69253],{"class":103},"\"age\"",[29,69255,15095],{"class":35},[29,69257,355],{"class":309},[29,69259,69253],{"class":103},[29,69261,59256],{"class":309},[29,69263,69264],{"class":31,"line":1829},[29,69265,69266],{"class":309},"    性别:\n",[29,69268,69269,69271,69274,69276,69278,69281,69283,69285,69287],{"class":31,"line":1850},[29,69270,51470],{"class":309},[29,69272,69273],{"class":51429},"select",[29,69275,15095],{"class":35},[29,69277,355],{"class":309},[29,69279,69280],{"class":103},"\"gender\"",[29,69282,53615],{"class":35},[29,69284,355],{"class":309},[29,69286,69280],{"class":103},[29,69288,51436],{"class":309},[29,69290,69291,69293,69296,69298,69300,69302,69305,69307],{"class":31,"line":1855},[29,69292,55363],{"class":309},[29,69294,69295],{"class":51429},"option",[29,69297,66780],{"class":35},[29,69299,355],{"class":309},[29,69301,10136],{"class":103},[29,69303,69304],{"class":309},">男\u003C\u002F",[29,69306,69295],{"class":51429},[29,69308,51436],{"class":309},[29,69310,69311,69313,69315,69317,69319,69321,69324,69326],{"class":31,"line":1869},[29,69312,55363],{"class":309},[29,69314,69295],{"class":51429},[29,69316,66780],{"class":35},[29,69318,355],{"class":309},[29,69320,10205],{"class":103},[29,69322,69323],{"class":309},">女\u003C\u002F",[29,69325,69295],{"class":51429},[29,69327,51436],{"class":309},[29,69329,69330,69332,69334],{"class":31,"line":1874},[29,69331,51905],{"class":309},[29,69333,69273],{"class":51429},[29,69335,51436],{"class":309},[29,69337,69338,69341,69343,69345,69347,69349,69351,69353,69356,69358,69360,69362],{"class":31,"line":1903},[29,69339,69340],{"class":309},"    薪资：\u003C",[29,69342,53950],{"class":51429},[29,69344,53953],{"class":35},[29,69346,355],{"class":309},[29,69348,62828],{"class":103},[29,69350,53615],{"class":35},[29,69352,355],{"class":309},[29,69354,69355],{"class":103},"\"salary\"",[29,69357,15095],{"class":35},[29,69359,355],{"class":309},[29,69361,69355],{"class":103},[29,69363,59256],{"class":309},[29,69365,69366,69369,69371,69373,69375,69378,69380,69382,69384],{"class":31,"line":1908},[29,69367,69368],{"class":309},"    就业城市：\u003C",[29,69370,69273],{"class":51429},[29,69372,15095],{"class":35},[29,69374,355],{"class":309},[29,69376,69377],{"class":103},"\"city\"",[29,69379,53615],{"class":35},[29,69381,355],{"class":309},[29,69383,69377],{"class":103},[29,69385,51436],{"class":309},[29,69387,69388,69390,69392,69394,69396,69399,69402,69404],{"class":31,"line":1925},[29,69389,55363],{"class":309},[29,69391,69295],{"class":51429},[29,69393,66780],{"class":35},[29,69395,355],{"class":309},[29,69397,69398],{"class":103},"\"北京\"",[29,69400,69401],{"class":309},">北京\u003C\u002F",[29,69403,69295],{"class":51429},[29,69405,51436],{"class":309},[29,69407,69408,69410,69412,69414,69416,69419,69422,69424],{"class":31,"line":1930},[29,69409,55363],{"class":309},[29,69411,69295],{"class":51429},[29,69413,66780],{"class":35},[29,69415,355],{"class":309},[29,69417,69418],{"class":103},"\"上海\"",[29,69420,69421],{"class":309},">上海\u003C\u002F",[29,69423,69295],{"class":51429},[29,69425,51436],{"class":309},[29,69427,69428,69430,69432,69434,69436,69439,69442,69444],{"class":31,"line":1935},[29,69429,55363],{"class":309},[29,69431,69295],{"class":51429},[29,69433,66780],{"class":35},[29,69435,355],{"class":309},[29,69437,69438],{"class":103},"\"广州\"",[29,69440,69441],{"class":309},">广州\u003C\u002F",[29,69443,69295],{"class":51429},[29,69445,51436],{"class":309},[29,69447,69448,69450,69452,69454,69456,69459,69462,69464],{"class":31,"line":1940},[29,69449,55363],{"class":309},[29,69451,69295],{"class":51429},[29,69453,66780],{"class":35},[29,69455,355],{"class":309},[29,69457,69458],{"class":103},"\"深圳\"",[29,69460,69461],{"class":309},">深圳\u003C\u002F",[29,69463,69295],{"class":51429},[29,69465,51436],{"class":309},[29,69467,69468,69470,69472,69474,69476,69479,69482,69484],{"class":31,"line":1954},[29,69469,55363],{"class":309},[29,69471,69295],{"class":51429},[29,69473,66780],{"class":35},[29,69475,355],{"class":309},[29,69477,69478],{"class":103},"\"曹县\"",[29,69480,69481],{"class":309},">曹县\u003C\u002F",[29,69483,69295],{"class":51429},[29,69485,51436],{"class":309},[29,69487,69488,69490,69492],{"class":31,"line":1959},[29,69489,51905],{"class":309},[29,69491,69273],{"class":51429},[29,69493,51436],{"class":309},[29,69495,69496,69498,69500,69502,69504,69507,69510,69512],{"class":31,"line":2752},[29,69497,51470],{"class":309},[29,69499,54016],{"class":51429},[29,69501,53615],{"class":35},[29,69503,355],{"class":309},[29,69505,69506],{"class":103},"\"add\"",[29,69508,69509],{"class":309},">录入\u003C\u002F",[29,69511,54016],{"class":51429},[29,69513,51436],{"class":309},[29,69515,69516,69518,69520],{"class":31,"line":2766},[29,69517,52546],{"class":309},[29,69519,66754],{"class":51429},[29,69521,51436],{"class":309},[29,69523,69524],{"class":31,"line":2774},[29,69525,2575],{"emptyLinePlaceholder":233},[29,69527,69528,69530,69532,69535,69537],{"class":31,"line":2779},[29,69529,52273],{"class":309},[29,69531,10],{"class":51429},[29,69533,69534],{"class":309},">就业榜\u003C\u002F",[29,69536,10],{"class":51429},[29,69538,51436],{"class":309},[29,69540,69541,69543,69545],{"class":31,"line":2785},[29,69542,52273],{"class":309},[29,69544,445],{"class":51429},[29,69546,51436],{"class":309},[29,69548,69549,69551,69553],{"class":31,"line":2791},[29,69550,51470],{"class":309},[29,69552,448],{"class":51429},[29,69554,51436],{"class":309},[29,69556,69557,69559,69561],{"class":31,"line":2796},[29,69558,55363],{"class":309},[29,69560,451],{"class":51429},[29,69562,51436],{"class":309},[29,69564,69565,69567,69569,69572,69574],{"class":31,"line":8123},[29,69566,55431],{"class":309},[29,69568,454],{"class":51429},[29,69570,69571],{"class":309},">序号\u003C\u002F",[29,69573,454],{"class":51429},[29,69575,51436],{"class":309},[29,69577,69578,69580,69582,69585,69587],{"class":31,"line":8147},[29,69579,55431],{"class":309},[29,69581,454],{"class":51429},[29,69583,69584],{"class":309},">姓名\u003C\u002F",[29,69586,454],{"class":51429},[29,69588,51436],{"class":309},[29,69590,69591,69593,69595,69598,69600],{"class":31,"line":8152},[29,69592,55431],{"class":309},[29,69594,454],{"class":51429},[29,69596,69597],{"class":309},">年龄\u003C\u002F",[29,69599,454],{"class":51429},[29,69601,51436],{"class":309},[29,69603,69604,69606,69608,69611,69613],{"class":31,"line":8158},[29,69605,55431],{"class":309},[29,69607,454],{"class":51429},[29,69609,69610],{"class":309},">性别\u003C\u002F",[29,69612,454],{"class":51429},[29,69614,51436],{"class":309},[29,69616,69617,69619,69621,69624,69626],{"class":31,"line":8185},[29,69618,55431],{"class":309},[29,69620,454],{"class":51429},[29,69622,69623],{"class":309},">薪资\u003C\u002F",[29,69625,454],{"class":51429},[29,69627,51436],{"class":309},[29,69629,69630,69632,69634,69637,69639],{"class":31,"line":8190},[29,69631,55431],{"class":309},[29,69633,454],{"class":51429},[29,69635,69636],{"class":309},">就业城市\u003C\u002F",[29,69638,454],{"class":51429},[29,69640,51436],{"class":309},[29,69642,69643,69645,69647,69650,69652],{"class":31,"line":8196},[29,69644,55431],{"class":309},[29,69646,454],{"class":51429},[29,69648,69649],{"class":309},">操作\u003C\u002F",[29,69651,454],{"class":51429},[29,69653,51436],{"class":309},[29,69655,69656,69658,69660],{"class":31,"line":8208},[29,69657,55536],{"class":309},[29,69659,451],{"class":51429},[29,69661,51436],{"class":309},[29,69663,69664,69666,69668],{"class":31,"line":8220},[29,69665,51905],{"class":309},[29,69667,448],{"class":51429},[29,69669,51436],{"class":309},[29,69671,69672,69674,69676],{"class":31,"line":8232},[29,69673,51470],{"class":309},[29,69675,492],{"class":51429},[29,69677,51436],{"class":309},[29,69679,69680],{"class":31,"line":9891},[29,69681,69682],{"class":367},"      \u003C!-- \n",[29,69684,69685],{"class":31,"line":9916},[29,69686,69687],{"class":367},"        \u003Ctr>\n",[29,69689,69690],{"class":31,"line":9939},[29,69691,69692],{"class":367},"          \u003Ctd>1001\u003C\u002Ftd>\n",[29,69694,69695],{"class":31,"line":9963},[29,69696,69697],{"class":367},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[29,69699,69700],{"class":31,"line":9968},[29,69701,69702],{"class":367},"          \u003Ctd>19\u003C\u002Ftd>\n",[29,69704,69705],{"class":31,"line":9973},[29,69706,69707],{"class":367},"          \u003Ctd>男\u003C\u002Ftd>\n",[29,69709,69710],{"class":31,"line":9978},[29,69711,69712],{"class":367},"          \u003Ctd>15000\u003C\u002Ftd>\n",[29,69714,69715],{"class":31,"line":9987},[29,69716,69717],{"class":367},"          \u003Ctd>上海\u003C\u002Ftd>\n",[29,69719,69720],{"class":31,"line":9992},[29,69721,69722],{"class":367},"          \u003Ctd>\n",[29,69724,69725],{"class":31,"line":9998},[29,69726,69727],{"class":367},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[29,69729,69730],{"class":31,"line":10019},[29,69731,69732],{"class":367},"          \u003C\u002Ftd>\n",[29,69734,69735],{"class":31,"line":10025},[29,69736,69737],{"class":367},"        \u003C\u002Ftr> \n",[29,69739,69740],{"class":31,"line":10039},[29,69741,69742],{"class":367},"        -->\n",[29,69744,69745,69747,69749],{"class":31,"line":10045},[29,69746,51905],{"class":309},[29,69748,492],{"class":51429},[29,69750,51436],{"class":309},[29,69752,69753,69755,69757],{"class":31,"line":10072},[29,69754,52546],{"class":309},[29,69756,445],{"class":51429},[29,69758,51436],{"class":309},[29,69760,69761,69763,69765],{"class":31,"line":10081},[29,69762,52273],{"class":309},[29,69764,51942],{"class":51429},[29,69766,51436],{"class":309},[29,69768,69769],{"class":31,"line":10087},[29,69770,60087],{"class":367},[29,69772,69773,69775,69778,69780,69782,69784,69786,69789],{"class":31,"line":10095},[29,69774,11396],{"class":305},[29,69776,69777],{"class":39}," uname",[29,69779,13739],{"class":305},[29,69781,54525],{"class":309},[29,69783,54528],{"class":35},[29,69785,310],{"class":309},[29,69787,69788],{"class":103},"'.uname'",[29,69790,316],{"class":309},[29,69792,69793,69795,69797,69799,69801,69803,69805,69808],{"class":31,"line":10100},[29,69794,11396],{"class":305},[29,69796,15864],{"class":39},[29,69798,13739],{"class":305},[29,69800,54525],{"class":309},[29,69802,54528],{"class":35},[29,69804,310],{"class":309},[29,69806,69807],{"class":103},"'.age'",[29,69809,316],{"class":309},[29,69811,69812,69814,69817,69819,69821,69823,69825,69828],{"class":31,"line":16779},[29,69813,11396],{"class":305},[29,69815,69816],{"class":39}," gender",[29,69818,13739],{"class":305},[29,69820,54525],{"class":309},[29,69822,54528],{"class":35},[29,69824,310],{"class":309},[29,69826,69827],{"class":103},"'.gender'",[29,69829,316],{"class":309},[29,69831,69832,69834,69837,69839,69841,69843,69845,69848],{"class":31,"line":16785},[29,69833,11396],{"class":305},[29,69835,69836],{"class":39}," salary",[29,69838,13739],{"class":305},[29,69840,54525],{"class":309},[29,69842,54528],{"class":35},[29,69844,310],{"class":309},[29,69846,69847],{"class":103},"'.salary'",[29,69849,316],{"class":309},[29,69851,69852,69854,69857,69859,69861,69863,69865,69868],{"class":31,"line":16808},[29,69853,11396],{"class":305},[29,69855,69856],{"class":39}," city",[29,69858,13739],{"class":305},[29,69860,54525],{"class":309},[29,69862,54528],{"class":35},[29,69864,310],{"class":309},[29,69866,69867],{"class":103},"'.city'",[29,69869,316],{"class":309},[29,69871,69872,69874,69877,69879,69881,69883,69885,69888],{"class":31,"line":16814},[29,69873,11396],{"class":305},[29,69875,69876],{"class":39}," tbody",[29,69878,13739],{"class":305},[29,69880,54525],{"class":309},[29,69882,54528],{"class":35},[29,69884,310],{"class":309},[29,69886,69887],{"class":103},"'tbody'",[29,69889,316],{"class":309},[29,69891,69892],{"class":31,"line":16837},[29,69893,2575],{"emptyLinePlaceholder":233},[29,69895,69896],{"class":31,"line":16851},[29,69897,69898],{"class":367},"    \u002F\u002F 获取所有带有name属性的元素\n",[29,69900,69901,69903,69906,69908,69910,69912,69914,69917],{"class":31,"line":16871},[29,69902,11396],{"class":305},[29,69904,69905],{"class":39}," items",[29,69907,13739],{"class":305},[29,69909,54525],{"class":309},[29,69911,55810],{"class":35},[29,69913,310],{"class":309},[29,69915,69916],{"class":103},"'[name]'",[29,69918,316],{"class":309},[29,69920,69921],{"class":31,"line":16877},[29,69922,69923],{"class":367},"    \u002F\u002F 声明一个空的数组\n",[29,69925,69926,69928,69930,69932],{"class":31,"line":16888},[29,69927,11396],{"class":305},[29,69929,57824],{"class":39},[29,69931,13739],{"class":305},[29,69933,51967],{"class":309},[29,69935,69936],{"class":31,"line":16911},[29,69937,69938],{"class":367},"    \u002F\u002F 1.录入模块\n",[29,69940,69941],{"class":31,"line":16933},[29,69942,69943],{"class":367},"    \u002F\u002F 1.1这是一个表单提交事件\n",[29,69945,69946,69948,69951,69953,69955,69957,69959,69962],{"class":31,"line":16938},[29,69947,11396],{"class":305},[29,69949,69950],{"class":39}," info",[29,69952,13739],{"class":305},[29,69954,54525],{"class":309},[29,69956,54528],{"class":35},[29,69958,310],{"class":309},[29,69960,69961],{"class":103},"'.info'",[29,69963,316],{"class":309},[29,69965,69966,69969,69971,69973,69976,69978,69980,69982,69984],{"class":31,"line":16944},[29,69967,69968],{"class":309},"    info.",[29,69970,57942],{"class":35},[29,69972,310],{"class":309},[29,69974,69975],{"class":103},"'submit'",[29,69977,12610],{"class":309},[29,69979,54578],{"class":305},[29,69981,1834],{"class":309},[29,69983,383],{"class":5391},[29,69985,12617],{"class":309},[29,69987,69988],{"class":31,"line":16958},[29,69989,69990],{"class":367},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[29,69992,69993,69996,69999],{"class":31,"line":16971},[29,69994,69995],{"class":309},"      e.",[29,69997,69998],{"class":35},"preventDefault",[29,70000,2151],{"class":309},[29,70002,70003],{"class":31,"line":16976},[29,70004,60141],{"class":367},[29,70006,70007],{"class":31,"line":16990},[29,70008,2575],{"emptyLinePlaceholder":233},[29,70010,70011],{"class":31,"line":16995},[29,70012,70013],{"class":367},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[29,70015,70016],{"class":31,"line":17001},[29,70017,70018],{"class":367},"      \u002F\u002F 先遍历循环\n",[29,70020,70021,70023,70025,70027,70029,70031,70033,70035,70037,70040,70042,70044,70046],{"class":31,"line":17006},[29,70022,52413],{"class":305},[29,70024,1834],{"class":309},[29,70026,51976],{"class":305},[29,70028,9613],{"class":309},[29,70030,355],{"class":305},[29,70032,4268],{"class":39},[29,70034,9620],{"class":309},[29,70036,1218],{"class":305},[29,70038,70039],{"class":309}," items.",[29,70041,52097],{"class":39},[29,70043,3389],{"class":309},[29,70045,2467],{"class":305},[29,70047,12617],{"class":309},[29,70049,70050,70052,70055,70057,70060],{"class":31,"line":17020},[29,70051,2672],{"class":305},[29,70053,70054],{"class":309}," (items[i].value ",[29,70056,54615],{"class":305},[29,70058,70059],{"class":103}," ''",[29,70061,12617],{"class":309},[29,70063,70064,70067,70070,70072,70075],{"class":31,"line":17025},[29,70065,70066],{"class":305},"          return",[29,70068,70069],{"class":35}," alert",[29,70071,310],{"class":309},[29,70073,70074],{"class":103},"'输入内容不能为空'",[29,70076,316],{"class":309},[29,70078,70079],{"class":31,"line":17030},[29,70080,2704],{"class":309},[29,70082,70083],{"class":31,"line":17044},[29,70084,52527],{"class":309},[29,70086,70087],{"class":31,"line":17056},[29,70088,2575],{"emptyLinePlaceholder":233},[29,70090,70091],{"class":31,"line":17061},[29,70092,70093],{"class":367},"      \u002F\u002F 创建新的对象\n",[29,70095,70096,70098,70101,70103],{"class":31,"line":17074},[29,70097,58357],{"class":305},[29,70099,70100],{"class":39}," obj",[29,70102,13739],{"class":305},[29,70104,15747],{"class":309},[29,70106,70107,70110,70112,70114,70116],{"class":31,"line":17079},[29,70108,70109],{"class":309},"        stuID: arr.",[29,70111,52097],{"class":39},[29,70113,45695],{"class":305},[29,70115,25247],{"class":39},[29,70117,31595],{"class":309},[29,70119,70120],{"class":31,"line":17084},[29,70121,70122],{"class":309},"        uname: uname.value,\n",[29,70124,70125],{"class":31,"line":17089},[29,70126,70127],{"class":309},"        age: age.value,\n",[29,70129,70130],{"class":31,"line":17102},[29,70131,70132],{"class":309},"        gender: gender.value,\n",[29,70134,70135],{"class":31,"line":17107},[29,70136,70137],{"class":309},"        salary: salary.value,\n",[29,70139,70140],{"class":31,"line":32762},[29,70141,70142],{"class":309},"        city: city.value\n",[29,70144,70145],{"class":31,"line":32768},[29,70146,52527],{"class":309},[29,70148,70149],{"class":31,"line":32774},[29,70150,70151],{"class":367},"      \u002F\u002F console.log(obj);\n",[29,70153,70154],{"class":31,"line":32780},[29,70155,70156],{"class":367},"      \u002F\u002F 追加到数组里面\n",[29,70158,70159,70161,70163],{"class":31,"line":32786},[29,70160,58136],{"class":309},[29,70162,52013],{"class":35},[29,70164,70165],{"class":309},"(obj)\n",[29,70167,70168],{"class":31,"line":32797},[29,70169,70170],{"class":367},"      \u002F\u002F console.log(arr);\n",[29,70172,70173],{"class":31,"line":32803},[29,70174,70175],{"class":367},"      \u002F\u002F 清空表单  reset重置表单\n",[29,70177,70178,70181,70183,70186],{"class":31,"line":32823},[29,70179,70180],{"class":39},"      this",[29,70182,866],{"class":309},[29,70184,70185],{"class":35},"reset",[29,70187,2151],{"class":309},[29,70189,70190],{"class":31,"line":32829},[29,70191,70192],{"class":367},"      \u002F\u002F 调用渲染函数\n",[29,70194,70195,70198],{"class":31,"line":32840},[29,70196,70197],{"class":35},"      render",[29,70199,2151],{"class":309},[29,70201,70202],{"class":31,"line":32846},[29,70203,33590],{"class":309},[29,70205,70206],{"class":31,"line":32852},[29,70207,70208],{"class":367},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[29,70210,70211,70214,70217],{"class":31,"line":32858},[29,70212,70213],{"class":305},"    function",[29,70215,70216],{"class":35}," render",[29,70218,11028],{"class":309},[29,70220,70221],{"class":31,"line":32864},[29,70222,70223],{"class":367},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[29,70225,70226,70229,70231],{"class":31,"line":32870},[29,70227,70228],{"class":309},"      tbody.innerHTML ",[29,70230,355],{"class":305},[29,70232,70233],{"class":103}," ''\n",[29,70235,70236],{"class":31,"line":32876},[29,70237,70238],{"class":367},"      \u002F\u002F 遍历数组\n",[29,70240,70241,70243,70245,70247,70249,70251,70253,70255,70257,70259,70261,70263,70265],{"class":31,"line":32882},[29,70242,52413],{"class":305},[29,70244,1834],{"class":309},[29,70246,51976],{"class":305},[29,70248,9613],{"class":309},[29,70250,355],{"class":305},[29,70252,4268],{"class":39},[29,70254,9620],{"class":309},[29,70256,1218],{"class":305},[29,70258,52094],{"class":309},[29,70260,52097],{"class":39},[29,70262,3389],{"class":309},[29,70264,2467],{"class":305},[29,70266,12617],{"class":309},[29,70268,70269,70271,70274,70276,70278,70281,70283,70286],{"class":31,"line":32902},[29,70270,61399],{"class":305},[29,70272,70273],{"class":39}," tr",[29,70275,13739],{"class":305},[29,70277,54525],{"class":309},[29,70279,70280],{"class":35},"createElement",[29,70282,310],{"class":309},[29,70284,70285],{"class":103},"'tr'",[29,70287,316],{"class":309},[29,70289,70290,70293,70295],{"class":31,"line":32908},[29,70291,70292],{"class":309},"        tr.innerHTML ",[29,70294,355],{"class":305},[29,70296,70297],{"class":103}," `\n",[29,70299,70300,70303,70305,70307,70309,70312,70315],{"class":31,"line":32924},[29,70301,70302],{"class":103},"        \u003Ctd>${",[29,70304,4055],{"class":309},[29,70306,1198],{"class":103},[29,70308,749],{"class":309},[29,70310,70311],{"class":103},"].",[29,70313,70314],{"class":309},"stuID",[29,70316,70317],{"class":103},"}\u003C\u002Ftd>\n",[29,70319,70320,70323,70325,70327,70329,70331,70334],{"class":31,"line":32930},[29,70321,70322],{"class":103},"          \u003Ctd>${",[29,70324,4055],{"class":309},[29,70326,1198],{"class":103},[29,70328,749],{"class":309},[29,70330,70311],{"class":103},[29,70332,70333],{"class":309},"uname",[29,70335,70317],{"class":103},[29,70337,70338,70340,70342,70344,70346,70348,70351],{"class":31,"line":32944},[29,70339,70322],{"class":103},[29,70341,4055],{"class":309},[29,70343,1198],{"class":103},[29,70345,749],{"class":309},[29,70347,70311],{"class":103},[29,70349,70350],{"class":309},"age",[29,70352,70317],{"class":103},[29,70354,70355,70357,70359,70361,70363,70365,70368],{"class":31,"line":32950},[29,70356,70322],{"class":103},[29,70358,4055],{"class":309},[29,70360,1198],{"class":103},[29,70362,749],{"class":309},[29,70364,70311],{"class":103},[29,70366,70367],{"class":309},"gender",[29,70369,70317],{"class":103},[29,70371,70372,70374,70376,70378,70380,70382,70385],{"class":31,"line":32965},[29,70373,70322],{"class":103},[29,70375,4055],{"class":309},[29,70377,1198],{"class":103},[29,70379,749],{"class":309},[29,70381,70311],{"class":103},[29,70383,70384],{"class":309},"salary",[29,70386,70317],{"class":103},[29,70388,70389,70391,70393,70395,70397,70399,70402],{"class":31,"line":32971},[29,70390,70322],{"class":103},[29,70392,4055],{"class":309},[29,70394,1198],{"class":103},[29,70396,749],{"class":309},[29,70398,70311],{"class":103},[29,70400,70401],{"class":309},"city",[29,70403,70317],{"class":103},[29,70405,70406],{"class":31,"line":32980},[29,70407,69722],{"class":103},[29,70409,70410,70413,70415],{"class":31,"line":32986},[29,70411,70412],{"class":103},"            \u003Ca href=\"javascript:\" data-id=${",[29,70414,749],{"class":309},[29,70416,70417],{"class":103},"}>删除\u003C\u002Fa>\n",[29,70419,70420],{"class":31,"line":32995},[29,70421,70422],{"class":103},"          \u003C\u002Ftd> \n",[29,70424,70425],{"class":31,"line":33001},[29,70426,70427],{"class":103},"          `\n",[29,70429,70430],{"class":31,"line":33007},[29,70431,70432],{"class":367},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[29,70434,70435,70438,70441],{"class":31,"line":33016},[29,70436,70437],{"class":309},"        tbody.",[29,70439,70440],{"class":35},"appendChild",[29,70442,70443],{"class":309},"(tr)\n",[29,70445,70446],{"class":31,"line":33022},[29,70447,52527],{"class":309},[29,70449,70450],{"class":31,"line":33033},[29,70451,2362],{"class":309},[29,70453,70454],{"class":31,"line":33039},[29,70455,2575],{"emptyLinePlaceholder":233},[29,70457,70458],{"class":31,"line":33058},[29,70459,70460],{"class":367},"    \u002F\u002F 3.删除委托\n",[29,70462,70463],{"class":31,"line":33064},[29,70464,70465],{"class":367},"    \u002F\u002F 3.1 事件委托 tbody\n",[29,70467,70468,70471,70473,70475,70477,70479,70481,70483,70485],{"class":31,"line":33075},[29,70469,70470],{"class":309},"    tbody.",[29,70472,57942],{"class":35},[29,70474,310],{"class":309},[29,70476,57947],{"class":103},[29,70478,12610],{"class":309},[29,70480,54578],{"class":305},[29,70482,1834],{"class":309},[29,70484,383],{"class":5391},[29,70486,12617],{"class":309},[29,70488,70489,70491,70493,70495,70497],{"class":31,"line":33081},[29,70490,54609],{"class":305},[29,70492,67163],{"class":309},[29,70494,54615],{"class":305},[29,70496,68385],{"class":103},[29,70498,12617],{"class":309},[29,70500,70501],{"class":31,"line":33101},[29,70502,70503],{"class":367},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[29,70505,70506],{"class":31,"line":33117},[29,70507,70508],{"class":367},"        \u002F\u002F console.log(e.target.dataset.id);\n",[29,70510,70511],{"class":31,"line":33123},[29,70512,70513],{"class":367},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[29,70515,70516,70519,70521,70524,70526],{"class":31,"line":33137},[29,70517,70518],{"class":309},"        arr.",[29,70520,58139],{"class":35},[29,70522,70523],{"class":309},"(e.target.dataset.id, ",[29,70525,525],{"class":39},[29,70527,316],{"class":309},[29,70529,70530],{"class":31,"line":33143},[29,70531,70532],{"class":367},"        \u002F\u002F 重新渲染一次\n",[29,70534,70535,70538],{"class":31,"line":33149},[29,70536,70537],{"class":35},"        render",[29,70539,2151],{"class":309},[29,70541,70542],{"class":31,"line":33160},[29,70543,52527],{"class":309},[29,70545,70546],{"class":31,"line":33166},[29,70547,33590],{"class":309},[29,70549,70550,70552,70554],{"class":31,"line":33172},[29,70551,52546],{"class":309},[29,70553,51942],{"class":51429},[29,70555,51436],{"class":309},[29,70557,70558],{"class":31,"line":33182},[29,70559,2575],{"emptyLinePlaceholder":233},[29,70561,70562,70564,70566],{"class":31,"line":33188},[29,70563,51914],{"class":309},[29,70565,51929],{"class":51429},[29,70567,51436],{"class":309},[29,70569,70570],{"class":31,"line":33199},[29,70571,2575],{"emptyLinePlaceholder":233},[29,70573,70574,70576,70578],{"class":31,"line":33205},[29,70575,51914],{"class":309},[29,70577,50764],{"class":51429},[29,70579,51436],{"class":309},[171,70581,70582],{},"样式：",[19,70584,70588],{"className":70585,"code":70586,"language":70587,"meta":24,"style":24},"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",[26,70589,70590,70595,70605,70614,70618,70622,70627,70637,70642,70646,70651,70661,70666,70675,70679,70683,70688,70693,70703,70713,70718,70722,70727,70736,70746,70751,70761,70771,70775,70780,70788,70792,70797,70802,70807,70815,70824,70828,70833,70842,70846,70851,70860,70864,70869,70878,70887,70895,70899,70904,70913,70923,70932,70942,70948,70957,70967,70977,70981,70986,70995,71003,71013,71021,71030,71039,71049,71057,71061,71066,71075],{"__ignoreMap":24},[29,70591,70592],{"class":31,"line":32},[29,70593,70594],{"class":309},"* {\n",[29,70596,70597,70600,70602],{"class":31,"line":43},[29,70598,70599],{"class":51429},"  margin",[29,70601,51566],{"class":309},[29,70603,70604],{"class":103},"0;\n",[29,70606,70607,70610,70612],{"class":31,"line":51},[29,70608,70609],{"class":103},"  padding",[29,70611,51566],{"class":309},[29,70613,70604],{"class":103},[29,70615,70616],{"class":31,"line":59},[29,70617,1741],{"class":309},[29,70619,70620],{"class":31,"line":67},[29,70621,2575],{"emptyLinePlaceholder":233},[29,70623,70624],{"class":31,"line":75},[29,70625,70626],{"class":103},"a {\n",[29,70628,70629,70632,70634],{"class":31,"line":83},[29,70630,70631],{"class":51429},"  text-decoration",[29,70633,51566],{"class":309},[29,70635,70636],{"class":103},"none;\n",[29,70638,70639],{"class":31,"line":158},[29,70640,70641],{"class":103},"  color:#721c24;\n",[29,70643,70644],{"class":31,"line":166},[29,70645,1741],{"class":309},[29,70647,70648],{"class":31,"line":1505},[29,70649,70650],{"class":103},"h1 {\n",[29,70652,70653,70656,70658],{"class":31,"line":1788},[29,70654,70655],{"class":51429},"  text-align",[29,70657,51566],{"class":309},[29,70659,70660],{"class":103},"center;\n",[29,70662,70663],{"class":31,"line":1793},[29,70664,70665],{"class":103},"  color:#333;\n",[29,70667,70668,70670,70672],{"class":31,"line":1799},[29,70669,70599],{"class":51429},[29,70671,51566],{"class":309},[29,70673,70674],{"class":103},"20px 0;\n",[29,70676,70677],{"class":31,"line":1804},[29,70678,2849],{"class":309},[29,70680,70681],{"class":31,"line":1818},[29,70682,1741],{"class":309},[29,70684,70685],{"class":31,"line":1823},[29,70686,70687],{"class":103},"table {\n",[29,70689,70690],{"class":31,"line":1829},[29,70691,70692],{"class":103},"  margin:0 auto;\n",[29,70694,70695,70698,70700],{"class":31,"line":1850},[29,70696,70697],{"class":51429},"  width",[29,70699,51566],{"class":309},[29,70701,70702],{"class":103},"800px;\n",[29,70704,70705,70708,70710],{"class":31,"line":1855},[29,70706,70707],{"class":51429},"  border-collapse",[29,70709,51566],{"class":309},[29,70711,70712],{"class":103},"collapse;\n",[29,70714,70715],{"class":31,"line":1869},[29,70716,70717],{"class":103},"  color:#004085;\n",[29,70719,70720],{"class":31,"line":1874},[29,70721,1741],{"class":309},[29,70723,70724],{"class":31,"line":1903},[29,70725,70726],{"class":103},"th {\n",[29,70728,70729,70731,70733],{"class":31,"line":1908},[29,70730,70609],{"class":51429},[29,70732,51566],{"class":309},[29,70734,70735],{"class":103},"10px;\n",[29,70737,70738,70741,70743],{"class":31,"line":1925},[29,70739,70740],{"class":51429},"  background",[29,70742,51566],{"class":309},[29,70744,70745],{"class":367},"#cfe5ff;\n",[29,70747,70748],{"class":31,"line":1930},[29,70749,70750],{"class":309},"  \n",[29,70752,70753,70756,70758],{"class":31,"line":1935},[29,70754,70755],{"class":51429},"  font-size",[29,70757,51566],{"class":309},[29,70759,70760],{"class":103},"20px;\n",[29,70762,70763,70766,70768],{"class":31,"line":1940},[29,70764,70765],{"class":51429},"  font-weight",[29,70767,51566],{"class":309},[29,70769,70770],{"class":103},"400;\n",[29,70772,70773],{"class":31,"line":1954},[29,70774,1741],{"class":309},[29,70776,70777],{"class":31,"line":1959},[29,70778,70779],{"class":103},"td,th {\n",[29,70781,70782,70785],{"class":31,"line":2752},[29,70783,70784],{"class":103},"  border:1px solid",[29,70786,70787],{"class":367}," #b8daff;\n",[29,70789,70790],{"class":31,"line":2766},[29,70791,1741],{"class":309},[29,70793,70794],{"class":31,"line":2774},[29,70795,70796],{"class":103},"td {\n",[29,70798,70799],{"class":31,"line":2779},[29,70800,70801],{"class":103},"  padding:10px;\n",[29,70803,70804],{"class":31,"line":2785},[29,70805,70806],{"class":103},"  color:#666;\n",[29,70808,70809,70811,70813],{"class":31,"line":2791},[29,70810,70655],{"class":51429},[29,70812,51566],{"class":309},[29,70814,70660],{"class":103},[29,70816,70817,70819,70821],{"class":31,"line":2796},[29,70818,70755],{"class":51429},[29,70820,51566],{"class":309},[29,70822,70823],{"class":103},"16px;\n",[29,70825,70826],{"class":31,"line":8123},[29,70827,1741],{"class":309},[29,70829,70830],{"class":31,"line":8147},[29,70831,70832],{"class":103},"tbody tr {\n",[29,70834,70835,70837,70839],{"class":31,"line":8152},[29,70836,70740],{"class":51429},[29,70838,51566],{"class":309},[29,70840,70841],{"class":367},"#fff;\n",[29,70843,70844],{"class":31,"line":8158},[29,70845,1741],{"class":309},[29,70847,70848],{"class":31,"line":8185},[29,70849,70850],{"class":103},"tbody tr:hover {\n",[29,70852,70853,70855,70857],{"class":31,"line":8190},[29,70854,70740],{"class":51429},[29,70856,51566],{"class":309},[29,70858,70859],{"class":367},"#e1ecf8;\n",[29,70861,70862],{"class":31,"line":8196},[29,70863,1741],{"class":309},[29,70865,70866],{"class":31,"line":8208},[29,70867,70868],{"class":103},".info {\n",[29,70870,70871,70873,70875],{"class":31,"line":8220},[29,70872,70697],{"class":51429},[29,70874,51566],{"class":309},[29,70876,70877],{"class":103},"900px;\n",[29,70879,70880,70882,70884],{"class":31,"line":8232},[29,70881,70599],{"class":51429},[29,70883,51566],{"class":309},[29,70885,70886],{"class":103},"50px auto;\n",[29,70888,70889,70891,70893],{"class":31,"line":9891},[29,70890,70655],{"class":51429},[29,70892,51566],{"class":309},[29,70894,70660],{"class":103},[29,70896,70897],{"class":31,"line":9916},[29,70898,1741],{"class":309},[29,70900,70901],{"class":31,"line":9939},[29,70902,70903],{"class":103},".info  input, .info select {\n",[29,70905,70906,70908,70910],{"class":31,"line":9963},[29,70907,70697],{"class":51429},[29,70909,51566],{"class":309},[29,70911,70912],{"class":103},"80px;\n",[29,70914,70915,70918,70920],{"class":31,"line":9968},[29,70916,70917],{"class":51429},"  height",[29,70919,51566],{"class":309},[29,70921,70922],{"class":103},"27px;\n",[29,70924,70925,70928,70930],{"class":31,"line":9973},[29,70926,70927],{"class":51429},"  outline",[29,70929,51566],{"class":309},[29,70931,70636],{"class":103},[29,70933,70934,70937,70939],{"class":31,"line":9978},[29,70935,70936],{"class":51429},"  border-radius",[29,70938,51566],{"class":309},[29,70940,70941],{"class":103},"5px;\n",[29,70943,70944,70946],{"class":31,"line":9987},[29,70945,70784],{"class":103},[29,70947,70787],{"class":367},[29,70949,70950,70953,70955],{"class":31,"line":9992},[29,70951,70952],{"class":51429},"  padding-left",[29,70954,51566],{"class":309},[29,70956,70941],{"class":103},[29,70958,70959,70962,70964],{"class":31,"line":9998},[29,70960,70961],{"class":51429},"  box-sizing",[29,70963,51566],{"class":309},[29,70965,70966],{"class":103},"border-box;\n",[29,70968,70969,70972,70974],{"class":31,"line":10019},[29,70970,70971],{"class":51429},"  margin-right",[29,70973,51566],{"class":309},[29,70975,70976],{"class":103},"15px;\n",[29,70978,70979],{"class":31,"line":10025},[29,70980,1741],{"class":309},[29,70982,70983],{"class":31,"line":10039},[29,70984,70985],{"class":103},".info button {\n",[29,70987,70988,70990,70992],{"class":31,"line":10045},[29,70989,70697],{"class":51429},[29,70991,51566],{"class":309},[29,70993,70994],{"class":103},"60px;\n",[29,70996,70997,70999,71001],{"class":31,"line":10072},[29,70998,70917],{"class":51429},[29,71000,51566],{"class":309},[29,71002,70922],{"class":103},[29,71004,71005,71008,71010],{"class":31,"line":10081},[29,71006,71007],{"class":51429},"  background-color",[29,71009,51566],{"class":309},[29,71011,71012],{"class":367},"#004085;\n",[29,71014,71015,71017,71019],{"class":31,"line":10087},[29,71016,70927],{"class":51429},[29,71018,51566],{"class":309},[29,71020,70636],{"class":103},[29,71022,71023,71026,71028],{"class":31,"line":10095},[29,71024,71025],{"class":51429},"  border",[29,71027,51566],{"class":309},[29,71029,70604],{"class":103},[29,71031,71032,71035,71037],{"class":31,"line":10100},[29,71033,71034],{"class":51429},"  color",[29,71036,51566],{"class":309},[29,71038,70841],{"class":367},[29,71040,71041,71044,71046],{"class":31,"line":16779},[29,71042,71043],{"class":51429},"  cursor",[29,71045,51566],{"class":309},[29,71047,71048],{"class":103},"pointer;\n",[29,71050,71051,71053,71055],{"class":31,"line":16785},[29,71052,70936],{"class":51429},[29,71054,51566],{"class":309},[29,71056,70941],{"class":103},[29,71058,71059],{"class":31,"line":16808},[29,71060,1741],{"class":309},[29,71062,71063],{"class":31,"line":16814},[29,71064,71065],{"class":103},".info .age {\n",[29,71067,71068,71070,71072],{"class":31,"line":16837},[29,71069,70697],{"class":51429},[29,71071,51566],{"class":309},[29,71073,71074],{"class":103},"50px;\n",[29,71076,71077],{"class":31,"line":16851},[29,71078,1741],{"class":309},[171,71080,71081],{},"思路：",[171,71083,71084],{},[1638,71085],{"alt":24,"src":71086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[171,71088,71089],{},[1638,71090],{"alt":24,"src":71091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[171,71093,71094],{},[1638,71095],{"alt":24,"src":71096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[275,71098,71100],{"id":71099},"_3315-重绘回流","3.3.15 重绘回流",[171,71102,71103],{},[1638,71104],{"alt":24,"src":71105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[171,71107,71108],{},[1638,71109],{"alt":24,"src":71110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[171,71112,71113],{},[1638,71114],{"alt":24,"src":71115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71117,71119],{"id":71118},"_34-bom","3.4 BOM",[171,71121,71122],{},[1638,71123],{"alt":24,"src":71124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[171,71126,71127],{},"平时写的document省略了window而已，实际上是window.document",[171,71129,71130],{},"函数也是这样，调用的时候实际为window.fn()",[171,71132,71133],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[171,71135,71136],{},"window大部分情况下可以省略",[275,71138,71140],{"id":71139},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[171,71142,71143],{},"只执行一次",[171,71145,71146],{},[1638,71147],{"alt":24,"src":71148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[171,71150,71151],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[171,71153,71154],{},[1638,71155],{"alt":24,"src":71156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[275,71158,71160],{"id":71159},"_342-js执行机制","3.4.2 JS执行机制",[171,71162,71163],{},[1638,71164],{"alt":24,"src":71165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[171,71167,71168],{},"两个的结果都是1111 3333 2222",[171,71170,71171],{},[1638,71172],{"alt":24,"src":71173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[171,71175,71176],{},[1638,71177],{"alt":24,"src":71178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[171,71180,71181],{},[1638,71182],{"alt":24,"src":71183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[171,71185,71186],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[171,71188,71189],{},"工作流程：",[171,71191,71192],{},[1638,71193],{"alt":24,"src":71194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[171,71196,71197],{},[1638,71198],{"alt":24,"src":71199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[171,71201,71202],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[171,71204,71205],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[275,71207,71209],{"id":71208},"_343-location对象","3.4.3 location对象",[171,71211,71212],{},"location对象属于window这个全局对象下的，可以 省略window",[171,71214,71215],{},[1638,71216],{"alt":24,"src":71217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[171,71219,71220],{},"href可以跳转页面",[259,71222,71223],{},[178,71224,71225],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[171,71227,71228],{},"search得到提交信息之后网站后边的地址",[171,71230,71231],{},[1638,71232],{"alt":24,"src":71233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[171,71235,71236],{},[1638,71237],{"alt":24,"src":71238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[259,71240,71241],{"start":43},[178,71242,71243],{},"hash:这个获取单页面应用#后边的地址",[171,71245,71246],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[171,71248,71249],{},[1638,71250],{"alt":24,"src":71251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[19,71253,71255],{"className":53196,"code":71254,"language":53198,"meta":24,"style":24},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[26,71256,71257,71277,71297],{"__ignoreMap":24},[29,71258,71259,71261,71263,71265,71267,71270,71273,71275],{"class":31,"line":32},[29,71260,52273],{"class":309},[29,71262,546],{"class":51429},[29,71264,61186],{"class":35},[29,71266,355],{"class":309},[29,71268,71269],{"class":103},"\"#\u002Fmy\"",[29,71271,71272],{"class":309},">我的\u003C\u002F",[29,71274,546],{"class":51429},[29,71276,51436],{"class":309},[29,71278,71279,71281,71283,71285,71287,71290,71293,71295],{"class":31,"line":43},[29,71280,52273],{"class":309},[29,71282,546],{"class":51429},[29,71284,61186],{"class":35},[29,71286,355],{"class":309},[29,71288,71289],{"class":103},"\"#\u002Ffriend\"",[29,71291,71292],{"class":309},">关注\u003C\u002F",[29,71294,546],{"class":51429},[29,71296,51436],{"class":309},[29,71298,71299,71301,71303,71305,71307,71310,71313,71315],{"class":31,"line":51},[29,71300,52273],{"class":309},[29,71302,546],{"class":51429},[29,71304,61186],{"class":35},[29,71306,355],{"class":309},[29,71308,71309],{"class":103},"\"#\u002Fdownload\"",[29,71311,71312],{"class":309},">下载\u003C\u002F",[29,71314,546],{"class":51429},[29,71316,51436],{"class":309},[171,71318,71319],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[259,71321,71322],{"start":51},[178,71323,71324,71325,71327,71328,71330],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53845,71326],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53845,71329],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[275,71332,71334],{"id":71333},"_345-navigator对象","3.4.5 navigator对象",[171,71336,71337],{},[1638,71338],{"alt":24,"src":71339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[19,71341,71345],{"className":71342,"code":71343,"language":71344,"meta":24,"style":24},"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",[26,71346,71347,71352,71363,71375,71380,71431,71472,71477,71490,71502,71507],{"__ignoreMap":24},[29,71348,71349],{"class":31,"line":32},[29,71350,71351],{"class":367},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[29,71353,71354,71356,71358,71360],{"class":31,"line":43},[29,71355,534],{"class":305},[29,71357,310],{"class":309},[29,71359,54578],{"class":305},[29,71361,71362],{"class":309}," () { \n",[29,71364,71365,71367,71370,71372],{"class":31,"line":51},[29,71366,6967],{"class":305},[29,71368,71369],{"class":39}," userAgent",[29,71371,13739],{"class":305},[29,71373,71374],{"class":309}," navigator.userAgent \n",[29,71376,71377],{"class":31,"line":59},[29,71378,71379],{"class":367},"\u002F\u002F 验证是否为Android或iPhone \n",[29,71381,71382,71384,71387,71389,71392,71395,71397,71399,71402,71404,71407,71411,71413,71415,71417,71420,71422,71424,71426,71428],{"class":31,"line":67},[29,71383,6967],{"class":305},[29,71385,71386],{"class":39}," android",[29,71388,13739],{"class":305},[29,71390,71391],{"class":309}," userAgent.",[29,71393,71394],{"class":35},"match",[29,71396,310],{"class":309},[29,71398,892],{"class":103},[29,71400,71401],{"class":48106},"(Android);",[29,71403,1294],{"class":305},[29,71405,71406],{"class":39},"[\\s",[29,71408,71410],{"class":71409},"snhLl","\\\u002F",[29,71412,1248],{"class":39},[29,71414,789],{"class":305},[29,71416,310],{"class":48106},[29,71418,71419],{"class":39},"[\\d.]",[29,71421,789],{"class":305},[29,71423,737],{"class":48106},[29,71425,1294],{"class":305},[29,71427,892],{"class":103},[29,71429,71430],{"class":309},") \n",[29,71432,71433,71435,71438,71440,71442,71444,71446,71448,71451,71454,71457,71459,71461,71464,71466,71468,71470],{"class":31,"line":75},[29,71434,6967],{"class":305},[29,71436,71437],{"class":39}," iphone",[29,71439,13739],{"class":305},[29,71441,71391],{"class":309},[29,71443,71394],{"class":35},[29,71445,310],{"class":309},[29,71447,892],{"class":103},[29,71449,71450],{"class":48106},"(iPhone",[29,71452,71453],{"class":39},"\\s",[29,71455,71456],{"class":48106},"OS)",[29,71458,71453],{"class":39},[29,71460,310],{"class":48106},[29,71462,71463],{"class":39},"[\\d_]",[29,71465,789],{"class":305},[29,71467,737],{"class":48106},[29,71469,892],{"class":103},[29,71471,71430],{"class":309},[29,71473,71474],{"class":31,"line":83},[29,71475,71476],{"class":367},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[29,71478,71479,71481,71484,71487],{"class":31,"line":158},[29,71480,1707],{"class":305},[29,71482,71483],{"class":309}," (android ",[29,71485,71486],{"class":305},"||",[29,71488,71489],{"class":309}," iphone) { \n",[29,71491,71492,71495,71497,71500],{"class":31,"line":166},[29,71493,71494],{"class":309},"location.href ",[29,71496,355],{"class":305},[29,71498,71499],{"class":103}," 'http:\u002F\u002Fm.itcast.cn'",[29,71501,2849],{"class":309},[29,71503,71504],{"class":31,"line":1505},[29,71505,71506],{"class":309},"} \n",[29,71508,71509],{"class":31,"line":1788},[29,71510,71511],{"class":309},"})()\n",[275,71513,71515],{"id":71514},"_346-histroy对象","3.4.6 histroy对象",[171,71517,71518],{},[1638,71519],{"alt":24,"src":71520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[171,71522,71523],{},"浏览器地址的前进与后退!!!",[171,71525,71526],{},"history.back() 等效于 history.go(-1)",[171,71528,71529],{},"history.forward() 等效于 history.go(1)",[14,71531,71533],{"id":71532},"_35-本地存储","3.5 本地存储",[259,71535,71536,71539,71542],{},[178,71537,71538],{},"数据存储在用户浏览器中",[178,71540,71541],{},"设置、读取方便、甚至页面刷新不丢失数据",[178,71543,71544],{},"容量较大，sessionStorage和localStorage约 5M 左右",[275,71546,71548],{"id":71547},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[171,71550,71551],{},"只能存储字符串",[171,71553,71554],{},[1638,71555],{"alt":24,"src":71556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[171,71558,71559],{},[1638,71560],{"alt":24,"src":71561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[171,71563,71564],{},"键值对要加引号,不然就会当变量来看了",[171,71566,71567],{},"localStorage.setItem('uname', 'pink')",[171,71569,71570],{},"刷新之后信息不再丢失",[171,71572,71573],{},"操作key,value会跟着变",[171,71575,71576],{},"删除只删除键就可以,即名字",[171,71578,71567],{},[171,71580,71581],{},"改:",[171,71583,71584],{},"localStorage.setItem('uname','red')",[171,71586,71587],{},"有这个键就是改,没有这个键就是改",[171,71589,71590],{},[1638,71591],{"alt":24,"src":71592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[171,71594,71595],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[171,71597,71598],{},[1638,71599],{"alt":24,"src":71600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[171,71602,71603],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[275,71605,71607],{"id":71606},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[171,71609,71610],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[171,71612,71613],{},"特性:",[259,71615,71616,71619,71622,71625],{},[178,71617,71618],{},"生命周期为关闭浏览器窗口",[178,71620,71621],{},"在同一个窗口(页面)下数据可以共享",[178,71623,71624],{},"以键值对的形式存储使用",[178,71626,71627],{},"用法跟localStorage 基本相同",[275,71629,71631],{"id":71630},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[171,71633,71634],{},"本地只能存储字符串,无法直接存储复杂数据类型",[19,71636,71638],{"className":53196,"code":71637,"language":53198,"meta":24,"style":24},"\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",[26,71639,71640,71648,71653,71658,71663,71668,71672,71677,71682],{"__ignoreMap":24},[29,71641,71642,71644,71646],{"class":31,"line":32},[29,71643,1218],{"class":309},[29,71645,51942],{"class":51429},[29,71647,51436],{"class":309},[29,71649,71650],{"class":31,"line":43},[29,71651,71652],{"class":309},"    const obj = {\n",[29,71654,71655],{"class":31,"line":51},[29,71656,71657],{"class":309},"      uname: 'pink老师',\n",[29,71659,71660],{"class":31,"line":59},[29,71661,71662],{"class":309},"      age: 18,\n",[29,71664,71665],{"class":31,"line":67},[29,71666,71667],{"class":309},"      gender: '女'\n",[29,71669,71670],{"class":31,"line":75},[29,71671,2362],{"class":309},[29,71673,71674],{"class":31,"line":83},[29,71675,71676],{"class":309},"    \u002F\u002F 存储复杂数据类型\n",[29,71678,71679],{"class":31,"line":158},[29,71680,71681],{"class":309},"    localStorage.setItem('obj', obj)\n",[29,71683,71684,71686,71688],{"class":31,"line":166},[29,71685,52546],{"class":309},[29,71687,51942],{"class":51429},[29,71689,51436],{"class":309},[171,71691,71692],{},[1638,71693],{"alt":24,"src":71694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[171,71696,71697],{},"如果获取一下数据:",[171,71699,71700],{},"log(localStorage.getItem('obj'))",[171,71702,71703],{},[1638,71704],{"alt":24,"src":71705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[171,71707,71708],{},"发现直接存对象是使用不了的!!!",[22173,71710,71712],{"id":71711},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[171,71714,71715],{},[1638,71716],{"alt":24,"src":71717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[19,71719,71721],{"className":50762,"code":71720,"language":50764,"meta":24,"style":24},"\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",[26,71722,71723,71731,71741,71751,71760,71768,71772,71776,71802,71821,71829,71833,71838,71843],{"__ignoreMap":24},[29,71724,71725,71727,71729],{"class":31,"line":32},[29,71726,1218],{"class":309},[29,71728,51942],{"class":51429},[29,71730,51436],{"class":309},[29,71732,71733,71735,71737,71739],{"class":31,"line":43},[29,71734,11396],{"class":305},[29,71736,70100],{"class":39},[29,71738,13739],{"class":305},[29,71740,15747],{"class":309},[29,71742,71743,71746,71749],{"class":31,"line":51},[29,71744,71745],{"class":309},"      uname: ",[29,71747,71748],{"class":103},"'pink老师'",[29,71750,31595],{"class":309},[29,71752,71753,71756,71758],{"class":31,"line":59},[29,71754,71755],{"class":309},"      age: ",[29,71757,958],{"class":39},[29,71759,31595],{"class":309},[29,71761,71762,71765],{"class":31,"line":67},[29,71763,71764],{"class":309},"      gender: ",[29,71766,71767],{"class":103},"'女'\n",[29,71769,71770],{"class":31,"line":75},[29,71771,2362],{"class":309},[29,71773,71774],{"class":31,"line":83},[29,71775,71676],{"class":367},[29,71777,71778,71781,71784,71786,71789,71791,71794,71796,71799],{"class":31,"line":158},[29,71779,71780],{"class":309},"  localStorage.",[29,71782,71783],{"class":35},"setItem",[29,71785,310],{"class":309},[29,71787,71788],{"class":103},"'obj'",[29,71790,12610],{"class":309},[29,71792,71793],{"class":39},"JSON",[29,71795,866],{"class":309},[29,71797,71798],{"class":35},"stringify",[29,71800,71801],{"class":309},"(obj))\n",[29,71803,71804,71807,71809,71812,71815,71817,71819],{"class":31,"line":166},[29,71805,71806],{"class":309},"  console.",[29,71808,58376],{"class":35},[29,71810,71811],{"class":309},"(localStorage.",[29,71813,71814],{"class":35},"getItem",[29,71816,310],{"class":309},[29,71818,71788],{"class":103},[29,71820,30626],{"class":309},[29,71822,71823,71825,71827],{"class":31,"line":1505},[29,71824,52546],{"class":309},[29,71826,51942],{"class":51429},[29,71828,51436],{"class":309},[29,71830,71831],{"class":31,"line":1788},[29,71832,70750],{"class":309},[29,71834,71835],{"class":31,"line":1793},[29,71836,71837],{"class":309},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[29,71839,71840],{"class":31,"line":1799},[29,71841,71842],{"class":309},"  类型是字符串的\n",[29,71844,71845],{"class":31,"line":1804},[29,71846,71847],{"class":309},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22173,71849,71851],{"id":71850},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[171,71853,71854],{},[1638,71855],{"alt":24,"src":71856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[171,71858,71859],{},[1638,71860],{"alt":24,"src":71861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[19,71863,71865],{"className":53196,"code":71864,"language":53198,"meta":24,"style":24},"  \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",[26,71866,71867,71875,71879,71883,71887,71891,71895,71900,71905,71910,71915,71920,71925,71930,71935],{"__ignoreMap":24},[29,71868,71869,71871,71873],{"class":31,"line":32},[29,71870,52273],{"class":309},[29,71872,51942],{"class":51429},[29,71874,51436],{"class":309},[29,71876,71877],{"class":31,"line":43},[29,71878,71652],{"class":309},[29,71880,71881],{"class":31,"line":51},[29,71882,71657],{"class":309},[29,71884,71885],{"class":31,"line":59},[29,71886,71662],{"class":309},[29,71888,71889],{"class":31,"line":67},[29,71890,71667],{"class":309},[29,71892,71893],{"class":31,"line":75},[29,71894,2362],{"class":309},[29,71896,71897],{"class":31,"line":83},[29,71898,71899],{"class":309},"    \u002F\u002F 1.存储复杂数据类型\n",[29,71901,71902],{"class":31,"line":158},[29,71903,71904],{"class":309},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[29,71906,71907],{"class":31,"line":166},[29,71908,71909],{"class":309},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[29,71911,71912],{"class":31,"line":1505},[29,71913,71914],{"class":309},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[29,71916,71917],{"class":31,"line":1788},[29,71918,71919],{"class":309},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[29,71921,71922],{"class":31,"line":1793},[29,71923,71924],{"class":309},"    \u002F\u002F 取\n",[29,71926,71927],{"class":31,"line":1799},[29,71928,71929],{"class":309},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[29,71931,71932],{"class":31,"line":1804},[29,71933,71934],{"class":309},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[29,71936,71937,71939,71941],{"class":31,"line":1818},[29,71938,52546],{"class":309},[29,71940,51942],{"class":51429},[29,71942,51436],{"class":309},[171,71944,71945],{},[1638,71946],{"alt":24,"src":71947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[275,71949,71951],{"id":71950},"_356-数组map方法","3.5.6 数组map方法",[171,71953,71954],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[171,71956,71957],{},[1638,71958],{"alt":24,"src":71959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[171,71961,71962],{},[1638,71963],{"alt":24,"src":71964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[171,71966,71967,71970],{},[457,71968,71969],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[171,71972,71973],{},"map有返回值，但是forEach没有返回值",[171,71975,71976],{},"map是个方法。用的时候要加 ()",[171,71978,71979],{},"map返回的是一个数组",[275,71981,71983],{"id":71982},"_357-数组中join方法","3.5.7 数组中join方法",[171,71985,71986],{},[1638,71987],{"alt":24,"src":71988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[171,71990,71991],{},"类似于python中拼接字符串一样！",[259,71993,71994,71997,72000],{},[178,71995,71996],{},"小括号为空则逗号分开",[178,71998,71999],{},"小括号为空字符串 ''，则元素之间没有分隔符",[178,72001,72002],{},"小括号用啥符号就用进行分割",[275,72004,72006],{"id":72005},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[259,72008,72009,72012,72015,72018,72021],{},[178,72010,72011],{},"记住本地时间获取快速方式：new Date().toDateString()",[178,72013,72014],{},"尽量减少DOM操作，用好map+join的渲染方式",[178,72016,72017],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[178,72019,72020],{},"return可以实现函数的结束",[178,72022,72023],{},"禁止跳转是 preventDefault() 不要忘记",[19,72025,72027],{"className":50762,"code":72026,"language":50764,"meta":24,"style":24},"\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",[26,72028,72029,72039,72053,72057,72065,72079,72099,72111,72119,72125,72135,72145,72149,72153,72159,72169,72181,72185,72189,72196,72208,72222,72232,72236,72240,72247,72254,72261,72273,72285,72295,72307,72311,72315,72322,72329,72341,72353,72363,72375,72405,72409,72413,72420,72432,72444,72468,72478,72488,72492,72496,72504,72515,72527,72539,72551,72568,72580,72592,72596,72600,72607,72619,72631,72643,72654,72672,72685,72697,72721,72732,72736,72740,72748,72758,72762,72766,72772,72784,72795,72805,72809,72813,72819,72841,72845,72849,72855,72861,72873,72883,72895,72925,72938,72955,72959,72963,72974,72996,73006,73010,73014,73027,73037,73049,73061,73073,73085,73095,73105,73115,73126,73139,73143,73151,73159,73163,73171,73184,73204,73237,73270,73303,73329,73347,73365,73373,73399,73417,73435,73453,73471,73489,73497,73505,73523,73531,73560,73568,73576,73584,73597,73609,73621,73633,73645,73657,73670,73682,73690,73698,73706,73711,73716,73720,73724,73728,73732,73736,73740,73745,73750,73755,73760,73768,73776,73784,73789,73794,73799,73804,73809,73814,73819,73824,73829,73834,73839,73844,73849,73854,73858,73863,73868,73878,73887,73891,73896,73905,73921,73963,74003,74042,74107,74115,74119,74124,74142,74150,74155,74160,74190,74196,74201,74214,74226,74238,74250,74262,74274,74286,74290,74300,74304,74309,74314,74318,74327,74331,74336,74341,74360,74365,74385,74389,74394,74398,74403,74421,74439,74457,74476,74495,74514,74519,74525,74546,74552,74561,74567,74573,74579,74606,74619,74624,74634,74640,74646,74652,74658,74663,74669,74675,74681,74687,74720,74725,74730,74735,74740,74746,74752,74758,74769,74774,74780,74787,74801,74807,74831,74836,74841,74847,74853,74874,74880,74893,74899,74905,74911,74917,74922,74928,74934,74940,74958,74972,74978,74986,74992,75014,75019,75024,75029,75034,75039,75048,75057,75062],{"__ignoreMap":24},[29,72030,72031,72033,72035,72037],{"class":31,"line":32},[29,72032,51426],{"class":309},[29,72034,51430],{"class":51429},[29,72036,51433],{"class":35},[29,72038,51436],{"class":309},[29,72040,72041,72043,72045,72047,72049,72051],{"class":31,"line":43},[29,72042,1218],{"class":309},[29,72044,50764],{"class":51429},[29,72046,51445],{"class":35},[29,72048,355],{"class":309},[29,72050,51450],{"class":103},[29,72052,51436],{"class":309},[29,72054,72055],{"class":31,"line":51},[29,72056,2575],{"emptyLinePlaceholder":233},[29,72058,72059,72061,72063],{"class":31,"line":59},[29,72060,1218],{"class":309},[29,72062,51463],{"class":51429},[29,72064,51436],{"class":309},[29,72066,72067,72069,72071,72073,72075,72077],{"class":31,"line":67},[29,72068,52273],{"class":309},[29,72070,51473],{"class":51429},[29,72072,51476],{"class":35},[29,72074,355],{"class":309},[29,72076,51481],{"class":103},[29,72078,51436],{"class":309},[29,72080,72081,72083,72085,72087,72089,72091,72093,72095,72097],{"class":31,"line":75},[29,72082,52273],{"class":309},[29,72084,51473],{"class":51429},[29,72086,15095],{"class":35},[29,72088,355],{"class":309},[29,72090,51520],{"class":103},[29,72092,51500],{"class":35},[29,72094,355],{"class":309},[29,72096,51527],{"class":103},[29,72098,51436],{"class":309},[29,72100,72101,72103,72105,72107,72109],{"class":31,"line":83},[29,72102,52273],{"class":309},[29,72104,51536],{"class":51429},[29,72106,51539],{"class":309},[29,72108,51536],{"class":51429},[29,72110,51436],{"class":309},[29,72112,72113,72115,72117],{"class":31,"line":158},[29,72114,52273],{"class":309},[29,72116,223],{"class":51429},[29,72118,51436],{"class":309},[29,72120,72121,72123],{"class":31,"line":166},[29,72122,6578],{"class":51429},[29,72124,15747],{"class":309},[29,72126,72127,72129,72131,72133],{"class":31,"line":1505},[29,72128,54824],{"class":39},[29,72130,51566],{"class":309},[29,72132,499],{"class":39},[29,72134,1468],{"class":309},[29,72136,72137,72139,72141,72143],{"class":31,"line":1788},[29,72138,54835],{"class":39},[29,72140,51566],{"class":309},[29,72142,499],{"class":39},[29,72144,1468],{"class":309},[29,72146,72147],{"class":31,"line":1793},[29,72148,2362],{"class":309},[29,72150,72151],{"class":31,"line":1799},[29,72152,2575],{"emptyLinePlaceholder":233},[29,72154,72155,72157],{"class":31,"line":1804},[29,72156,57408],{"class":51429},[29,72158,15747],{"class":309},[29,72160,72161,72163,72165,72167],{"class":31,"line":1818},[29,72162,57415],{"class":39},[29,72164,51566],{"class":309},[29,72166,51721],{"class":39},[29,72168,1468],{"class":309},[29,72170,72171,72173,72175,72177,72179],{"class":31,"line":1823},[29,72172,62206],{"class":39},[29,72174,51566],{"class":309},[29,72176,1008],{"class":39},[29,72178,51621],{"class":305},[29,72180,1468],{"class":309},[29,72182,72183],{"class":31,"line":1829},[29,72184,2362],{"class":309},[29,72186,72187],{"class":31,"line":1850},[29,72188,2575],{"emptyLinePlaceholder":233},[29,72190,72191,72194],{"class":31,"line":1855},[29,72192,72193],{"class":35},"    .info",[29,72195,15747],{"class":309},[29,72197,72198,72200,72202,72204,72206],{"class":31,"line":1869},[29,72199,54900],{"class":39},[29,72201,51566],{"class":309},[29,72203,51618],{"class":39},[29,72205,51621],{"class":305},[29,72207,1468],{"class":309},[29,72209,72210,72212,72214,72216,72218,72220],{"class":31,"line":1874},[29,72211,54835],{"class":39},[29,72213,51566],{"class":309},[29,72215,754],{"class":39},[29,72217,51621],{"class":305},[29,72219,51685],{"class":39},[29,72221,1468],{"class":309},[29,72223,72224,72226,72228,72230],{"class":31,"line":1903},[29,72225,57415],{"class":39},[29,72227,51566],{"class":309},[29,72229,51721],{"class":39},[29,72231,1468],{"class":309},[29,72233,72234],{"class":31,"line":1908},[29,72235,2362],{"class":309},[29,72237,72238],{"class":31,"line":1925},[29,72239,2575],{"emptyLinePlaceholder":233},[29,72241,72242,72245],{"class":31,"line":1930},[29,72243,72244],{"class":35},"    .uname",[29,72246,31595],{"class":309},[29,72248,72249,72252],{"class":31,"line":1935},[29,72250,72251],{"class":35},"    .age",[29,72253,31595],{"class":309},[29,72255,72256,72259],{"class":31,"line":1940},[29,72257,72258],{"class":35},"    .salary",[29,72260,15747],{"class":309},[29,72262,72263,72265,72267,72269,72271],{"class":31,"line":1954},[29,72264,54900],{"class":39},[29,72266,51566],{"class":309},[29,72268,619],{"class":39},[29,72270,51621],{"class":305},[29,72272,1468],{"class":309},[29,72274,72275,72277,72279,72281,72283],{"class":31,"line":1959},[29,72276,54914],{"class":39},[29,72278,51566],{"class":309},[29,72280,1008],{"class":39},[29,72282,51621],{"class":305},[29,72284,1468],{"class":309},[29,72286,72287,72289,72291,72293],{"class":31,"line":2752},[29,72288,61909],{"class":39},[29,72290,51566],{"class":309},[29,72292,54866],{"class":39},[29,72294,1468],{"class":309},[29,72296,72297,72299,72301,72303,72305],{"class":31,"line":2766},[29,72298,61879],{"class":39},[29,72300,51566],{"class":309},[29,72302,883],{"class":39},[29,72304,51621],{"class":305},[29,72306,1468],{"class":309},[29,72308,72309],{"class":31,"line":2774},[29,72310,2362],{"class":309},[29,72312,72313],{"class":31,"line":2779},[29,72314,2575],{"emptyLinePlaceholder":233},[29,72316,72317,72320],{"class":31,"line":2785},[29,72318,72319],{"class":35},"    .gender",[29,72321,31595],{"class":309},[29,72323,72324,72327],{"class":31,"line":2791},[29,72325,72326],{"class":35},"    .city",[29,72328,15747],{"class":309},[29,72330,72331,72333,72335,72337,72339],{"class":31,"line":2796},[29,72332,54900],{"class":39},[29,72334,51566],{"class":309},[29,72336,619],{"class":39},[29,72338,51621],{"class":305},[29,72340,1468],{"class":309},[29,72342,72343,72345,72347,72349,72351],{"class":31,"line":8123},[29,72344,54914],{"class":39},[29,72346,51566],{"class":309},[29,72348,1133],{"class":39},[29,72350,51621],{"class":305},[29,72352,1468],{"class":309},[29,72354,72355,72357,72359,72361],{"class":31,"line":8147},[29,72356,61909],{"class":39},[29,72358,51566],{"class":309},[29,72360,54866],{"class":39},[29,72362,1468],{"class":309},[29,72364,72365,72367,72369,72371,72373],{"class":31,"line":8152},[29,72366,61879],{"class":39},[29,72368,51566],{"class":309},[29,72370,883],{"class":39},[29,72372,51621],{"class":305},[29,72374,1468],{"class":309},[29,72376,72377,72379,72381,72383,72385,72387,72390,72392,72394,72396,72399,72401,72403],{"class":31,"line":8158},[29,72378,62106],{"class":39},[29,72380,51566],{"class":309},[29,72382,525],{"class":39},[29,72384,51621],{"class":305},[29,72386,51650],{"class":39},[29,72388,72389],{"class":39}," rgb",[29,72391,310],{"class":309},[29,72393,1898],{"class":39},[29,72395,12610],{"class":309},[29,72397,72398],{"class":39},"197",[29,72400,12610],{"class":309},[29,72402,72398],{"class":39},[29,72404,2894],{"class":309},[29,72406,72407],{"class":31,"line":8185},[29,72408,2362],{"class":309},[29,72410,72411],{"class":31,"line":8190},[29,72412,2575],{"emptyLinePlaceholder":233},[29,72414,72415,72418],{"class":31,"line":8196},[29,72416,72417],{"class":51429},"    button",[29,72419,15747],{"class":309},[29,72421,72422,72424,72426,72428,72430],{"class":31,"line":8208},[29,72423,54914],{"class":39},[29,72425,51566],{"class":309},[29,72427,1133],{"class":39},[29,72429,51621],{"class":305},[29,72431,1468],{"class":309},[29,72433,72434,72436,72438,72440,72442],{"class":31,"line":8220},[29,72435,54900],{"class":39},[29,72437,51566],{"class":309},[29,72439,792],{"class":39},[29,72441,51621],{"class":305},[29,72443,1468],{"class":309},[29,72445,72446,72448,72450,72453,72455,72457,72459,72462,72464,72466],{"class":31,"line":8232},[29,72447,55013],{"class":39},[29,72449,51566],{"class":309},[29,72451,72452],{"class":39},"rgb",[29,72454,310],{"class":309},[29,72456,1277],{"class":39},[29,72458,12610],{"class":309},[29,72460,72461],{"class":39},"187",[29,72463,12610],{"class":309},[29,72465,607],{"class":39},[29,72467,2894],{"class":309},[29,72469,72470,72472,72474,72476],{"class":31,"line":9891},[29,72471,57545],{"class":39},[29,72473,51566],{"class":309},[29,72475,60971],{"class":39},[29,72477,1468],{"class":309},[29,72479,72480,72482,72484,72486],{"class":31,"line":9916},[29,72481,62106],{"class":39},[29,72483,51566],{"class":309},[29,72485,499],{"class":39},[29,72487,1468],{"class":309},[29,72489,72490],{"class":31,"line":9939},[29,72491,2362],{"class":309},[29,72493,72494],{"class":31,"line":9963},[29,72495,2575],{"emptyLinePlaceholder":233},[29,72497,72498,72500,72502],{"class":31,"line":9968},[29,72499,72417],{"class":51429},[29,72501,51817],{"class":51429},[29,72503,15747],{"class":309},[29,72505,72506,72508,72510,72513],{"class":31,"line":9973},[29,72507,55138],{"class":39},[29,72509,51566],{"class":309},[29,72511,72512],{"class":39},"inline-block",[29,72514,1468],{"class":309},[29,72516,72517,72519,72521,72523,72525],{"class":31,"line":9978},[29,72518,54900],{"class":39},[29,72520,51566],{"class":309},[29,72522,754],{"class":39},[29,72524,51621],{"class":305},[29,72526,1468],{"class":309},[29,72528,72529,72531,72533,72535,72537],{"class":31,"line":9987},[29,72530,54914],{"class":39},[29,72532,51566],{"class":309},[29,72534,754],{"class":39},[29,72536,51621],{"class":305},[29,72538,1468],{"class":309},[29,72540,72541,72543,72545,72547,72549],{"class":31,"line":9992},[29,72542,57488],{"class":39},[29,72544,51566],{"class":309},[29,72546,780],{"class":39},[29,72548,51621],{"class":305},[29,72550,1468],{"class":309},[29,72552,72553,72555,72557,72559,72561,72563,72566],{"class":31,"line":9998},[29,72554,62106],{"class":39},[29,72556,51566],{"class":309},[29,72558,525],{"class":39},[29,72560,51621],{"class":305},[29,72562,51650],{"class":39},[29,72564,72565],{"class":39}," #fff",[29,72567,1468],{"class":309},[29,72569,72570,72572,72574,72576,72578],{"class":31,"line":10019},[29,72571,55263],{"class":39},[29,72573,51566],{"class":309},[29,72575,627],{"class":39},[29,72577,51621],{"class":305},[29,72579,1468],{"class":309},[29,72581,72582,72584,72586,72588,72590],{"class":31,"line":10025},[29,72583,61879],{"class":39},[29,72585,51566],{"class":309},[29,72587,525],{"class":39},[29,72589,51621],{"class":305},[29,72591,1468],{"class":309},[29,72593,72594],{"class":31,"line":10039},[29,72595,2362],{"class":309},[29,72597,72598],{"class":31,"line":10045},[29,72599,2575],{"emptyLinePlaceholder":233},[29,72601,72602,72605],{"class":31,"line":10072},[29,72603,72604],{"class":35},"    .total",[29,72606,15747],{"class":309},[29,72608,72609,72611,72613,72615,72617],{"class":31,"line":10081},[29,72610,54900],{"class":39},[29,72612,51566],{"class":309},[29,72614,61758],{"class":39},[29,72616,51621],{"class":305},[29,72618,1468],{"class":309},[29,72620,72621,72623,72625,72627,72629],{"class":31,"line":10087},[29,72622,54914],{"class":39},[29,72624,51566],{"class":309},[29,72626,709],{"class":39},[29,72628,51621],{"class":305},[29,72630,1468],{"class":309},[29,72632,72633,72635,72637,72639,72641],{"class":31,"line":10095},[29,72634,57488],{"class":39},[29,72636,51566],{"class":309},[29,72638,709],{"class":39},[29,72640,51621],{"class":305},[29,72642,1468],{"class":309},[29,72644,72645,72647,72649,72652],{"class":31,"line":10100},[29,72646,57415],{"class":39},[29,72648,51566],{"class":309},[29,72650,72651],{"class":39},"right",[29,72653,1468],{"class":309},[29,72655,72656,72658,72660,72662,72664,72666,72668,72670],{"class":31,"line":16779},[29,72657,54835],{"class":39},[29,72659,51566],{"class":309},[29,72661,709],{"class":39},[29,72663,51621],{"class":305},[29,72665,51685],{"class":39},[29,72667,2213],{"class":39},[29,72669,51621],{"class":305},[29,72671,1468],{"class":309},[29,72673,72674,72677,72679,72681,72683],{"class":31,"line":16785},[29,72675,72676],{"class":39},"      padding-right",[29,72678,51566],{"class":309},[29,72680,754],{"class":39},[29,72682,51621],{"class":305},[29,72684,1468],{"class":309},[29,72686,72687,72689,72691,72693,72695],{"class":31,"line":16808},[29,72688,55051],{"class":39},[29,72690,51566],{"class":309},[29,72692,831],{"class":39},[29,72694,51621],{"class":305},[29,72696,1468],{"class":309},[29,72698,72699,72701,72703,72705,72707,72710,72712,72715,72717,72719],{"class":31,"line":16814},[29,72700,55013],{"class":39},[29,72702,51566],{"class":309},[29,72704,72452],{"class":39},[29,72706,310],{"class":309},[29,72708,72709],{"class":39},"237",[29,72711,12610],{"class":309},[29,72713,72714],{"class":39},"235",[29,72716,12610],{"class":309},[29,72718,72714],{"class":39},[29,72720,2894],{"class":309},[29,72722,72723,72726,72728,72730],{"class":31,"line":16837},[29,72724,72725],{"class":39},"      box-sizing",[29,72727,51566],{"class":309},[29,72729,60634],{"class":39},[29,72731,1468],{"class":309},[29,72733,72734],{"class":31,"line":16851},[29,72735,2362],{"class":309},[29,72737,72738],{"class":31,"line":16871},[29,72739,2575],{"emptyLinePlaceholder":233},[29,72741,72742,72744,72746],{"class":31,"line":16877},[29,72743,72604],{"class":35},[29,72745,51817],{"class":51429},[29,72747,15747],{"class":309},[29,72749,72750,72752,72754,72756],{"class":31,"line":16888},[29,72751,57545],{"class":39},[29,72753,51566],{"class":309},[29,72755,57550],{"class":39},[29,72757,1468],{"class":309},[29,72759,72760],{"class":31,"line":16911},[29,72761,2362],{"class":309},[29,72763,72764],{"class":31,"line":16933},[29,72765,2575],{"emptyLinePlaceholder":233},[29,72767,72768,72770],{"class":31,"line":16938},[29,72769,65152],{"class":51429},[29,72771,15747],{"class":309},[29,72773,72774,72776,72778,72780,72782],{"class":31,"line":16944},[29,72775,54900],{"class":39},[29,72777,51566],{"class":309},[29,72779,61758],{"class":39},[29,72781,51621],{"class":305},[29,72783,1468],{"class":309},[29,72785,72786,72788,72790,72793],{"class":31,"line":16958},[29,72787,54835],{"class":39},[29,72789,51566],{"class":309},[29,72791,72792],{"class":39},"auto",[29,72794,1468],{"class":309},[29,72796,72797,72799,72801,72803],{"class":31,"line":16971},[29,72798,65159],{"class":39},[29,72800,51566],{"class":309},[29,72802,65164],{"class":39},[29,72804,1468],{"class":309},[29,72806,72807],{"class":31,"line":16976},[29,72808,2362],{"class":309},[29,72810,72811],{"class":31,"line":16990},[29,72812,2575],{"emptyLinePlaceholder":233},[29,72814,72815,72817],{"class":31,"line":16995},[29,72816,65244],{"class":51429},[29,72818,15747],{"class":309},[29,72820,72821,72823,72825,72827,72829,72831,72833,72835,72837,72839],{"class":31,"line":17001},[29,72822,55013],{"class":39},[29,72824,51566],{"class":309},[29,72826,72452],{"class":39},[29,72828,310],{"class":309},[29,72830,72709],{"class":39},[29,72832,12610],{"class":309},[29,72834,72714],{"class":39},[29,72836,12610],{"class":309},[29,72838,72714],{"class":39},[29,72840,2894],{"class":309},[29,72842,72843],{"class":31,"line":17006},[29,72844,2362],{"class":309},[29,72846,72847],{"class":31,"line":17020},[29,72848,2575],{"emptyLinePlaceholder":233},[29,72850,72851,72853],{"class":31,"line":17025},[29,72852,65244],{"class":51429},[29,72854,31595],{"class":309},[29,72856,72857,72859],{"class":31,"line":17030},[29,72858,65310],{"class":51429},[29,72860,15747],{"class":309},[29,72862,72863,72865,72867,72869,72871],{"class":31,"line":17044},[29,72864,54914],{"class":39},[29,72866,51566],{"class":309},[29,72868,581],{"class":39},[29,72870,51621],{"class":305},[29,72872,1468],{"class":309},[29,72874,72875,72877,72879,72881],{"class":31,"line":17056},[29,72876,57415],{"class":39},[29,72878,51566],{"class":309},[29,72880,23911],{"class":39},[29,72882,1468],{"class":309},[29,72884,72885,72887,72889,72891,72893],{"class":31,"line":17061},[29,72886,55051],{"class":39},[29,72888,51566],{"class":309},[29,72890,857],{"class":39},[29,72892,51621],{"class":305},[29,72894,1468],{"class":309},[29,72896,72897,72899,72901,72903,72905,72907,72909,72911,72914,72916,72919,72921,72923],{"class":31,"line":17074},[29,72898,62106],{"class":39},[29,72900,51566],{"class":309},[29,72902,525],{"class":39},[29,72904,51621],{"class":305},[29,72906,51650],{"class":39},[29,72908,72389],{"class":39},[29,72910,310],{"class":309},[29,72912,72913],{"class":39},"228",[29,72915,12610],{"class":309},[29,72917,72918],{"class":39},"225",[29,72920,12610],{"class":309},[29,72922,72918],{"class":39},[29,72924,2894],{"class":309},[29,72926,72927,72930,72932,72934,72936],{"class":31,"line":17079},[29,72928,72929],{"class":39},"      padding-left",[29,72931,51566],{"class":309},[29,72933,627],{"class":39},[29,72935,51621],{"class":305},[29,72937,1468],{"class":309},[29,72939,72940,72942,72944,72946,72949,72951,72953],{"class":31,"line":17084},[29,72941,61989],{"class":39},[29,72943,51566],{"class":309},[29,72945,28250],{"class":39},[29,72947,72948],{"class":39}," linear",[29,72950,61996],{"class":39},[29,72952,1003],{"class":305},[29,72954,1468],{"class":309},[29,72956,72957],{"class":31,"line":17089},[29,72958,2362],{"class":309},[29,72960,72961],{"class":31,"line":17102},[29,72962,2575],{"emptyLinePlaceholder":233},[29,72964,72965,72968,72970,72972],{"class":31,"line":17107},[29,72966,72967],{"class":51429},"    tbody",[29,72969,70273],{"class":51429},[29,72971,61069],{"class":35},[29,72973,15747],{"class":309},[29,72975,72976,72978,72980,72982,72984,72986,72988,72990,72992,72994],{"class":31,"line":32762},[29,72977,55013],{"class":39},[29,72979,51566],{"class":309},[29,72981,72452],{"class":39},[29,72983,310],{"class":309},[29,72985,72709],{"class":39},[29,72987,12610],{"class":309},[29,72989,72714],{"class":39},[29,72991,12610],{"class":309},[29,72993,72714],{"class":39},[29,72995,2894],{"class":309},[29,72997,72998,73000,73002,73004],{"class":31,"line":32768},[29,72999,62154],{"class":39},[29,73001,51566],{"class":309},[29,73003,62159],{"class":39},[29,73005,1468],{"class":309},[29,73007,73008],{"class":31,"line":32774},[29,73009,2362],{"class":309},[29,73011,73012],{"class":31,"line":32780},[29,73013,2575],{"emptyLinePlaceholder":233},[29,73015,73016,73018,73020,73023,73025],{"class":31,"line":32786},[29,73017,72967],{"class":51429},[29,73019,70273],{"class":51429},[29,73021,73022],{"class":51429}," td",[29,73024,1574],{"class":51429},[29,73026,15747],{"class":309},[29,73028,73029,73031,73033,73035],{"class":31,"line":32797},[29,73030,55138],{"class":39},[29,73032,51566],{"class":309},[29,73034,60998],{"class":39},[29,73036,1468],{"class":309},[29,73038,73039,73041,73043,73045,73047],{"class":31,"line":32803},[29,73040,54900],{"class":39},[29,73042,51566],{"class":309},[29,73044,1215],{"class":39},[29,73046,51621],{"class":305},[29,73048,1468],{"class":309},[29,73050,73051,73053,73055,73057,73059],{"class":31,"line":32823},[29,73052,54914],{"class":39},[29,73054,51566],{"class":309},[29,73056,1133],{"class":39},[29,73058,51621],{"class":305},[29,73060,1468],{"class":309},[29,73062,73063,73065,73067,73069,73071],{"class":31,"line":32829},[29,73064,57488],{"class":39},[29,73066,51566],{"class":309},[29,73068,1133],{"class":39},[29,73070,51621],{"class":305},[29,73072,1468],{"class":309},[29,73074,73075,73077,73079,73081,73083],{"class":31,"line":32840},[29,73076,62206],{"class":39},[29,73078,51566],{"class":309},[29,73080,386],{"class":39},[29,73082,51621],{"class":305},[29,73084,1468],{"class":309},[29,73086,73087,73089,73091,73093],{"class":31,"line":32846},[29,73088,57545],{"class":39},[29,73090,51566],{"class":309},[29,73092,60971],{"class":39},[29,73094,1468],{"class":309},[29,73096,73097,73099,73101,73103],{"class":31,"line":32852},[29,73098,57415],{"class":39},[29,73100,51566],{"class":309},[29,73102,51721],{"class":39},[29,73104,1468],{"class":309},[29,73106,73107,73109,73111,73113],{"class":31,"line":32858},[29,73108,64099],{"class":39},[29,73110,51566],{"class":309},[29,73112,54866],{"class":39},[29,73114,1468],{"class":309},[29,73116,73117,73119,73121,73124],{"class":31,"line":32864},[29,73118,55013],{"class":39},[29,73120,51566],{"class":309},[29,73122,73123],{"class":39},"orange",[29,73125,1468],{"class":309},[29,73127,73128,73130,73132,73135,73137],{"class":31,"line":32870},[29,73129,55263],{"class":39},[29,73131,51566],{"class":309},[29,73133,73134],{"class":39},"12.5",[29,73136,51621],{"class":305},[29,73138,1468],{"class":309},[29,73140,73141],{"class":31,"line":32876},[29,73142,2362],{"class":309},[29,73144,73145,73147,73149],{"class":31,"line":32882},[29,73146,52546],{"class":309},[29,73148,223],{"class":51429},[29,73150,51436],{"class":309},[29,73152,73153,73155,73157],{"class":31,"line":32902},[29,73154,51914],{"class":309},[29,73156,51463],{"class":51429},[29,73158,51436],{"class":309},[29,73160,73161],{"class":31,"line":32908},[29,73162,2575],{"emptyLinePlaceholder":233},[29,73164,73165,73167,73169],{"class":31,"line":32924},[29,73166,1218],{"class":309},[29,73168,51929],{"class":51429},[29,73170,51436],{"class":309},[29,73172,73173,73175,73177,73180,73182],{"class":31,"line":32930},[29,73174,52273],{"class":309},[29,73176,14],{"class":51429},[29,73178,73179],{"class":309},">学生就业统计表\u003C\u002F",[29,73181,14],{"class":51429},[29,73183,51436],{"class":309},[29,73185,73186,73188,73190,73192,73194,73196,73198,73200,73202],{"class":31,"line":32944},[29,73187,52273],{"class":309},[29,73189,66754],{"class":51429},[29,73191,53615],{"class":35},[29,73193,355],{"class":309},[29,73195,62793],{"class":103},[29,73197,69199],{"class":35},[29,73199,355],{"class":309},[29,73201,31905],{"class":103},[29,73203,51436],{"class":309},[29,73205,73206,73208,73210,73212,73214,73216,73218,73220,73222,73224,73226,73229,73231,73233,73235],{"class":31,"line":32950},[29,73207,51470],{"class":309},[29,73209,53950],{"class":51429},[29,73211,53953],{"class":35},[29,73213,355],{"class":309},[29,73215,62828],{"class":103},[29,73217,15095],{"class":35},[29,73219,355],{"class":309},[29,73221,69225],{"class":103},[29,73223,61149],{"class":35},[29,73225,355],{"class":309},[29,73227,73228],{"class":103},"\"姓名\"",[29,73230,53615],{"class":35},[29,73232,355],{"class":309},[29,73234,69225],{"class":103},[29,73236,51436],{"class":309},[29,73238,73239,73241,73243,73245,73247,73249,73251,73253,73255,73257,73259,73262,73264,73266,73268],{"class":31,"line":32965},[29,73240,51470],{"class":309},[29,73242,53950],{"class":51429},[29,73244,53953],{"class":35},[29,73246,355],{"class":309},[29,73248,62828],{"class":103},[29,73250,15095],{"class":35},[29,73252,355],{"class":309},[29,73254,69253],{"class":103},[29,73256,61149],{"class":35},[29,73258,355],{"class":309},[29,73260,73261],{"class":103},"\"年龄\"",[29,73263,53615],{"class":35},[29,73265,355],{"class":309},[29,73267,69253],{"class":103},[29,73269,51436],{"class":309},[29,73271,73272,73274,73276,73278,73280,73282,73284,73286,73288,73290,73292,73295,73297,73299,73301],{"class":31,"line":32971},[29,73273,51470],{"class":309},[29,73275,53950],{"class":51429},[29,73277,53953],{"class":35},[29,73279,355],{"class":309},[29,73281,62828],{"class":103},[29,73283,15095],{"class":35},[29,73285,355],{"class":309},[29,73287,69355],{"class":103},[29,73289,61149],{"class":35},[29,73291,355],{"class":309},[29,73293,73294],{"class":103},"\"薪资\"",[29,73296,53615],{"class":35},[29,73298,355],{"class":309},[29,73300,69355],{"class":103},[29,73302,51436],{"class":309},[29,73304,73305,73307,73309,73311,73313,73315,73317,73319,73321,73323,73325,73327],{"class":31,"line":32980},[29,73306,51470],{"class":309},[29,73308,69273],{"class":51429},[29,73310,15095],{"class":35},[29,73312,355],{"class":309},[29,73314,69280],{"class":103},[29,73316,15134],{"class":35},[29,73318,355],{"class":309},[29,73320,7827],{"class":103},[29,73322,53615],{"class":35},[29,73324,355],{"class":309},[29,73326,69280],{"class":103},[29,73328,51436],{"class":309},[29,73330,73331,73333,73335,73337,73339,73341,73343,73345],{"class":31,"line":32986},[29,73332,55363],{"class":309},[29,73334,69295],{"class":51429},[29,73336,66780],{"class":35},[29,73338,355],{"class":309},[29,73340,10136],{"class":103},[29,73342,69304],{"class":309},[29,73344,69295],{"class":51429},[29,73346,51436],{"class":309},[29,73348,73349,73351,73353,73355,73357,73359,73361,73363],{"class":31,"line":32995},[29,73350,55363],{"class":309},[29,73352,69295],{"class":51429},[29,73354,66780],{"class":35},[29,73356,355],{"class":309},[29,73358,10205],{"class":103},[29,73360,69323],{"class":309},[29,73362,69295],{"class":51429},[29,73364,51436],{"class":309},[29,73366,73367,73369,73371],{"class":31,"line":33001},[29,73368,51905],{"class":309},[29,73370,69273],{"class":51429},[29,73372,51436],{"class":309},[29,73374,73375,73377,73379,73381,73383,73385,73387,73389,73391,73393,73395,73397],{"class":31,"line":33007},[29,73376,51470],{"class":309},[29,73378,69273],{"class":51429},[29,73380,15095],{"class":35},[29,73382,355],{"class":309},[29,73384,69377],{"class":103},[29,73386,15134],{"class":35},[29,73388,355],{"class":309},[29,73390,7827],{"class":103},[29,73392,53615],{"class":35},[29,73394,355],{"class":309},[29,73396,69377],{"class":103},[29,73398,51436],{"class":309},[29,73400,73401,73403,73405,73407,73409,73411,73413,73415],{"class":31,"line":33016},[29,73402,55363],{"class":309},[29,73404,69295],{"class":51429},[29,73406,66780],{"class":35},[29,73408,355],{"class":309},[29,73410,69398],{"class":103},[29,73412,69401],{"class":309},[29,73414,69295],{"class":51429},[29,73416,51436],{"class":309},[29,73418,73419,73421,73423,73425,73427,73429,73431,73433],{"class":31,"line":33022},[29,73420,55363],{"class":309},[29,73422,69295],{"class":51429},[29,73424,66780],{"class":35},[29,73426,355],{"class":309},[29,73428,69418],{"class":103},[29,73430,69421],{"class":309},[29,73432,69295],{"class":51429},[29,73434,51436],{"class":309},[29,73436,73437,73439,73441,73443,73445,73447,73449,73451],{"class":31,"line":33033},[29,73438,55363],{"class":309},[29,73440,69295],{"class":51429},[29,73442,66780],{"class":35},[29,73444,355],{"class":309},[29,73446,69438],{"class":103},[29,73448,69441],{"class":309},[29,73450,69295],{"class":51429},[29,73452,51436],{"class":309},[29,73454,73455,73457,73459,73461,73463,73465,73467,73469],{"class":31,"line":33039},[29,73456,55363],{"class":309},[29,73458,69295],{"class":51429},[29,73460,66780],{"class":35},[29,73462,355],{"class":309},[29,73464,69458],{"class":103},[29,73466,69461],{"class":309},[29,73468,69295],{"class":51429},[29,73470,51436],{"class":309},[29,73472,73473,73475,73477,73479,73481,73483,73485,73487],{"class":31,"line":33058},[29,73474,55363],{"class":309},[29,73476,69295],{"class":51429},[29,73478,66780],{"class":35},[29,73480,355],{"class":309},[29,73482,69478],{"class":103},[29,73484,69481],{"class":309},[29,73486,69295],{"class":51429},[29,73488,51436],{"class":309},[29,73490,73491,73493,73495],{"class":31,"line":33064},[29,73492,51905],{"class":309},[29,73494,69273],{"class":51429},[29,73496,51436],{"class":309},[29,73498,73499,73501,73503],{"class":31,"line":33075},[29,73500,51470],{"class":309},[29,73502,54016],{"class":51429},[29,73504,51436],{"class":309},[29,73506,73507,73509,73511,73514,73516,73519,73521],{"class":31,"line":33081},[29,73508,55363],{"class":309},[29,73510,29],{"class":51429},[29,73512,73513],{"class":309},">+\u003C\u002F",[29,73515,29],{"class":51429},[29,73517,73518],{"class":309},">添加\u003C\u002F",[29,73520,54016],{"class":51429},[29,73522,51436],{"class":309},[29,73524,73525,73527,73529],{"class":31,"line":33101},[29,73526,52546],{"class":309},[29,73528,66754],{"class":51429},[29,73530,51436],{"class":309},[29,73532,73533,73535,73537,73539,73541,73543,73546,73548,73551,73553,73556,73558],{"class":31,"line":33117},[29,73534,52273],{"class":309},[29,73536,51740],{"class":51429},[29,73538,53615],{"class":35},[29,73540,355],{"class":309},[29,73542,62709],{"class":103},[29,73544,73545],{"class":309},">共有数据 \u003C",[29,73547,29],{"class":51429},[29,73549,73550],{"class":309},">0\u003C\u002F",[29,73552,29],{"class":51429},[29,73554,73555],{"class":309},"> 条\u003C\u002F",[29,73557,51740],{"class":51429},[29,73559,51436],{"class":309},[29,73561,73562,73564,73566],{"class":31,"line":33123},[29,73563,52273],{"class":309},[29,73565,445],{"class":51429},[29,73567,51436],{"class":309},[29,73569,73570,73572,73574],{"class":31,"line":33137},[29,73571,51470],{"class":309},[29,73573,448],{"class":51429},[29,73575,51436],{"class":309},[29,73577,73578,73580,73582],{"class":31,"line":33143},[29,73579,55363],{"class":309},[29,73581,451],{"class":51429},[29,73583,51436],{"class":309},[29,73585,73586,73588,73590,73593,73595],{"class":31,"line":33149},[29,73587,55431],{"class":309},[29,73589,454],{"class":51429},[29,73591,73592],{"class":309},">ID\u003C\u002F",[29,73594,454],{"class":51429},[29,73596,51436],{"class":309},[29,73598,73599,73601,73603,73605,73607],{"class":31,"line":33160},[29,73600,55431],{"class":309},[29,73602,454],{"class":51429},[29,73604,69584],{"class":309},[29,73606,454],{"class":51429},[29,73608,51436],{"class":309},[29,73610,73611,73613,73615,73617,73619],{"class":31,"line":33166},[29,73612,55431],{"class":309},[29,73614,454],{"class":51429},[29,73616,69597],{"class":309},[29,73618,454],{"class":51429},[29,73620,51436],{"class":309},[29,73622,73623,73625,73627,73629,73631],{"class":31,"line":33172},[29,73624,55431],{"class":309},[29,73626,454],{"class":51429},[29,73628,69610],{"class":309},[29,73630,454],{"class":51429},[29,73632,51436],{"class":309},[29,73634,73635,73637,73639,73641,73643],{"class":31,"line":33182},[29,73636,55431],{"class":309},[29,73638,454],{"class":51429},[29,73640,69623],{"class":309},[29,73642,454],{"class":51429},[29,73644,51436],{"class":309},[29,73646,73647,73649,73651,73653,73655],{"class":31,"line":33188},[29,73648,55431],{"class":309},[29,73650,454],{"class":51429},[29,73652,69636],{"class":309},[29,73654,454],{"class":51429},[29,73656,51436],{"class":309},[29,73658,73659,73661,73663,73666,73668],{"class":31,"line":33199},[29,73660,55431],{"class":309},[29,73662,454],{"class":51429},[29,73664,73665],{"class":309},">录入时间\u003C\u002F",[29,73667,454],{"class":51429},[29,73669,51436],{"class":309},[29,73671,73672,73674,73676,73678,73680],{"class":31,"line":33205},[29,73673,55431],{"class":309},[29,73675,454],{"class":51429},[29,73677,69649],{"class":309},[29,73679,454],{"class":51429},[29,73681,51436],{"class":309},[29,73683,73684,73686,73688],{"class":31,"line":33215},[29,73685,55536],{"class":309},[29,73687,451],{"class":51429},[29,73689,51436],{"class":309},[29,73691,73692,73694,73696],{"class":31,"line":33220},[29,73693,51905],{"class":309},[29,73695,448],{"class":51429},[29,73697,51436],{"class":309},[29,73699,73700,73702,73704],{"class":31,"line":33226},[29,73701,51470],{"class":309},[29,73703,492],{"class":51429},[29,73705,51436],{"class":309},[29,73707,73708],{"class":31,"line":33275},[29,73709,73710],{"class":367},"      \u003C!-- \u003Ctr>\n",[29,73712,73713],{"class":31,"line":33322},[29,73714,73715],{"class":367},"        \u003Ctd>1\u003C\u002Ftd>\n",[29,73717,73718],{"class":31,"line":33327},[29,73719,73715],{"class":367},[29,73721,73722],{"class":31,"line":33333},[29,73723,73715],{"class":367},[29,73725,73726],{"class":31,"line":33352},[29,73727,73715],{"class":367},[29,73729,73730],{"class":31,"line":33358},[29,73731,73715],{"class":367},[29,73733,73734],{"class":31,"line":33378},[29,73735,73715],{"class":367},[29,73737,73738],{"class":31,"line":33384},[29,73739,73715],{"class":367},[29,73741,73742],{"class":31,"line":33390},[29,73743,73744],{"class":367},"        \u003Ctd>\n",[29,73746,73747],{"class":31,"line":33400},[29,73748,73749],{"class":367},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[29,73751,73752],{"class":31,"line":33405},[29,73753,73754],{"class":367},"        \u003C\u002Ftd>\n",[29,73756,73757],{"class":31,"line":33411},[29,73758,73759],{"class":367},"      \u003C\u002Ftr> -->\n",[29,73761,73762,73764,73766],{"class":31,"line":33427},[29,73763,51905],{"class":309},[29,73765,492],{"class":51429},[29,73767,51436],{"class":309},[29,73769,73770,73772,73774],{"class":31,"line":33472},[29,73771,52546],{"class":309},[29,73773,445],{"class":51429},[29,73775,51436],{"class":309},[29,73777,73778,73780,73782],{"class":31,"line":33478},[29,73779,52273],{"class":309},[29,73781,51942],{"class":51429},[29,73783,51436],{"class":309},[29,73785,73786],{"class":31,"line":33484},[29,73787,73788],{"class":367},"    \u002F\u002F const initData = [{\n",[29,73790,73791],{"class":31,"line":33490},[29,73792,73793],{"class":367},"    \u002F\u002F   unameId: 1,\n",[29,73795,73796],{"class":31,"line":33501},[29,73797,73798],{"class":367},"    \u002F\u002F   uname: '华晨宇',\n",[29,73800,73801],{"class":31,"line":33507},[29,73802,73803],{"class":367},"    \u002F\u002F   age: 22,\n",[29,73805,73806],{"class":31,"line":33513},[29,73807,73808],{"class":367},"    \u002F\u002F   salary: 12000,\n",[29,73810,73811],{"class":31,"line":33519},[29,73812,73813],{"class":367},"    \u002F\u002F   gender: '男',\n",[29,73815,73816],{"class":31,"line":33537},[29,73817,73818],{"class":367},"    \u002F\u002F   city: '北京',\n",[29,73820,73821],{"class":31,"line":33551},[29,73822,73823],{"class":367},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[29,73825,73826],{"class":31,"line":33560},[29,73827,73828],{"class":367},"    \u002F\u002F }]\n",[29,73830,73831],{"class":31,"line":33569},[29,73832,73833],{"class":367},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[29,73835,73836],{"class":31,"line":33578},[29,73837,73838],{"class":367},"    \u002F\u002F 1.渲染业务\n",[29,73840,73841],{"class":31,"line":33587},[29,73842,73843],{"class":367},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[29,73845,73846],{"class":31,"line":33593},[29,73847,73848],{"class":367},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[29,73850,73851],{"class":31,"line":33599},[29,73852,73853],{"class":367},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[29,73855,73856],{"class":31,"line":33607},[29,73857,2575],{"emptyLinePlaceholder":233},[29,73859,73860],{"class":31,"line":33612},[29,73861,73862],{"class":367},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[29,73864,73865],{"class":31,"line":33618},[29,73866,73867],{"class":367},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[29,73869,73870,73872,73874,73876],{"class":31,"line":33629},[29,73871,11396],{"class":305},[29,73873,57824],{"class":39},[29,73875,13739],{"class":305},[29,73877,51967],{"class":309},[29,73879,73880,73883,73885],{"class":31,"line":33635},[29,73881,73882],{"class":309},"    console.",[29,73884,58376],{"class":35},[29,73886,52541],{"class":309},[29,73888,73889],{"class":31,"line":33655},[29,73890,2575],{"emptyLinePlaceholder":233},[29,73892,73893],{"class":31,"line":33661},[29,73894,73895],{"class":367},"    \u002F\u002F 时间函数\n",[29,73897,73898,73900,73903],{"class":31,"line":33667},[29,73899,70213],{"class":305},[29,73901,73902],{"class":35}," getTime",[29,73904,11028],{"class":309},[29,73906,73907,73909,73912,73914,73916,73919],{"class":31,"line":33673},[29,73908,58357],{"class":305},[29,73910,73911],{"class":39}," date",[29,73913,13739],{"class":305},[29,73915,11753],{"class":305},[29,73917,73918],{"class":35}," Date",[29,73920,2151],{"class":309},[29,73922,73923,73925,73927,73929,73932,73935,73937,73939,73941,73944,73947,73949,73951,73953,73955,73957,73959,73961],{"class":31,"line":33690},[29,73924,58357],{"class":305},[29,73926,16266],{"class":39},[29,73928,13739],{"class":305},[29,73930,73931],{"class":309}," date.",[29,73933,73934],{"class":35},"getHours",[29,73936,13225],{"class":309},[29,73938,1218],{"class":305},[29,73940,2213],{"class":39},[29,73942,73943],{"class":305}," ?",[29,73945,73946],{"class":103}," '0'",[29,73948,45695],{"class":305},[29,73950,73931],{"class":309},[29,73952,73934],{"class":35},[29,73954,13225],{"class":309},[29,73956,1167],{"class":305},[29,73958,73931],{"class":309},[29,73960,73934],{"class":35},[29,73962,2151],{"class":309},[29,73964,73965,73967,73970,73972,73974,73977,73979,73981,73983,73985,73987,73989,73991,73993,73995,73997,73999,74001],{"class":31,"line":33696},[29,73966,58357],{"class":305},[29,73968,73969],{"class":39}," m",[29,73971,13739],{"class":305},[29,73973,73931],{"class":309},[29,73975,73976],{"class":35},"getMinutes",[29,73978,13225],{"class":309},[29,73980,1218],{"class":305},[29,73982,2213],{"class":39},[29,73984,73943],{"class":305},[29,73986,73946],{"class":103},[29,73988,45695],{"class":305},[29,73990,73931],{"class":309},[29,73992,73976],{"class":35},[29,73994,13225],{"class":309},[29,73996,1167],{"class":305},[29,73998,73931],{"class":309},[29,74000,73976],{"class":35},[29,74002,2151],{"class":309},[29,74004,74005,74007,74009,74011,74013,74016,74018,74020,74022,74024,74026,74028,74030,74032,74034,74036,74038,74040],{"class":31,"line":33702},[29,74006,58357],{"class":305},[29,74008,8603],{"class":39},[29,74010,13739],{"class":305},[29,74012,73931],{"class":309},[29,74014,74015],{"class":35},"getSeconds",[29,74017,13225],{"class":309},[29,74019,1218],{"class":305},[29,74021,2213],{"class":39},[29,74023,73943],{"class":305},[29,74025,73946],{"class":103},[29,74027,45695],{"class":305},[29,74029,73931],{"class":309},[29,74031,74015],{"class":35},[29,74033,13225],{"class":309},[29,74035,1167],{"class":305},[29,74037,73931],{"class":309},[29,74039,74015],{"class":35},[29,74041,2151],{"class":309},[29,74043,74044,74046,74049,74051,74053,74056,74058,74061,74063,74066,74068,74070,74073,74075,74077,74079,74081,74083,74085,74088,74090,74093,74095,74098,74100,74102,74104],{"class":31,"line":33708},[29,74045,58357],{"class":305},[29,74047,74048],{"class":39}," str",[29,74050,13739],{"class":305},[29,74052,63032],{"class":103},[29,74054,74055],{"class":309},"date",[29,74057,866],{"class":103},[29,74059,74060],{"class":35},"getFullYear",[29,74062,2602],{"class":103},[29,74064,74065],{"class":103},"}\u002F${",[29,74067,74055],{"class":309},[29,74069,866],{"class":103},[29,74071,74072],{"class":35},"getMonth",[29,74074,13225],{"class":103},[29,74076,789],{"class":305},[29,74078,25247],{"class":39},[29,74080,74065],{"class":103},[29,74082,74055],{"class":309},[29,74084,866],{"class":103},[29,74086,74087],{"class":35},"getDate",[29,74089,2602],{"class":103},[29,74091,74092],{"class":103},"} ${",[29,74094,723],{"class":309},[29,74096,74097],{"class":103},"}:${",[29,74099,852],{"class":309},[29,74101,74097],{"class":103},[29,74103,1003],{"class":309},[29,74105,74106],{"class":103},"}`\n",[29,74108,74109,74112],{"class":31,"line":33714},[29,74110,74111],{"class":305},"      return",[29,74113,74114],{"class":309}," str\n",[29,74116,74117],{"class":31,"line":33720},[29,74118,2362],{"class":309},[29,74120,74121],{"class":31,"line":33747},[29,74122,74123],{"class":367},"    \u002F\u002F 渲染函数\n",[29,74125,74126,74128,74130,74132,74134,74136,74138,74140],{"class":31,"line":33771},[29,74127,11396],{"class":305},[29,74129,69876],{"class":39},[29,74131,13739],{"class":305},[29,74133,54525],{"class":309},[29,74135,54528],{"class":35},[29,74137,310],{"class":309},[29,74139,69887],{"class":103},[29,74141,316],{"class":309},[29,74143,74144,74146,74148],{"class":31,"line":33777},[29,74145,70213],{"class":305},[29,74147,70216],{"class":35},[29,74149,11028],{"class":309},[29,74151,74152],{"class":31,"line":33783},[29,74153,74154],{"class":367},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[29,74156,74157],{"class":31,"line":33789},[29,74158,74159],{"class":367},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[29,74161,74162,74164,74167,74169,74171,74174,74176,74178,74180,74183,74185,74188],{"class":31,"line":33800},[29,74163,58357],{"class":305},[29,74165,74166],{"class":39}," trArr",[29,74168,13739],{"class":305},[29,74170,52094],{"class":309},[29,74172,74173],{"class":35},"map",[29,74175,310],{"class":309},[29,74177,54578],{"class":305},[29,74179,1834],{"class":309},[29,74181,74182],{"class":5391},"ele",[29,74184,12610],{"class":309},[29,74186,74187],{"class":5391},"index",[29,74189,12617],{"class":309},[29,74191,74192,74194],{"class":31,"line":33811},[29,74193,14927],{"class":305},[29,74195,70297],{"class":103},[29,74197,74198],{"class":31,"line":33817},[29,74199,74200],{"class":103},"      \u003Ctr>\n",[29,74202,74203,74205,74207,74209,74212],{"class":31,"line":33834},[29,74204,70302],{"class":103},[29,74206,74182],{"class":309},[29,74208,866],{"class":103},[29,74210,74211],{"class":309},"unameId",[29,74213,70317],{"class":103},[29,74215,74216,74218,74220,74222,74224],{"class":31,"line":33857},[29,74217,70302],{"class":103},[29,74219,74182],{"class":309},[29,74221,866],{"class":103},[29,74223,70333],{"class":309},[29,74225,70317],{"class":103},[29,74227,74228,74230,74232,74234,74236],{"class":31,"line":33880},[29,74229,70302],{"class":103},[29,74231,74182],{"class":309},[29,74233,866],{"class":103},[29,74235,70350],{"class":309},[29,74237,70317],{"class":103},[29,74239,74240,74242,74244,74246,74248],{"class":31,"line":33886},[29,74241,70302],{"class":103},[29,74243,74182],{"class":309},[29,74245,866],{"class":103},[29,74247,70367],{"class":309},[29,74249,70317],{"class":103},[29,74251,74252,74254,74256,74258,74260],{"class":31,"line":33891},[29,74253,70302],{"class":103},[29,74255,74182],{"class":309},[29,74257,866],{"class":103},[29,74259,70384],{"class":309},[29,74261,70317],{"class":103},[29,74263,74264,74266,74268,74270,74272],{"class":31,"line":33900},[29,74265,70302],{"class":103},[29,74267,74182],{"class":309},[29,74269,866],{"class":103},[29,74271,70401],{"class":309},[29,74273,70317],{"class":103},[29,74275,74276,74278,74280,74282,74284],{"class":31,"line":33910},[29,74277,70302],{"class":103},[29,74279,74182],{"class":309},[29,74281,866],{"class":103},[29,74283,2562],{"class":309},[29,74285,70317],{"class":103},[29,74287,74288],{"class":31,"line":33916},[29,74289,73744],{"class":103},[29,74291,74292,74295,74297],{"class":31,"line":33921},[29,74293,74294],{"class":103},"          \u003Ca href=\"#\" data-id=\"${",[29,74296,74187],{"class":309},[29,74298,74299],{"class":103},"}\">删除\u003C\u002Fa>\n",[29,74301,74302],{"class":31,"line":33927},[29,74303,73754],{"class":103},[29,74305,74306],{"class":31,"line":33940},[29,74307,74308],{"class":103},"      \u003C\u002Ftr>\n",[29,74310,74311],{"class":31,"line":33946},[29,74312,74313],{"class":103},"  `\n",[29,74315,74316],{"class":31,"line":33957},[29,74317,64944],{"class":309},[29,74319,74320,74322,74324],{"class":31,"line":33968},[29,74321,58373],{"class":309},[29,74323,58376],{"class":35},[29,74325,74326],{"class":309},"(trArr)\n",[29,74328,74329],{"class":31,"line":33987},[29,74330,2575],{"emptyLinePlaceholder":233},[29,74332,74333],{"class":31,"line":49647},[29,74334,74335],{"class":367},"      \u002F\u002F (2) 把数组转换为字符串join\n",[29,74337,74338],{"class":31,"line":49652},[29,74339,74340],{"class":367},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[29,74342,74343,74345,74347,74350,74353,74355,74358],{"class":31,"line":49661},[29,74344,70228],{"class":309},[29,74346,355],{"class":305},[29,74348,74349],{"class":309}," trArr.",[29,74351,74352],{"class":35},"join",[29,74354,310],{"class":309},[29,74356,74357],{"class":103},"''",[29,74359,316],{"class":309},[29,74361,74362],{"class":31,"line":49670},[29,74363,74364],{"class":367},"      \u002F\u002F 显示共有几条\n",[29,74366,74367,74369,74371,74373,74376,74379,74381,74383],{"class":31,"line":49675},[29,74368,55900],{"class":309},[29,74370,54528],{"class":35},[29,74372,310],{"class":309},[29,74374,74375],{"class":103},"'.total span'",[29,74377,74378],{"class":309},").innerHTML ",[29,74380,355],{"class":305},[29,74382,52094],{"class":309},[29,74384,55960],{"class":39},[29,74386,74387],{"class":31,"line":49680},[29,74388,2362],{"class":309},[29,74390,74391],{"class":31,"line":49685},[29,74392,74393],{"class":367},"    \u002F\u002F render()\n",[29,74395,74396],{"class":31,"line":49698},[29,74397,2575],{"emptyLinePlaceholder":233},[29,74399,74400],{"class":31,"line":49703},[29,74401,74402],{"class":367},"    \u002F\u002F 获取DOM对象\n",[29,74404,74405,74407,74409,74411,74413,74415,74417,74419],{"class":31,"line":49712},[29,74406,11396],{"class":305},[29,74408,69950],{"class":39},[29,74410,13739],{"class":305},[29,74412,54525],{"class":309},[29,74414,54528],{"class":35},[29,74416,310],{"class":309},[29,74418,69961],{"class":103},[29,74420,316],{"class":309},[29,74422,74423,74425,74427,74429,74431,74433,74435,74437],{"class":31,"line":49721},[29,74424,11396],{"class":305},[29,74426,69777],{"class":39},[29,74428,13739],{"class":305},[29,74430,54525],{"class":309},[29,74432,54528],{"class":35},[29,74434,310],{"class":309},[29,74436,69788],{"class":103},[29,74438,316],{"class":309},[29,74440,74441,74443,74445,74447,74449,74451,74453,74455],{"class":31,"line":49738},[29,74442,11396],{"class":305},[29,74444,15864],{"class":39},[29,74446,13739],{"class":305},[29,74448,54525],{"class":309},[29,74450,54528],{"class":35},[29,74452,310],{"class":309},[29,74454,69807],{"class":103},[29,74456,316],{"class":309},[29,74458,74460,74462,74464,74466,74468,74470,74472,74474],{"class":31,"line":74459},231,[29,74461,11396],{"class":305},[29,74463,69836],{"class":39},[29,74465,13739],{"class":305},[29,74467,54525],{"class":309},[29,74469,54528],{"class":35},[29,74471,310],{"class":309},[29,74473,69847],{"class":103},[29,74475,316],{"class":309},[29,74477,74479,74481,74483,74485,74487,74489,74491,74493],{"class":31,"line":74478},232,[29,74480,11396],{"class":305},[29,74482,69816],{"class":39},[29,74484,13739],{"class":305},[29,74486,54525],{"class":309},[29,74488,54528],{"class":35},[29,74490,310],{"class":309},[29,74492,69827],{"class":103},[29,74494,316],{"class":309},[29,74496,74498,74500,74502,74504,74506,74508,74510,74512],{"class":31,"line":74497},233,[29,74499,11396],{"class":305},[29,74501,69856],{"class":39},[29,74503,13739],{"class":305},[29,74505,54525],{"class":309},[29,74507,54528],{"class":35},[29,74509,310],{"class":309},[29,74511,69867],{"class":103},[29,74513,316],{"class":309},[29,74515,74517],{"class":31,"line":74516},234,[29,74518,2575],{"emptyLinePlaceholder":233},[29,74520,74522],{"class":31,"line":74521},235,[29,74523,74524],{"class":367},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[29,74526,74528,74530,74532,74534,74536,74538,74540,74542,74544],{"class":31,"line":74527},236,[29,74529,69968],{"class":309},[29,74531,57942],{"class":35},[29,74533,310],{"class":309},[29,74535,69975],{"class":103},[29,74537,12610],{"class":309},[29,74539,54578],{"class":305},[29,74541,1834],{"class":309},[29,74543,383],{"class":5391},[29,74545,12617],{"class":309},[29,74547,74549],{"class":31,"line":74548},237,[29,74550,74551],{"class":367},"      \u002F\u002F 禁止浏览器跳转\n",[29,74553,74555,74557,74559],{"class":31,"line":74554},238,[29,74556,69995],{"class":309},[29,74558,69998],{"class":35},[29,74560,2151],{"class":309},[29,74562,74564],{"class":31,"line":74563},239,[29,74565,74566],{"class":367},"      \u002F\u002F 非空判断\n",[29,74568,74570],{"class":31,"line":74569},240,[29,74571,74572],{"class":367},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[29,74574,74576],{"class":31,"line":74575},241,[29,74577,74578],{"class":367},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[29,74580,74582,74584,74586,74588,74591,74593,74596,74599,74601,74603],{"class":31,"line":74581},242,[29,74583,54609],{"class":305},[29,74585,1834],{"class":309},[29,74587,534],{"class":305},[29,74589,74590],{"class":309},"uname.value ",[29,74592,71486],{"class":305},[29,74594,74595],{"class":305}," !",[29,74597,74598],{"class":309},"age.value ",[29,74600,71486],{"class":305},[29,74602,74595],{"class":305},[29,74604,74605],{"class":309},"salary.value) {\n",[29,74607,74609,74611,74613,74615,74617],{"class":31,"line":74608},243,[29,74610,14927],{"class":305},[29,74612,70069],{"class":35},[29,74614,310],{"class":309},[29,74616,70074],{"class":103},[29,74618,316],{"class":309},[29,74620,74622],{"class":31,"line":74621},244,[29,74623,52527],{"class":309},[29,74625,74627,74629,74631],{"class":31,"line":74626},245,[29,74628,58136],{"class":309},[29,74630,52013],{"class":35},[29,74632,74633],{"class":309},"({\n",[29,74635,74637],{"class":31,"line":74636},246,[29,74638,74639],{"class":367},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[29,74641,74643],{"class":31,"line":74642},247,[29,74644,74645],{"class":367},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[29,74647,74649],{"class":31,"line":74648},248,[29,74650,74651],{"class":367},"        \u002F\u002F 对象的序号应为数组长度+1\n",[29,74653,74655],{"class":31,"line":74654},249,[29,74656,74657],{"class":367},"        \u002F\u002F unameId: arr.length + 1,\n",[29,74659,74661],{"class":31,"line":74660},250,[29,74662,2575],{"emptyLinePlaceholder":233},[29,74664,74666],{"class":31,"line":74665},251,[29,74667,74668],{"class":367},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[29,74670,74672],{"class":31,"line":74671},252,[29,74673,74674],{"class":367},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[29,74676,74678],{"class":31,"line":74677},253,[29,74679,74680],{"class":367},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[29,74682,74684],{"class":31,"line":74683},254,[29,74685,74686],{"class":367},"        \u002F\u002F 0当假看\n",[29,74688,74690,74693,74695,74697,74700,74702,74704,74706,74709,74711,74713,74716,74718],{"class":31,"line":74689},255,[29,74691,74692],{"class":309},"        unameId: arr.",[29,74694,52097],{"class":39},[29,74696,73943],{"class":305},[29,74698,74699],{"class":309}," arr[arr.",[29,74701,52097],{"class":39},[29,74703,52400],{"class":305},[29,74705,25247],{"class":39},[29,74707,74708],{"class":309},"].unameId ",[29,74710,789],{"class":305},[29,74712,25247],{"class":39},[29,74714,74715],{"class":305}," :",[29,74717,25247],{"class":39},[29,74719,31595],{"class":309},[29,74721,74723],{"class":31,"line":74722},256,[29,74724,70122],{"class":309},[29,74726,74728],{"class":31,"line":74727},257,[29,74729,70127],{"class":309},[29,74731,74733],{"class":31,"line":74732},258,[29,74734,70137],{"class":309},[29,74736,74738],{"class":31,"line":74737},259,[29,74739,70132],{"class":309},[29,74741,74743],{"class":31,"line":74742},260,[29,74744,74745],{"class":309},"        city: city.value,\n",[29,74747,74749],{"class":31,"line":74748},261,[29,74750,74751],{"class":367},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[29,74753,74755],{"class":31,"line":74754},262,[29,74756,74757],{"class":367},"        \u002F\u002F time: new Date().toDateString()\n",[29,74759,74761,74764,74767],{"class":31,"line":74760},263,[29,74762,74763],{"class":309},"        time: ",[29,74765,74766],{"class":35},"getTime",[29,74768,2151],{"class":309},[29,74770,74772],{"class":31,"line":74771},264,[29,74773,64944],{"class":309},[29,74775,74777],{"class":31,"line":74776},265,[29,74778,74779],{"class":367},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[29,74781,74783,74785],{"class":31,"line":74782},266,[29,74784,70197],{"class":35},[29,74786,2151],{"class":309},[29,74788,74790,74792,74794,74796,74798],{"class":31,"line":74789},267,[29,74791,70180],{"class":39},[29,74793,866],{"class":309},[29,74795,70185],{"class":35},[29,74797,13225],{"class":309},[29,74799,74800],{"class":367},"\u002F\u002F重置表单\n",[29,74802,74804],{"class":31,"line":74803},268,[29,74805,74806],{"class":367},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[29,74808,74810,74813,74815,74817,74820,74822,74824,74826,74828],{"class":31,"line":74809},269,[29,74811,74812],{"class":309},"      localStorage.",[29,74814,71783],{"class":35},[29,74816,310],{"class":309},[29,74818,74819],{"class":103},"'data'",[29,74821,12610],{"class":309},[29,74823,71793],{"class":39},[29,74825,866],{"class":309},[29,74827,71798],{"class":35},[29,74829,74830],{"class":309},"(arr))\n",[29,74832,74834],{"class":31,"line":74833},270,[29,74835,33590],{"class":309},[29,74837,74839],{"class":31,"line":74838},271,[29,74840,2575],{"emptyLinePlaceholder":233},[29,74842,74844],{"class":31,"line":74843},272,[29,74845,74846],{"class":367},"    \u002F\u002F 3.删除业务\n",[29,74848,74850],{"class":31,"line":74849},273,[29,74851,74852],{"class":367},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[29,74854,74856,74858,74860,74862,74864,74866,74868,74870,74872],{"class":31,"line":74855},274,[29,74857,70470],{"class":309},[29,74859,57942],{"class":35},[29,74861,310],{"class":309},[29,74863,57947],{"class":103},[29,74865,12610],{"class":309},[29,74867,54578],{"class":305},[29,74869,1834],{"class":309},[29,74871,383],{"class":5391},[29,74873,12617],{"class":309},[29,74875,74877],{"class":31,"line":74876},275,[29,74878,74879],{"class":367},"      \u002F\u002F 判断是否点击的是删除按钮\n",[29,74881,74883,74885,74887,74889,74891],{"class":31,"line":74882},276,[29,74884,54609],{"class":305},[29,74886,67163],{"class":309},[29,74888,54615],{"class":305},[29,74890,68385],{"class":103},[29,74892,12617],{"class":309},[29,74894,74896],{"class":31,"line":74895},277,[29,74897,74898],{"class":367},"        \u002F\u002F alert(1)\n",[29,74900,74902],{"class":31,"line":74901},278,[29,74903,74904],{"class":367},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[29,74906,74908],{"class":31,"line":74907},279,[29,74909,74910],{"class":367},"        \u002F\u002F console.log(e.target)\n",[29,74912,74914],{"class":31,"line":74913},280,[29,74915,74916],{"class":367},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[29,74918,74920],{"class":31,"line":74919},281,[29,74921,2575],{"emptyLinePlaceholder":233},[29,74923,74925],{"class":31,"line":74924},282,[29,74926,74927],{"class":367},"        \u002F\u002F 确认框，确然是否真的要删除\n",[29,74929,74931],{"class":31,"line":74930},283,[29,74932,74933],{"class":367},"        \u002F\u002F confirm()为确认框\n",[29,74935,74937],{"class":31,"line":74936},284,[29,74938,74939],{"class":367},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[29,74941,74943,74945,74947,74950,74952,74955],{"class":31,"line":74942},285,[29,74944,2672],{"class":305},[29,74946,1834],{"class":309},[29,74948,74949],{"class":35},"confirm",[29,74951,310],{"class":309},[29,74953,74954],{"class":103},"'您确定要删除这条数据吗？'",[29,74956,74957],{"class":309},")) {\n",[29,74959,74961,74964,74966,74968,74970],{"class":31,"line":74960},286,[29,74962,74963],{"class":309},"          arr.",[29,74965,58139],{"class":35},[29,74967,70523],{"class":309},[29,74969,525],{"class":39},[29,74971,316],{"class":309},[29,74973,74975],{"class":31,"line":74974},287,[29,74976,74977],{"class":367},"          \u002F\u002F 3.4 重新渲染页面\n",[29,74979,74981,74984],{"class":31,"line":74980},288,[29,74982,74983],{"class":35},"          render",[29,74985,2151],{"class":309},[29,74987,74989],{"class":31,"line":74988},289,[29,74990,74991],{"class":367},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[29,74993,74995,74998,75000,75002,75004,75006,75008,75010,75012],{"class":31,"line":74994},290,[29,74996,74997],{"class":309},"          localStorage.",[29,74999,71783],{"class":35},[29,75001,310],{"class":309},[29,75003,74819],{"class":103},[29,75005,12610],{"class":309},[29,75007,71793],{"class":39},[29,75009,866],{"class":309},[29,75011,71798],{"class":35},[29,75013,74830],{"class":309},[29,75015,75017],{"class":31,"line":75016},291,[29,75018,2704],{"class":309},[29,75020,75022],{"class":31,"line":75021},292,[29,75023,52527],{"class":309},[29,75025,75027],{"class":31,"line":75026},293,[29,75028,2575],{"emptyLinePlaceholder":233},[29,75030,75032],{"class":31,"line":75031},294,[29,75033,33590],{"class":309},[29,75035,75037],{"class":31,"line":75036},295,[29,75038,2575],{"emptyLinePlaceholder":233},[29,75040,75042,75044,75046],{"class":31,"line":75041},296,[29,75043,52546],{"class":309},[29,75045,51942],{"class":51429},[29,75047,51436],{"class":309},[29,75049,75051,75053,75055],{"class":31,"line":75050},297,[29,75052,51914],{"class":309},[29,75054,51929],{"class":51429},[29,75056,51436],{"class":309},[29,75058,75060],{"class":31,"line":75059},298,[29,75061,2575],{"emptyLinePlaceholder":233},[29,75063,75065,75067,75069],{"class":31,"line":75064},299,[29,75066,51914],{"class":309},[29,75068,50764],{"class":51429},[29,75070,51436],{"class":309},[14,75072,75074],{"id":75073},"_36-正则表达式","3.6 正则表达式",[171,75076,75077],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[171,75079,75080],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[171,75082,75083],{},"正则表达式的作用：",[175,75085,75086,75093,75099],{},[178,75087,75088,75089,75092],{},"表单验证（ ",[457,75090,75091],{},"匹配"," ）",[178,75094,75095,75096,75092],{},"过滤敏感词（ ",[457,75097,75098],{},"替换",[178,75100,75101,75102,75092],{},"字符串中提取我们想要的部分（ ",[457,75103,75104],{},"提取",[275,75106,75108],{"id":75107},"_361-语法","3.6.1 语法",[171,75110,75111],{},"正则表达式使用步骤：",[259,75113,75114,75117],{},[178,75115,75116],{},"定义规则",[178,75118,75119],{},"查找是否匹配",[171,75121,75122],{},"正则表达式里边不需要写引号",[171,75124,75125],{},[1638,75126],{"alt":24,"src":75127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[171,75129,75130],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[171,75132,75133],{},"reg.test(str)",[171,75135,75136],{},[1638,75137],{"alt":24,"src":75138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[171,75140,75141],{},[1638,75142],{"alt":24,"src":75143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[275,75145,75147],{"id":75146},"_362-元字符","3.6.2 元字符",[259,75149,75150,75153,75156,75159,75166],{},[178,75151,75152],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[178,75154,75155],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[178,75157,75158],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[178,75160,75161,75162],{},"正则验证工具：",[546,75163,75164],{"href":75164,"rel":75165},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24038],[178,75167,75168],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22173,75170,75172],{"id":75171},"_3621-边界符","3.6.2.1 边界符",[171,75174,75175],{},[1638,75176],{"alt":24,"src":75177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[171,75179,75180],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[171,75182,75183],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[171,75185,75186],{},"只匹配一次",[171,75188,75189],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22173,75191,75193],{"id":75192},"_3622-量词","3.6.2.2 量词",[171,75195,75196],{},[1638,75197],{"alt":24,"src":75198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[171,75200,75201],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22173,75203,75205],{"id":75204},"_3623-元字符","3.6.2.3 元字符",[171,75207,75208],{},[1638,75209],{"alt":24,"src":75210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[171,75212,75213],{},"匹配的是a或b或c []只选一个",[171,75215,75216],{},[1638,75217],{"alt":24,"src":75218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[171,75220,75221],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[171,75223,75224],{},[1638,75225],{"alt":24,"src":75226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[171,75228,75229],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[171,75231,75232],{},[1638,75233],{"alt":24,"src":75234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[19,75236,75238],{"className":50762,"code":75237,"language":50764,"meta":24,"style":24},"\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",[26,75239,75240,75250,75264,75268,75276,75290,75310,75322,75330,75334,75342,75350,75355,75386,75413,75441,75445,75450,75478,75509,75514,75519,75550,75582,75614,75618,75623,75654,75684,75714,75718,75723,75754,75785,75815,75845,75849,75854,75887,75891,75896,75927,75958,75962,75967,75998,76028,76059,76063,76068,76100,76131,76162,76189,76220,76252,76285,76316,76347,76379,76410,76418,76426,76430],{"__ignoreMap":24},[29,75241,75242,75244,75246,75248],{"class":31,"line":32},[29,75243,51426],{"class":309},[29,75245,51430],{"class":51429},[29,75247,51433],{"class":35},[29,75249,51436],{"class":309},[29,75251,75252,75254,75256,75258,75260,75262],{"class":31,"line":43},[29,75253,1218],{"class":309},[29,75255,50764],{"class":51429},[29,75257,51445],{"class":35},[29,75259,355],{"class":309},[29,75261,51450],{"class":103},[29,75263,51436],{"class":309},[29,75265,75266],{"class":31,"line":51},[29,75267,2575],{"emptyLinePlaceholder":233},[29,75269,75270,75272,75274],{"class":31,"line":59},[29,75271,1218],{"class":309},[29,75273,51463],{"class":51429},[29,75275,51436],{"class":309},[29,75277,75278,75280,75282,75284,75286,75288],{"class":31,"line":67},[29,75279,52273],{"class":309},[29,75281,51473],{"class":51429},[29,75283,51476],{"class":35},[29,75285,355],{"class":309},[29,75287,51481],{"class":103},[29,75289,51436],{"class":309},[29,75291,75292,75294,75296,75298,75300,75302,75304,75306,75308],{"class":31,"line":75},[29,75293,52273],{"class":309},[29,75295,51473],{"class":51429},[29,75297,15095],{"class":35},[29,75299,355],{"class":309},[29,75301,51520],{"class":103},[29,75303,51500],{"class":35},[29,75305,355],{"class":309},[29,75307,51527],{"class":103},[29,75309,51436],{"class":309},[29,75311,75312,75314,75316,75318,75320],{"class":31,"line":83},[29,75313,52273],{"class":309},[29,75315,51536],{"class":51429},[29,75317,51539],{"class":309},[29,75319,51536],{"class":51429},[29,75321,51436],{"class":309},[29,75323,75324,75326,75328],{"class":31,"line":158},[29,75325,51914],{"class":309},[29,75327,51463],{"class":51429},[29,75329,51436],{"class":309},[29,75331,75332],{"class":31,"line":166},[29,75333,2575],{"emptyLinePlaceholder":233},[29,75335,75336,75338,75340],{"class":31,"line":1505},[29,75337,1218],{"class":309},[29,75339,51929],{"class":51429},[29,75341,51436],{"class":309},[29,75343,75344,75346,75348],{"class":31,"line":1788},[29,75345,52273],{"class":309},[29,75347,51942],{"class":51429},[29,75349,51436],{"class":309},[29,75351,75352],{"class":31,"line":1793},[29,75353,75354],{"class":367},"    \u002F\u002F 元字符中\n",[29,75356,75357,75359,75361,75363,75365,75368,75370,75372,75375,75377,75380,75383],{"class":31,"line":1799},[29,75358,73882],{"class":309},[29,75360,58376],{"class":35},[29,75362,310],{"class":309},[29,75364,892],{"class":103},[29,75366,75367],{"class":48106},"哈",[29,75369,892],{"class":103},[29,75371,866],{"class":309},[29,75373,75374],{"class":35},"test",[29,75376,310],{"class":309},[29,75378,75379],{"class":103},"'哈'",[29,75381,75382],{"class":309},"))  ",[29,75384,75385],{"class":367},"\u002F\u002Ftrue\n",[29,75387,75388,75390,75392,75394,75396,75398,75400,75402,75404,75406,75409,75411],{"class":31,"line":1804},[29,75389,73882],{"class":309},[29,75391,58376],{"class":35},[29,75393,310],{"class":309},[29,75395,892],{"class":103},[29,75397,75367],{"class":48106},[29,75399,892],{"class":103},[29,75401,866],{"class":309},[29,75403,75374],{"class":35},[29,75405,310],{"class":309},[29,75407,75408],{"class":103},"'哈哈'",[29,75410,75382],{"class":309},[29,75412,75385],{"class":367},[29,75414,75415,75417,75419,75421,75423,75425,75427,75429,75431,75433,75436,75439],{"class":31,"line":1818},[29,75416,73882],{"class":309},[29,75418,58376],{"class":35},[29,75420,310],{"class":309},[29,75422,892],{"class":103},[29,75424,75367],{"class":48106},[29,75426,892],{"class":103},[29,75428,866],{"class":309},[29,75430,75374],{"class":35},[29,75432,310],{"class":309},[29,75434,75435],{"class":103},"'二哈'",[29,75437,75438],{"class":309},"))   ",[29,75440,75385],{"class":367},[29,75442,75443],{"class":31,"line":1823},[29,75444,2575],{"emptyLinePlaceholder":233},[29,75446,75447],{"class":31,"line":1829},[29,75448,75449],{"class":367},"    \u002F\u002F 1.边界符\n",[29,75451,75452,75454,75456,75458,75460,75462,75464,75466,75468,75470,75472,75474,75476],{"class":31,"line":1850},[29,75453,73882],{"class":309},[29,75455,58376],{"class":35},[29,75457,310],{"class":309},[29,75459,892],{"class":103},[29,75461,1274],{"class":305},[29,75463,75367],{"class":48106},[29,75465,892],{"class":103},[29,75467,866],{"class":309},[29,75469,75374],{"class":35},[29,75471,310],{"class":309},[29,75473,75379],{"class":103},[29,75475,75382],{"class":309},[29,75477,75385],{"class":367},[29,75479,75480,75482,75484,75486,75488,75490,75492,75494,75496,75498,75500,75502,75504,75506],{"class":31,"line":1855},[29,75481,73882],{"class":309},[29,75483,58376],{"class":35},[29,75485,310],{"class":309},[29,75487,892],{"class":103},[29,75489,1274],{"class":305},[29,75491,75367],{"class":48106},[29,75493,610],{"class":305},[29,75495,892],{"class":103},[29,75497,866],{"class":309},[29,75499,75374],{"class":35},[29,75501,310],{"class":309},[29,75503,75408],{"class":103},[29,75505,75382],{"class":309},[29,75507,75508],{"class":367},"\u002F\u002Ffalse\n",[29,75510,75511],{"class":31,"line":1869},[29,75512,75513],{"class":367},"    \u002F\u002F 2.量词\n",[29,75515,75516],{"class":31,"line":1874},[29,75517,75518],{"class":367},"    \u002F\u002F 量词 * 类似于 >= 0\n",[29,75520,75521,75523,75525,75527,75529,75531,75533,75536,75538,75540,75542,75544,75546,75548],{"class":31,"line":1903},[29,75522,73882],{"class":309},[29,75524,58376],{"class":35},[29,75526,310],{"class":309},[29,75528,892],{"class":103},[29,75530,1274],{"class":305},[29,75532,75367],{"class":48106},[29,75534,75535],{"class":305},"*$",[29,75537,892],{"class":103},[29,75539,866],{"class":309},[29,75541,75374],{"class":35},[29,75543,310],{"class":309},[29,75545,75408],{"class":103},[29,75547,75382],{"class":309},[29,75549,75385],{"class":367},[29,75551,75552,75554,75556,75558,75560,75562,75564,75566,75568,75570,75572,75574,75577,75579],{"class":31,"line":1908},[29,75553,73882],{"class":309},[29,75555,58376],{"class":35},[29,75557,310],{"class":309},[29,75559,892],{"class":103},[29,75561,1274],{"class":305},[29,75563,75367],{"class":48106},[29,75565,75535],{"class":305},[29,75567,892],{"class":103},[29,75569,866],{"class":309},[29,75571,75374],{"class":35},[29,75573,310],{"class":309},[29,75575,75576],{"class":103},"'二哈好傻'",[29,75578,75382],{"class":309},[29,75580,75581],{"class":367},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[29,75583,75584,75586,75588,75590,75592,75594,75596,75598,75600,75602,75604,75606,75609,75611],{"class":31,"line":1925},[29,75585,73882],{"class":309},[29,75587,58376],{"class":35},[29,75589,310],{"class":309},[29,75591,892],{"class":103},[29,75593,1274],{"class":305},[29,75595,75367],{"class":48106},[29,75597,75535],{"class":305},[29,75599,892],{"class":103},[29,75601,866],{"class":309},[29,75603,75374],{"class":35},[29,75605,310],{"class":309},[29,75607,75608],{"class":103},"'哈好哈'",[29,75610,75438],{"class":309},[29,75612,75613],{"class":367},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[29,75615,75616],{"class":31,"line":1930},[29,75617,2575],{"emptyLinePlaceholder":233},[29,75619,75620],{"class":31,"line":1935},[29,75621,75622],{"class":367},"    \u002F\u002F +类似于>=1\n",[29,75624,75625,75627,75629,75631,75633,75635,75637,75640,75642,75644,75646,75648,75650,75652],{"class":31,"line":1940},[29,75626,73882],{"class":309},[29,75628,58376],{"class":35},[29,75630,310],{"class":309},[29,75632,892],{"class":103},[29,75634,1274],{"class":305},[29,75636,75367],{"class":48106},[29,75638,75639],{"class":305},"+$",[29,75641,892],{"class":103},[29,75643,866],{"class":309},[29,75645,75374],{"class":35},[29,75647,310],{"class":309},[29,75649,75408],{"class":103},[29,75651,75382],{"class":309},[29,75653,75385],{"class":367},[29,75655,75656,75658,75660,75662,75664,75666,75668,75670,75672,75674,75676,75678,75680,75682],{"class":31,"line":1954},[29,75657,73882],{"class":309},[29,75659,58376],{"class":35},[29,75661,310],{"class":309},[29,75663,892],{"class":103},[29,75665,1274],{"class":305},[29,75667,75367],{"class":48106},[29,75669,75639],{"class":305},[29,75671,892],{"class":103},[29,75673,866],{"class":309},[29,75675,75374],{"class":35},[29,75677,310],{"class":309},[29,75679,75576],{"class":103},[29,75681,75382],{"class":309},[29,75683,75581],{"class":367},[29,75685,75686,75688,75690,75692,75694,75696,75698,75700,75702,75704,75706,75708,75710,75712],{"class":31,"line":1959},[29,75687,73882],{"class":309},[29,75689,58376],{"class":35},[29,75691,310],{"class":309},[29,75693,892],{"class":103},[29,75695,1274],{"class":305},[29,75697,75367],{"class":48106},[29,75699,75639],{"class":305},[29,75701,892],{"class":103},[29,75703,866],{"class":309},[29,75705,75374],{"class":35},[29,75707,310],{"class":309},[29,75709,75608],{"class":103},[29,75711,75438],{"class":309},[29,75713,75508],{"class":367},[29,75715,75716],{"class":31,"line":2752},[29,75717,2575],{"emptyLinePlaceholder":233},[29,75719,75720],{"class":31,"line":2766},[29,75721,75722],{"class":367},"    \u002F\u002F ?类似于0次或一次\n",[29,75724,75725,75727,75729,75731,75733,75735,75738,75740,75742,75744,75746,75748,75750,75752],{"class":31,"line":2774},[29,75726,73882],{"class":309},[29,75728,58376],{"class":35},[29,75730,310],{"class":309},[29,75732,892],{"class":103},[29,75734,1274],{"class":305},[29,75736,75737],{"class":48106},"哈？",[29,75739,610],{"class":305},[29,75741,892],{"class":103},[29,75743,866],{"class":309},[29,75745,75374],{"class":35},[29,75747,310],{"class":309},[29,75749,74357],{"class":103},[29,75751,75438],{"class":309},[29,75753,75385],{"class":367},[29,75755,75756,75758,75760,75762,75764,75766,75768,75771,75773,75775,75777,75779,75781,75783],{"class":31,"line":2779},[29,75757,73882],{"class":309},[29,75759,58376],{"class":35},[29,75761,310],{"class":309},[29,75763,892],{"class":103},[29,75765,1274],{"class":305},[29,75767,75367],{"class":48106},[29,75769,75770],{"class":305},"?$",[29,75772,892],{"class":103},[29,75774,866],{"class":309},[29,75776,75374],{"class":35},[29,75778,310],{"class":309},[29,75780,75408],{"class":103},[29,75782,75382],{"class":309},[29,75784,75508],{"class":367},[29,75786,75787,75789,75791,75793,75795,75797,75799,75801,75803,75805,75807,75809,75811,75813],{"class":31,"line":2785},[29,75788,73882],{"class":309},[29,75790,58376],{"class":35},[29,75792,310],{"class":309},[29,75794,892],{"class":103},[29,75796,1274],{"class":305},[29,75798,75367],{"class":48106},[29,75800,75770],{"class":305},[29,75802,892],{"class":103},[29,75804,866],{"class":309},[29,75806,75374],{"class":35},[29,75808,310],{"class":309},[29,75810,75576],{"class":103},[29,75812,75382],{"class":309},[29,75814,75581],{"class":367},[29,75816,75817,75819,75821,75823,75825,75827,75829,75831,75833,75835,75837,75839,75841,75843],{"class":31,"line":2791},[29,75818,73882],{"class":309},[29,75820,58376],{"class":35},[29,75822,310],{"class":309},[29,75824,892],{"class":103},[29,75826,1274],{"class":305},[29,75828,75367],{"class":48106},[29,75830,75770],{"class":305},[29,75832,892],{"class":103},[29,75834,866],{"class":309},[29,75836,75374],{"class":35},[29,75838,310],{"class":309},[29,75840,75608],{"class":103},[29,75842,75382],{"class":309},[29,75844,75508],{"class":367},[29,75846,75847],{"class":31,"line":2796},[29,75848,2575],{"emptyLinePlaceholder":233},[29,75850,75851],{"class":31,"line":8123},[29,75852,75853],{"class":367},"    \u002F\u002F {n}写几，就必须出现几次\n",[29,75855,75856,75858,75860,75862,75864,75866,75868,75871,75873,75875,75877,75879,75882,75885],{"class":31,"line":8147},[29,75857,73882],{"class":309},[29,75859,58376],{"class":35},[29,75861,310],{"class":309},[29,75863,892],{"class":103},[29,75865,1274],{"class":305},[29,75867,75367],{"class":48106},[29,75869,75870],{"class":305},"{4}$",[29,75872,892],{"class":103},[29,75874,866],{"class":309},[29,75876,75374],{"class":35},[29,75878,310],{"class":309},[29,75880,75881],{"class":103},"'哈哈哈哈'",[29,75883,75884],{"class":309},")) ",[29,75886,75385],{"class":367},[29,75888,75889],{"class":31,"line":8152},[29,75890,2575],{"emptyLinePlaceholder":233},[29,75892,75893],{"class":31,"line":8158},[29,75894,75895],{"class":367},"    \u002F\u002F {n,}大于等于n次\n",[29,75897,75898,75900,75902,75904,75906,75908,75910,75913,75915,75917,75919,75921,75923,75925],{"class":31,"line":8185},[29,75899,73882],{"class":309},[29,75901,58376],{"class":35},[29,75903,310],{"class":309},[29,75905,892],{"class":103},[29,75907,1274],{"class":305},[29,75909,75367],{"class":48106},[29,75911,75912],{"class":305},"{4,}$",[29,75914,892],{"class":103},[29,75916,866],{"class":309},[29,75918,75374],{"class":35},[29,75920,310],{"class":309},[29,75922,75881],{"class":103},[29,75924,75884],{"class":309},[29,75926,75385],{"class":367},[29,75928,75929,75931,75933,75935,75937,75939,75941,75943,75945,75947,75949,75951,75954,75956],{"class":31,"line":8190},[29,75930,73882],{"class":309},[29,75932,58376],{"class":35},[29,75934,310],{"class":309},[29,75936,892],{"class":103},[29,75938,1274],{"class":305},[29,75940,75367],{"class":48106},[29,75942,75912],{"class":305},[29,75944,892],{"class":103},[29,75946,866],{"class":309},[29,75948,75374],{"class":35},[29,75950,310],{"class":309},[29,75952,75953],{"class":103},"'哈哈哈哈哈'",[29,75955,75884],{"class":309},[29,75957,75385],{"class":367},[29,75959,75960],{"class":31,"line":8196},[29,75961,2575],{"emptyLinePlaceholder":233},[29,75963,75964],{"class":31,"line":8208},[29,75965,75966],{"class":367},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[29,75968,75969,75971,75973,75975,75977,75979,75981,75984,75986,75988,75990,75992,75994,75996],{"class":31,"line":8220},[29,75970,73882],{"class":309},[29,75972,58376],{"class":35},[29,75974,310],{"class":309},[29,75976,892],{"class":103},[29,75978,1274],{"class":305},[29,75980,75367],{"class":48106},[29,75982,75983],{"class":305},"{4,6}$",[29,75985,892],{"class":103},[29,75987,866],{"class":309},[29,75989,75374],{"class":35},[29,75991,310],{"class":309},[29,75993,75881],{"class":103},[29,75995,75884],{"class":309},[29,75997,75385],{"class":367},[29,75999,76000,76002,76004,76006,76008,76010,76012,76014,76016,76018,76020,76022,76024,76026],{"class":31,"line":8232},[29,76001,73882],{"class":309},[29,76003,58376],{"class":35},[29,76005,310],{"class":309},[29,76007,892],{"class":103},[29,76009,1274],{"class":305},[29,76011,75367],{"class":48106},[29,76013,75983],{"class":305},[29,76015,892],{"class":103},[29,76017,866],{"class":309},[29,76019,75374],{"class":35},[29,76021,310],{"class":309},[29,76023,75953],{"class":103},[29,76025,75884],{"class":309},[29,76027,75385],{"class":367},[29,76029,76030,76032,76034,76036,76038,76040,76042,76044,76046,76048,76050,76052,76055,76057],{"class":31,"line":9891},[29,76031,73882],{"class":309},[29,76033,58376],{"class":35},[29,76035,310],{"class":309},[29,76037,892],{"class":103},[29,76039,1274],{"class":305},[29,76041,75367],{"class":48106},[29,76043,75983],{"class":305},[29,76045,892],{"class":103},[29,76047,866],{"class":309},[29,76049,75374],{"class":35},[29,76051,310],{"class":309},[29,76053,76054],{"class":103},"'哈哈哈哈哈哈哈'",[29,76056,75884],{"class":309},[29,76058,75508],{"class":367},[29,76060,76061],{"class":31,"line":9916},[29,76062,2575],{"emptyLinePlaceholder":233},[29,76064,76065],{"class":31,"line":9939},[29,76066,76067],{"class":367},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[29,76069,76070,76072,76074,76076,76078,76080,76083,76085,76087,76089,76091,76093,76096,76098],{"class":31,"line":9963},[29,76071,73882],{"class":309},[29,76073,58376],{"class":35},[29,76075,310],{"class":309},[29,76077,892],{"class":103},[29,76079,1274],{"class":305},[29,76081,76082],{"class":39},"[abc]",[29,76084,610],{"class":305},[29,76086,892],{"class":103},[29,76088,866],{"class":309},[29,76090,75374],{"class":35},[29,76092,310],{"class":309},[29,76094,76095],{"class":103},"'a'",[29,76097,75382],{"class":309},[29,76099,75385],{"class":367},[29,76101,76102,76104,76106,76108,76110,76112,76114,76116,76118,76120,76122,76124,76127,76129],{"class":31,"line":9968},[29,76103,73882],{"class":309},[29,76105,58376],{"class":35},[29,76107,310],{"class":309},[29,76109,892],{"class":103},[29,76111,1274],{"class":305},[29,76113,76082],{"class":39},[29,76115,610],{"class":305},[29,76117,892],{"class":103},[29,76119,866],{"class":309},[29,76121,75374],{"class":35},[29,76123,310],{"class":309},[29,76125,76126],{"class":103},"'b'",[29,76128,75382],{"class":309},[29,76130,75385],{"class":367},[29,76132,76133,76135,76137,76139,76141,76143,76145,76147,76149,76151,76153,76155,76158,76160],{"class":31,"line":9973},[29,76134,73882],{"class":309},[29,76136,58376],{"class":35},[29,76138,310],{"class":309},[29,76140,892],{"class":103},[29,76142,1274],{"class":305},[29,76144,76082],{"class":39},[29,76146,610],{"class":305},[29,76148,892],{"class":103},[29,76150,866],{"class":309},[29,76152,75374],{"class":35},[29,76154,310],{"class":309},[29,76156,76157],{"class":103},"'c'",[29,76159,75382],{"class":309},[29,76161,75385],{"class":367},[29,76163,76164,76166,76168,76170,76172,76174,76176,76178,76180,76182,76185,76187],{"class":31,"line":9978},[29,76165,73882],{"class":309},[29,76167,58376],{"class":35},[29,76169,310],{"class":309},[29,76171,892],{"class":103},[29,76173,76082],{"class":39},[29,76175,892],{"class":103},[29,76177,866],{"class":309},[29,76179,75374],{"class":35},[29,76181,310],{"class":309},[29,76183,76184],{"class":103},"'ab'",[29,76186,75382],{"class":309},[29,76188,75385],{"class":367},[29,76190,76191,76193,76195,76197,76199,76201,76203,76205,76207,76209,76211,76213,76215,76217],{"class":31,"line":9987},[29,76192,73882],{"class":309},[29,76194,58376],{"class":35},[29,76196,310],{"class":309},[29,76198,892],{"class":103},[29,76200,1274],{"class":305},[29,76202,76082],{"class":39},[29,76204,610],{"class":305},[29,76206,892],{"class":103},[29,76208,866],{"class":309},[29,76210,75374],{"class":35},[29,76212,310],{"class":309},[29,76214,76184],{"class":103},[29,76216,75382],{"class":309},[29,76218,76219],{"class":367},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[29,76221,76222,76224,76226,76228,76230,76232,76234,76237,76239,76241,76243,76245,76247,76249],{"class":31,"line":9992},[29,76223,73882],{"class":309},[29,76225,58376],{"class":35},[29,76227,310],{"class":309},[29,76229,892],{"class":103},[29,76231,1274],{"class":305},[29,76233,76082],{"class":39},[29,76235,76236],{"class":305},"{2}$",[29,76238,892],{"class":103},[29,76240,866],{"class":309},[29,76242,75374],{"class":35},[29,76244,310],{"class":309},[29,76246,76184],{"class":103},[29,76248,75382],{"class":309},[29,76250,76251],{"class":367},"\u002F\u002Ftrue   可以选两个\n",[29,76253,76254,76256,76258,76260,76262,76264,76267,76269,76271,76273,76275,76277,76280,76282],{"class":31,"line":9998},[29,76255,73882],{"class":309},[29,76257,58376],{"class":35},[29,76259,310],{"class":309},[29,76261,892],{"class":103},[29,76263,1274],{"class":305},[29,76265,76266],{"class":39},"[a-z]",[29,76268,610],{"class":305},[29,76270,892],{"class":103},[29,76272,866],{"class":309},[29,76274,75374],{"class":35},[29,76276,310],{"class":309},[29,76278,76279],{"class":103},"'p'",[29,76281,75438],{"class":309},[29,76283,76284],{"class":367},"\u002F\u002Ftrue   依然只能选一个\n",[29,76286,76287,76289,76291,76293,76295,76297,76300,76302,76304,76306,76308,76310,76312,76314],{"class":31,"line":10019},[29,76288,73882],{"class":309},[29,76290,58376],{"class":35},[29,76292,310],{"class":309},[29,76294,892],{"class":103},[29,76296,1274],{"class":305},[29,76298,76299],{"class":39},"[A-Z]",[29,76301,610],{"class":305},[29,76303,892],{"class":103},[29,76305,866],{"class":309},[29,76307,75374],{"class":35},[29,76309,310],{"class":309},[29,76311,76279],{"class":103},[29,76313,75438],{"class":309},[29,76315,75508],{"class":367},[29,76317,76318,76320,76322,76324,76326,76328,76330,76332,76334,76336,76338,76340,76343,76345],{"class":31,"line":10025},[29,76319,73882],{"class":309},[29,76321,58376],{"class":35},[29,76323,310],{"class":309},[29,76325,892],{"class":103},[29,76327,1274],{"class":305},[29,76329,76299],{"class":39},[29,76331,610],{"class":305},[29,76333,892],{"class":103},[29,76335,866],{"class":309},[29,76337,75374],{"class":35},[29,76339,310],{"class":309},[29,76341,76342],{"class":103},"'P'",[29,76344,75438],{"class":309},[29,76346,75385],{"class":367},[29,76348,76349,76351,76353,76355,76357,76359,76362,76364,76366,76368,76370,76372,76375,76377],{"class":31,"line":10039},[29,76350,73882],{"class":309},[29,76352,58376],{"class":35},[29,76354,310],{"class":309},[29,76356,892],{"class":103},[29,76358,1274],{"class":305},[29,76360,76361],{"class":39},"[0-9]",[29,76363,610],{"class":305},[29,76365,892],{"class":103},[29,76367,866],{"class":309},[29,76369,75374],{"class":35},[29,76371,310],{"class":309},[29,76373,76374],{"class":103},"'0'",[29,76376,75438],{"class":309},[29,76378,75385],{"class":367},[29,76380,76381,76383,76385,76387,76389,76391,76394,76396,76398,76400,76402,76404,76406,76408],{"class":31,"line":10045},[29,76382,73882],{"class":309},[29,76384,58376],{"class":35},[29,76386,310],{"class":309},[29,76388,892],{"class":103},[29,76390,1274],{"class":305},[29,76392,76393],{"class":39},"[a-zA-Z0-9]",[29,76395,610],{"class":305},[29,76397,892],{"class":103},[29,76399,866],{"class":309},[29,76401,75374],{"class":35},[29,76403,310],{"class":309},[29,76405,76279],{"class":103},[29,76407,75382],{"class":309},[29,76409,75385],{"class":367},[29,76411,76412,76414,76416],{"class":31,"line":10072},[29,76413,52546],{"class":309},[29,76415,51942],{"class":51429},[29,76417,51436],{"class":309},[29,76419,76420,76422,76424],{"class":31,"line":10081},[29,76421,51914],{"class":309},[29,76423,51929],{"class":51429},[29,76425,51436],{"class":309},[29,76427,76428],{"class":31,"line":10087},[29,76429,2575],{"emptyLinePlaceholder":233},[29,76431,76432,76434,76436],{"class":31,"line":10095},[29,76433,51914],{"class":309},[29,76435,50764],{"class":51429},[29,76437,51436],{"class":309},[22173,76439,76441],{"id":76440},"_3624-修饰符","3.6.2.4 修饰符",[171,76443,76444],{},[1638,76445],{"alt":24,"src":76446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[171,76448,76449],{},"replace是个方法，使用的时候一定不要忘记括号()",[171,76451,76452],{},[1638,76453],{"alt":24,"src":76454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[19,76456,76458],{"className":50762,"code":76457,"language":50764,"meta":24,"style":24},"\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",[26,76459,76460,76470,76484,76492,76506,76526,76538,76546,76554,76562,76594,76625,76630,76662,76673,76706,76715,76723,76731],{"__ignoreMap":24},[29,76461,76462,76464,76466,76468],{"class":31,"line":32},[29,76463,51426],{"class":309},[29,76465,51430],{"class":51429},[29,76467,51433],{"class":35},[29,76469,51436],{"class":309},[29,76471,76472,76474,76476,76478,76480,76482],{"class":31,"line":43},[29,76473,1218],{"class":309},[29,76475,50764],{"class":51429},[29,76477,51445],{"class":35},[29,76479,355],{"class":309},[29,76481,51450],{"class":103},[29,76483,51436],{"class":309},[29,76485,76486,76488,76490],{"class":31,"line":51},[29,76487,1218],{"class":309},[29,76489,51463],{"class":51429},[29,76491,51436],{"class":309},[29,76493,76494,76496,76498,76500,76502,76504],{"class":31,"line":59},[29,76495,52273],{"class":309},[29,76497,51473],{"class":51429},[29,76499,51476],{"class":35},[29,76501,355],{"class":309},[29,76503,51481],{"class":103},[29,76505,51436],{"class":309},[29,76507,76508,76510,76512,76514,76516,76518,76520,76522,76524],{"class":31,"line":67},[29,76509,52273],{"class":309},[29,76511,51473],{"class":51429},[29,76513,15095],{"class":35},[29,76515,355],{"class":309},[29,76517,51520],{"class":103},[29,76519,51500],{"class":35},[29,76521,355],{"class":309},[29,76523,51527],{"class":103},[29,76525,51436],{"class":309},[29,76527,76528,76530,76532,76534,76536],{"class":31,"line":75},[29,76529,52273],{"class":309},[29,76531,51536],{"class":51429},[29,76533,51539],{"class":309},[29,76535,51536],{"class":51429},[29,76537,51436],{"class":309},[29,76539,76540,76542,76544],{"class":31,"line":83},[29,76541,51914],{"class":309},[29,76543,51463],{"class":51429},[29,76545,51436],{"class":309},[29,76547,76548,76550,76552],{"class":31,"line":158},[29,76549,1218],{"class":309},[29,76551,51929],{"class":51429},[29,76553,51436],{"class":309},[29,76555,76556,76558,76560],{"class":31,"line":166},[29,76557,52273],{"class":309},[29,76559,51942],{"class":51429},[29,76561,51436],{"class":309},[29,76563,76564,76566,76568,76570,76572,76574,76577,76579,76581,76583,76585,76587,76590,76592],{"class":31,"line":1505},[29,76565,73882],{"class":309},[29,76567,58376],{"class":35},[29,76569,310],{"class":309},[29,76571,892],{"class":103},[29,76573,1274],{"class":305},[29,76575,76576],{"class":48106},"java",[29,76578,610],{"class":305},[29,76580,892],{"class":103},[29,76582,866],{"class":309},[29,76584,75374],{"class":35},[29,76586,310],{"class":309},[29,76588,76589],{"class":103},"'java'",[29,76591,75884],{"class":309},[29,76593,75385],{"class":367},[29,76595,76596,76598,76600,76602,76604,76606,76608,76610,76612,76614,76616,76618,76621,76623],{"class":31,"line":1788},[29,76597,73882],{"class":309},[29,76599,58376],{"class":35},[29,76601,310],{"class":309},[29,76603,892],{"class":103},[29,76605,1274],{"class":305},[29,76607,76576],{"class":48106},[29,76609,610],{"class":305},[29,76611,892],{"class":103},[29,76613,866],{"class":309},[29,76615,75374],{"class":35},[29,76617,310],{"class":309},[29,76619,76620],{"class":103},"'Java'",[29,76622,75884],{"class":309},[29,76624,75508],{"class":367},[29,76626,76627],{"class":31,"line":1793},[29,76628,76629],{"class":367},"    \u002F\u002F 不区分大小写、\n",[29,76631,76632,76634,76636,76638,76640,76642,76644,76646,76648,76650,76652,76654,76656,76658,76660],{"class":31,"line":1799},[29,76633,73882],{"class":309},[29,76635,58376],{"class":35},[29,76637,310],{"class":309},[29,76639,892],{"class":103},[29,76641,1274],{"class":305},[29,76643,76576],{"class":48106},[29,76645,610],{"class":305},[29,76647,892],{"class":103},[29,76649,749],{"class":305},[29,76651,866],{"class":309},[29,76653,75374],{"class":35},[29,76655,310],{"class":309},[29,76657,76620],{"class":103},[29,76659,75884],{"class":309},[29,76661,75385],{"class":367},[29,76663,76664,76666,76668,76670],{"class":31,"line":1804},[29,76665,11396],{"class":305},[29,76667,74048],{"class":39},[29,76669,13739],{"class":305},[29,76671,76672],{"class":103}," 'java是一门编程语言，学完java工资很高'\n",[29,76674,76675,76677,76680,76682,76685,76688,76690,76692,76694,76696,76699,76701,76704],{"class":31,"line":1818},[29,76676,11396],{"class":305},[29,76678,76679],{"class":39}," result",[29,76681,13739],{"class":305},[29,76683,76684],{"class":309}," str.",[29,76686,76687],{"class":35},"replace",[29,76689,310],{"class":309},[29,76691,892],{"class":103},[29,76693,76576],{"class":48106},[29,76695,892],{"class":103},[29,76697,76698],{"class":305},"ig",[29,76700,12610],{"class":309},[29,76702,76703],{"class":103},"'前端'",[29,76705,316],{"class":309},[29,76707,76708,76710,76712],{"class":31,"line":1823},[29,76709,73882],{"class":309},[29,76711,58376],{"class":35},[29,76713,76714],{"class":309},"(result)\n",[29,76716,76717,76719,76721],{"class":31,"line":1829},[29,76718,52546],{"class":309},[29,76720,51942],{"class":51429},[29,76722,51436],{"class":309},[29,76724,76725,76727,76729],{"class":31,"line":1850},[29,76726,51914],{"class":309},[29,76728,51929],{"class":51429},[29,76730,51436],{"class":309},[29,76732,76733,76735,76737],{"class":31,"line":1855},[29,76734,51914],{"class":309},[29,76736,50764],{"class":51429},[29,76738,51436],{"class":309},[223,76740,76741],{},"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":24,"searchDepth":43,"depth":43,"links":76743},[76744,76754,76766,76783,76790,76798],{"id":53489,"depth":43,"text":53490,"children":76745},[76746,76747,76748,76749,76750,76751,76752,76753],{"id":53493,"depth":51,"text":53494},{"id":53526,"depth":51,"text":53527},{"id":53565,"depth":51,"text":53566},{"id":53723,"depth":51,"text":53724},{"id":53771,"depth":51,"text":53772},{"id":53908,"depth":51,"text":53909},{"id":54230,"depth":51,"text":54231},{"id":57218,"depth":51,"text":57219},{"id":57246,"depth":43,"text":57247,"children":76755},[76756,76757,76758,76759,76760,76761,76762,76763,76764,76765],{"id":57250,"depth":51,"text":57251},{"id":57273,"depth":51,"text":57274},{"id":58188,"depth":51,"text":58189},{"id":58878,"depth":51,"text":58879},{"id":59160,"depth":51,"text":59161},{"id":63321,"depth":51,"text":63322},{"id":63491,"depth":51,"text":63492},{"id":63619,"depth":51,"text":63620},{"id":63644,"depth":51,"text":63645},{"id":65033,"depth":51,"text":65034},{"id":66186,"depth":43,"text":66187,"children":76767},[76768,76769,76770,76771,76772,76773,76774,76775,76776,76777,76778,76779,76780,76781,76782],{"id":66190,"depth":51,"text":66191},{"id":66844,"depth":51,"text":66845},{"id":68539,"depth":51,"text":68540},{"id":68580,"depth":51,"text":68581},{"id":68622,"depth":51,"text":68623},{"id":68636,"depth":51,"text":68637},{"id":68685,"depth":51,"text":68686},{"id":68697,"depth":51,"text":68698},{"id":68712,"depth":51,"text":68713},{"id":68748,"depth":51,"text":68749},{"id":68829,"depth":51,"text":68830},{"id":68957,"depth":51,"text":68958},{"id":68969,"depth":51,"text":68970},{"id":68988,"depth":51,"text":68989},{"id":71099,"depth":51,"text":71100},{"id":71118,"depth":43,"text":71119,"children":76784},[76785,76786,76787,76788,76789],{"id":71139,"depth":51,"text":71140},{"id":71159,"depth":51,"text":71160},{"id":71208,"depth":51,"text":71209},{"id":71333,"depth":51,"text":71334},{"id":71514,"depth":51,"text":71515},{"id":71532,"depth":43,"text":71533,"children":76791},[76792,76793,76794,76795,76796,76797],{"id":71547,"depth":51,"text":71548},{"id":71606,"depth":51,"text":71607},{"id":71630,"depth":51,"text":71631},{"id":71950,"depth":51,"text":71951},{"id":71982,"depth":51,"text":71983},{"id":72005,"depth":51,"text":72006},{"id":75073,"depth":43,"text":75074,"children":76799},[76800,76801],{"id":75107,"depth":51,"text":75108},{"id":75146,"depth":51,"text":75147},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53461,"description":230},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76808,"title":76809,"body":76810,"description":230,"extension":231,"meta":92947,"navigation":233,"path":92948,"seo":92949,"stem":92950,"__hash__":92951},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76811,"toc":92883},[76812,76815,76818,76822,76826,76831,76836,76847,76851,76856,76859,76863,76866,76871,76875,76879,76882,76887,76890,76894,76897,76905,76908,76912,76917,76922,76925,76929,76934,76939,76942,76946,76951,76954,76959,76962,76967,76970,76975,76980,76983,76986,76990,76995,77000,77003,77007,77011,77014,77017,77020,77024,77028,77033,77038,77041,77045,77050,77055,77058,77061,77064,77067,77070,77073,77076,77079,77082,77087,77091,77096,77101,77104,77107,77110,77113,77116,77119,77122,77125,77129,77133,77136,77139,77142,77147,77149,77152,77155,77158,77161,77164,77167,77170,77173,77176,77179,77182,77185,77188,77193,77198,77203,77206,77210,77213,77218,77222,77224,77235,77240,77341,77344,77347,77350,77353,77356,77359,77362,77365,77367,77370,77373,77376,77379,77382,77384,77387,77390,77393,77396,77399,77402,77404,77407,77409,77411,77414,77418,77422,77425,77428,77431,77434,77437,77440,77443,77446,77449,77454,77574,77577,77580,77585,77588,77591,77594,77597,77602,77605,77608,77611,77614,77619,77622,77722,77787,77861,77865,77868,77871,77875,77878,77892,77921,77924,77927,77930,77933,77936,77939,77942,77944,77947,77950,77953,77956,77960,77965,77969,77974,78049,78052,78235,78238,78241,78244,78247,78250,78252,78255,78258,78261,78264,78267,78270,78272,78276,78279,78284,78287,78290,78293,78296,78298,78303,78306,78309,78312,78315,78317,78322,78325,78328,78330,78332,78335,78339,78342,78345,78350,78353,78356,78359,78409,78414,78418,78423,78426,78495,78498,78507,78511,78516,78519,78522,78530,78533,78550,80352,80356,80360,80365,80368,80372,80378,80384,80536,80541,80546,80549,80552,80555,80558,80561,80564,80567,80570,80573,80576,80579,80582,80587,80591,80594,80605,80609,80614,80617,80620,80623,80626,80629,80631,80634,80637,80640,80643,80645,80662,80665,80669,80672,80677,80682,80685,80688,80692,80695,80698,80707,80710,80714,80717,80722,80727,80794,80798,80801,80804,80809,80814,80900,80905,80909,80912,80915,80930,80933,80938,80942,80947,81056,81059,81070,81220,81224,81229,81338,81342,81347,81352,81357,81360,81367,81387,81423,81587,81592,81595,81600,81607,81610,81613,81616,81675,81731,81787,81791,81796,82111,82114,82118,82121,82126,82235,82240,82244,82249,82253,82324,82328,82330,82333,82336,82374,82650,82654,82671,82737,82771,82775,82778,82783,82812,82819,82828,82833,82848,82853,82862,82865,83002,83006,83068,83072,83077,83322,83326,83331,83334,83337,83340,83343,83347,83352,84933,84937,84941,84947,84950,84955,84959,84962,84967,84970,84981,84985,84990,84994,84999,85004,85007,85012,85016,85020,85023,85028,85033,85036,85039,85042,85164,85169,85271,85274,85277,85281,85286,85458,85463,85467,85470,85475,85541,85546,85549,85680,85683,85688,85691,85694,85785,85790,85793,85796,85799,85802,85807,85812,85815,85820,85825,85830,85834,85837,85840,85845,85850,85855,85860,85914,85917,85920,85925,85928,85931,85936,85941,85946,85950,85955,85969,85974,85977,85982,85986,85991,85996,86001,86006,86011,86016,86021,86026,86029,86033,86038,86041,86044,86047,86052,86057,86060,86063,86067,86070,86073,86078,86083,86088,86093,86096,86101,86106,86167,86172,86175,86180,87421,87426,87430,87434,87439,87442,87447,87452,87455,87460,87462,87467,87471,87474,87477,87488,87492,87497,87502,87557,87562,87567,87572,87783,87788,87792,87797,87800,87802,87805,87808,88255,88260,88267,88273,88276,88279,88543,88548,88552,88817,88822,88826,88831,88836,88841,88846,89177,89180,89185,89190,89193,89197,89201,89206,89211,89216,89221,89226,89231,89235,89238,89243,89248,89251,89325,89330,89335,89340,89342,89345,89715,89720,89725,89730,89733,89736,89838,89843,89848,89951,89955,89960,89964,89968,89973,89978,89981,89986,89989,89992,90385,90390,90393,90396,90399,90402,90922,90926,90931,90936,90941,90944,90949,90952,90955,91337,91342,91344,91346,91349,91352,91864,91868,91929,91932,91935,91938,91942,91945,91950,91955,92880],[10,76813,76809],{"id":76814},"_4js进阶",[171,76816,76817],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76819,76821],{"id":76820},"_41-作用域","4.1 作用域",[275,76823,76825],{"id":76824},"_411-局部作用域","4.1.1 局部作用域",[171,76827,76828],{},[1638,76829],{"alt":24,"src":76830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[171,76832,76833],{},[1638,76834],{"alt":24,"src":76835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[175,76837,76838,76841,76844],{},[178,76839,76840],{},"函数作用域在函数内部",[178,76842,76843],{},"块级作用域在{}",[178,76845,76846],{},"对象的那个{}不是作用域，不是块作用域",[275,76848,76850],{"id":76849},"_412-全局作用域","4.1.2 全局作用域",[171,76852,76853],{},[1638,76854],{"alt":24,"src":76855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[171,76857,76858],{},"window.a=10不要这样写",[275,76860,76862],{"id":76861},"_413-作用域链","4.1.3 作用域链",[171,76864,76865],{},"变量查找机制",[171,76867,76868],{},[1638,76869],{"alt":24,"src":76870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76872,76874],{"id":76873},"_42-垃圾回收机制","4.2 垃圾回收机制",[275,76876,76878],{"id":76877},"_421-大体介绍","4.2.1 大体介绍",[171,76880,76881],{},"垃圾回收机制(Garbage Collection) 简称 GC",[171,76883,76884],{},[1638,76885],{"alt":24,"src":76886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[171,76888,76889],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[275,76891,76893],{"id":76892},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[171,76895,76896],{},"堆栈空间分配区别：",[259,76898,76899,76902],{},[178,76900,76901],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[178,76903,76904],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[171,76906,76907],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22173,76909,76911],{"id":76910},"_4221-引用计数","4.2.2.1 引用计数",[171,76913,76914],{},[1638,76915],{"alt":24,"src":76916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[171,76918,76919],{},[1638,76920],{"alt":24,"src":76921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[171,76923,76924],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22173,76926,76928],{"id":76927},"_4222-标记清除法","4.2.2.2 标记清除法",[171,76930,76931],{},[1638,76932],{"alt":24,"src":76933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[171,76935,76936],{},[1638,76937],{"alt":24,"src":76938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[171,76940,76941],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,76943,76945],{"id":76944},"_43-闭包","4.3 闭包",[171,76947,76948],{},[1638,76949],{"alt":24,"src":76950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[171,76952,76953],{},"闭包：内层函数+外层函数的变量",[171,76955,76956],{},[1638,76957],{"alt":24,"src":76958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[171,76960,76961],{},"closure就是闭包",[171,76963,76964],{},[1638,76965],{"alt":24,"src":76966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[171,76968,76969],{},"内层函数必须包含外层函数的变量才是闭包",[171,76971,76972],{},[1638,76973],{"alt":24,"src":76974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[171,76976,76977],{},[1638,76978],{"alt":24,"src":76979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[171,76981,76982],{},"闭包可能会引起内存泄漏",[171,76984,76985],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,76987,76989],{"id":76988},"_44-变量提升","4.4 变量提升",[171,76991,76992],{},[1638,76993],{"alt":24,"src":76994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[171,76996,76997],{},[1638,76998],{"alt":24,"src":76999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[171,77001,77002],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77004,77006],{"id":77005},"_45-函数进阶","4.5 函数进阶",[275,77008,77010],{"id":77009},"_451-函数提升","4.5.1 函数提升",[171,77012,77013],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[171,77015,77016],{},"只提升函数声明，不提升函数调用",[51942,77018,77019],{},"\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",[275,77021,77023],{"id":77022},"_452-函数参数","4.5.2 函数参数",[22173,77025,77027],{"id":77026},"_4521-动态参数","4.5.2.1 动态参数",[171,77029,77030],{},[1638,77031],{"alt":24,"src":77032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[171,77034,77035],{},[1638,77036],{"alt":24,"src":77037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[171,77039,77040],{},"箭头函数里边没有arguments",[22173,77042,77044],{"id":77043},"_4522-剩余参数","4.5.2.2 剩余参数",[171,77046,77047],{},[1638,77048],{"alt":24,"src":77049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[171,77051,77052],{},[1638,77053],{"alt":24,"src":77054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[171,77056,77057],{},"剩余参数使用的时候不需要写...",[171,77059,77060],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[171,77062,77063],{},"  function getSum(a,b,...arr) {",[171,77065,77066],{},"  console.log(11)",[171,77068,77069],{},"  }",[171,77071,77072],{},"  getSum(1,2,3,4)",[171,77074,77075],{},"  将1传给a，2传给b，剩下的传给剩余参数",[171,77077,77078],{},"  getSum(1,2)",[171,77080,77081],{},"  将1传给a，2传给b，剩余参数为一个空数组",[171,77083,77084],{},[1638,77085],{"alt":24,"src":77086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22173,77088,77090],{"id":77089},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[171,77092,77093],{},[1638,77094],{"alt":24,"src":77095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[171,77097,77098],{},[1638,77099],{"alt":24,"src":77100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[171,77102,77103],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[171,77105,77106],{},"展开运算符可以用于数组之间的合并：",[171,77108,77109],{},"const arr1 = [1, 2, 3]",[171,77111,77112],{},"const arr2 = [3, 4, 5]",[171,77114,77115],{},"const arr = [...arr1, ...arr2]",[171,77117,77118],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[171,77120,77121],{},"剩余参数：函数参数使用，得到真数组",[171,77123,77124],{},"展开运算符：数组中使用，数组展开",[275,77126,77128],{"id":77127},"_453-箭头函数","4.5.3 箭头函数",[22173,77130,77132],{"id":77131},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[171,77134,77135],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[171,77137,77138],{},"它不是万能的！！！",[171,77140,77141],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[171,77143,77144],{},[1638,77145],{"alt":24,"src":77146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[171,77148,339],{},[171,77150,77151],{},"① 只有一个形参的时候，可以省略小括号：",[171,77153,77154],{},"const fn=x=>{console.log(x)}",[171,77156,77157],{},"② 只有一行代码时可以省略大括号：",[171,77159,77160],{},"const fn=x=>console.log(11)",[171,77162,77163],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[171,77165,77166],{},"const fn=x=>x+x",[171,77168,77169],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[171,77171,77172],{},"⑤ 阻止表单默认提交：",[171,77174,77175],{},"const form = document.querySelector('form')",[171,77177,77178],{},"form.addEventListener('click', ev => ev.preventDefault())",[171,77180,77181],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[171,77183,77184],{},"const fn=uname=>({uname:uname})",[171,77186,77187],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[171,77189,77190],{},[1638,77191],{"alt":24,"src":77192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[171,77194,77195],{},[1638,77196],{"alt":24,"src":77197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[171,77199,77200],{},[1638,77201],{"alt":24,"src":77202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[171,77204,77205],{},"一定不要忘记用()，有()就理解为自带return",[22173,77207,77209],{"id":77208},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[171,77211,77212],{},"箭头函数是没有动态参数的arguments",[171,77214,77215],{},[1638,77216],{"alt":24,"src":77217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22173,77219,77221],{"id":77220},"_4533-箭头函数this","4.5.3.3 箭头函数this",[171,77223,11507],{},[259,77225,77226,77229,77232],{},[178,77227,77228],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[178,77230,77231],{},"事件回调函数使用箭头函数时，this 为全局的 window",[178,77233,77234],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[171,77236,77237],{},[1638,77238],{"alt":24,"src":77239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[19,77241,77243],{"className":53196,"code":77242,"language":53198,"meta":24,"style":24},"  \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",[26,77244,77245,77253,77258,77263,77268,77273,77278,77282,77287,77291,77295,77300,77305,77310,77314,77318,77323,77328,77333],{"__ignoreMap":24},[29,77246,77247,77249,77251],{"class":31,"line":32},[29,77248,52273],{"class":309},[29,77250,51942],{"class":51429},[29,77252,51436],{"class":309},[29,77254,77255],{"class":31,"line":43},[29,77256,77257],{"class":309},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[29,77259,77260],{"class":31,"line":51},[29,77261,77262],{"class":309},"    console.log(this) \u002F\u002F指向window\n",[29,77264,77265],{"class":31,"line":59},[29,77266,77267],{"class":309},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[29,77269,77270],{"class":31,"line":67},[29,77271,77272],{"class":309},"    function fn() {\n",[29,77274,77275],{"class":31,"line":75},[29,77276,77277],{"class":309},"      console.log(this)  \u002F\u002F指向window\n",[29,77279,77280],{"class":31,"line":83},[29,77281,2362],{"class":309},[29,77283,77284],{"class":31,"line":158},[29,77285,77286],{"class":309},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[29,77288,77289],{"class":31,"line":166},[29,77290,2575],{"emptyLinePlaceholder":233},[29,77292,77293],{"class":31,"line":1505},[29,77294,71652],{"class":309},[29,77296,77297],{"class":31,"line":1788},[29,77298,77299],{"class":309},"      name: 'andy',\n",[29,77301,77302],{"class":31,"line":1793},[29,77303,77304],{"class":309},"      sayHai: function () {\n",[29,77306,77307],{"class":31,"line":1799},[29,77308,77309],{"class":309},"        console.log(this)\n",[29,77311,77312],{"class":31,"line":1804},[29,77313,52527],{"class":309},[29,77315,77316],{"class":31,"line":1818},[29,77317,2362],{"class":309},[29,77319,77320],{"class":31,"line":1823},[29,77321,77322],{"class":309},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[29,77324,77325],{"class":31,"line":1829},[29,77326,77327],{"class":309},"    \u002F\u002F 2.箭头函数的this\n",[29,77329,77330],{"class":31,"line":1850},[29,77331,77332],{"class":309},"    const fn = () => console.log(this)\n",[29,77334,77335,77337,77339],{"class":31,"line":1855},[29,77336,52546],{"class":309},[29,77338,51942],{"class":51429},[29,77340,51436],{"class":309},[171,77342,77343],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[171,77345,77346],{},"const fn = () => console.log(this)",[171,77348,77349],{},"fn() \u002F\u002F指向window",[171,77351,77352],{},"\u002F\u002F 3.对象方法箭头函数 this",[171,77354,77355],{},"①",[171,77357,77358],{},"const obj = {",[171,77360,77361],{},"uname: 'pink老师',",[171,77363,77364],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[171,77366,1254],{},[171,77368,77369],{},"调用对象里边的函数",[171,77371,77372],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[171,77374,77375],{},"obj.sayHai()",[171,77377,77378],{},"②",[171,77380,77381],{},"const obj1 = {",[171,77383,77361],{},[171,77385,77386],{},"sayHai: function () {",[171,77388,77389],{},"let i = 10",[171,77391,77392],{},"const count = () => {",[171,77394,77395],{},"console.log(this)",[171,77397,77398],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[171,77400,77401],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[171,77403,1254],{},[171,77405,77406],{},"count()",[171,77408,1254],{},[171,77410,1254],{},[171,77412,77413],{},"obj1.sayHai()",[14,77415,77417],{"id":77416},"_46-解构赋值","4.6 解构赋值",[275,77419,77421],{"id":77420},"_461-数组解构","4.6.1 数组解构",[171,77423,77424],{},"以前要是使用数组中的值的话：",[171,77426,77427],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[171,77429,77430],{},"const arr=[100,60,80]",[171,77432,77433],{},"const max=arr[0]",[171,77435,77436],{},"const min=arr[1]",[171,77438,77439],{},"const avg=arr[2]",[171,77441,77442],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[171,77444,77445],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[171,77447,77448],{},"这个写法就类似于上边的那种用很多const的方法",[171,77450,77451],{},[1638,77452],{"alt":24,"src":77453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[19,77455,77457],{"className":50762,"code":77456,"language":50764,"meta":24,"style":24},"①变量之间交换值:\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",[26,77458,77459,77464,77469,77474,77479,77484,77488,77492,77497,77501,77506,77511,77515,77520,77525,77536,77546,77551,77556,77561,77565,77569],{"__ignoreMap":24},[29,77460,77461],{"class":31,"line":32},[29,77462,77463],{"class":309},"①变量之间交换值:\n",[29,77465,77466],{"class":31,"line":43},[29,77467,77468],{"class":309},"let a=1\n",[29,77470,77471],{"class":31,"line":51},[29,77472,77473],{"class":309},"let b=2;\n",[29,77475,77476],{"class":31,"line":59},[29,77477,77478],{"class":309},"必须加这行代码，不然就会报错\n",[29,77480,77481],{"class":31,"line":67},[29,77482,77483],{"class":309},"[b,a]=[a,b]\n",[29,77485,77486],{"class":31,"line":75},[29,77487,2575],{"emptyLinePlaceholder":233},[29,77489,77490],{"class":31,"line":83},[29,77491,2575],{"emptyLinePlaceholder":233},[29,77493,77494],{"class":31,"line":158},[29,77495,77496],{"class":309},"可以写成下面的方式：\n",[29,77498,77499],{"class":31,"line":166},[29,77500,77468],{"class":309},[29,77502,77503],{"class":31,"line":1505},[29,77504,77505],{"class":309},"let b=2\n",[29,77507,77508],{"class":31,"line":1788},[29,77509,77510],{"class":309},";[b,a]=[a,b]\n",[29,77512,77513],{"class":31,"line":1793},[29,77514,2575],{"emptyLinePlaceholder":233},[29,77516,77517],{"class":31,"line":1799},[29,77518,77519],{"class":309},"②排序\n",[29,77521,77522],{"class":31,"line":1804},[29,77523,77524],{"class":309},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[29,77526,77527,77530,77533],{"class":31,"line":1818},[29,77528,77529],{"class":309},"for (let i = 0; i ",[29,77531,1218],{"class":77532},"s7hpK",[29,77534,77535],{"class":309}," arr1.length; i++) {\n",[29,77537,77538,77541,77543],{"class":31,"line":1823},[29,77539,77540],{"class":309},"   for (let j = 0; j ",[29,77542,1218],{"class":77532},[29,77544,77545],{"class":309}," arr1.length - 1; j++) {\n",[29,77547,77548],{"class":31,"line":1829},[29,77549,77550],{"class":309},"      if (arr1[j] > arr1[j + 1]) {\n",[29,77552,77553],{"class":31,"line":1850},[29,77554,77555],{"class":309},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[29,77557,77558],{"class":31,"line":1855},[29,77559,77560],{"class":309},"       }\n",[29,77562,77563],{"class":31,"line":1869},[29,77564,4484],{"class":309},[29,77566,77567],{"class":31,"line":1874},[29,77568,1741],{"class":309},[29,77570,77571],{"class":31,"line":1903},[29,77572,77573],{"class":309},"console.log(arr1)\n",[171,77575,77576],{},"数组解构的细节：",[171,77578,77579],{},"①变量多，单元值少",[171,77581,77582],{},[1638,77583],{"alt":24,"src":77584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[171,77586,77587],{},"防止出现undefined的方法：",[171,77589,77590],{},"const [a=0,b=0] =[1]",[171,77592,77593],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[171,77595,77596],{},"②变量少，单元值多",[171,77598,77599],{},[1638,77600],{"alt":24,"src":77601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[171,77603,77604],{},"此时可以使用剩余参数来接收多余的值",[171,77606,77607],{},"const [a,b,...c]=[1,2,3,4]",[171,77609,77610],{},"console.log(c) 输出[3,4]",[171,77612,77613],{},"③可以按需导入，忽略某些返回值",[171,77615,77616],{},[1638,77617],{"alt":24,"src":77618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[171,77620,77621],{},"④支持多维数组的结构",[19,77623,77627],{"className":77624,"code":77625,"language":77626,"meta":24,"style":24},"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",[26,77628,77629,77657,77673,77688,77703],{"__ignoreMap":24},[29,77630,77631,77633,77635,77637,77639,77641,77643,77645,77648,77650,77652,77654],{"class":31,"line":32},[29,77632,6967],{"class":305},[29,77634,51962],{"class":309},[29,77636,355],{"class":305},[29,77638,52355],{"class":309},[29,77640,525],{"class":39},[29,77642,12610],{"class":309},[29,77644,386],{"class":39},[29,77646,77647],{"class":309},", [",[29,77649,380],{"class":39},[29,77651,12610],{"class":309},[29,77653,601],{"class":39},[29,77655,77656],{"class":309},"]]\n",[29,77658,77659,77662,77664,77666,77668,77670],{"class":31,"line":43},[29,77660,77661],{"class":309},"console.",[29,77663,58376],{"class":35},[29,77665,4026],{"class":309},[29,77667,499],{"class":39},[29,77669,4391],{"class":309},[29,77671,77672],{"class":367},"  \u002F\u002F1\n",[29,77674,77675,77677,77679,77681,77683,77685],{"class":31,"line":51},[29,77676,77661],{"class":309},[29,77678,58376],{"class":35},[29,77680,4026],{"class":309},[29,77682,525],{"class":39},[29,77684,4391],{"class":309},[29,77686,77687],{"class":367},"  \u002F\u002F2\n",[29,77689,77690,77692,77694,77696,77698,77700],{"class":31,"line":59},[29,77691,77661],{"class":309},[29,77693,58376],{"class":35},[29,77695,4026],{"class":309},[29,77697,386],{"class":39},[29,77699,4391],{"class":309},[29,77701,77702],{"class":367},"  \u002F\u002F[3,4]\n",[29,77704,77705,77707,77709,77711,77713,77715,77717,77719],{"class":31,"line":67},[29,77706,77661],{"class":309},[29,77708,58376],{"class":35},[29,77710,4026],{"class":309},[29,77712,386],{"class":39},[29,77714,5076],{"class":309},[29,77716,499],{"class":39},[29,77718,4391],{"class":309},[29,77720,77721],{"class":367},"  \u002F\u002F3\n",[19,77723,77725],{"className":77624,"code":77724,"language":77626,"meta":24,"style":24},"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",[26,77726,77727,77754,77765,77776],{"__ignoreMap":24},[29,77728,77729,77731,77734,77736,77738,77740,77742,77744,77746,77748,77750,77752],{"class":31,"line":32},[29,77730,6967],{"class":305},[29,77732,77733],{"class":309}," [a, b, c] ",[29,77735,355],{"class":305},[29,77737,52355],{"class":309},[29,77739,525],{"class":39},[29,77741,12610],{"class":309},[29,77743,386],{"class":39},[29,77745,77647],{"class":309},[29,77747,380],{"class":39},[29,77749,12610],{"class":309},[29,77751,601],{"class":39},[29,77753,77656],{"class":309},[29,77755,77756,77758,77760,77763],{"class":31,"line":43},[29,77757,77661],{"class":309},[29,77759,58376],{"class":35},[29,77761,77762],{"class":309},"(a)",[29,77764,77672],{"class":367},[29,77766,77767,77769,77771,77774],{"class":31,"line":51},[29,77768,77661],{"class":309},[29,77770,58376],{"class":35},[29,77772,77773],{"class":309},"(b)",[29,77775,77687],{"class":367},[29,77777,77778,77780,77782,77785],{"class":31,"line":59},[29,77779,77661],{"class":309},[29,77781,58376],{"class":35},[29,77783,77784],{"class":309},"(c)",[29,77786,77702],{"class":367},[19,77788,77790],{"className":77624,"code":77789,"language":77626,"meta":24,"style":24},"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",[26,77791,77792,77819,77829,77839,77849],{"__ignoreMap":24},[29,77793,77794,77796,77799,77801,77803,77805,77807,77809,77811,77813,77815,77817],{"class":31,"line":32},[29,77795,6967],{"class":305},[29,77797,77798],{"class":309}," [a, b, [c, d]] ",[29,77800,355],{"class":305},[29,77802,52355],{"class":309},[29,77804,525],{"class":39},[29,77806,12610],{"class":309},[29,77808,386],{"class":39},[29,77810,77647],{"class":309},[29,77812,380],{"class":39},[29,77814,12610],{"class":309},[29,77816,601],{"class":39},[29,77818,77656],{"class":309},[29,77820,77821,77823,77825,77827],{"class":31,"line":43},[29,77822,77661],{"class":309},[29,77824,58376],{"class":35},[29,77826,77762],{"class":309},[29,77828,77672],{"class":367},[29,77830,77831,77833,77835,77837],{"class":31,"line":51},[29,77832,77661],{"class":309},[29,77834,58376],{"class":35},[29,77836,77773],{"class":309},[29,77838,77687],{"class":367},[29,77840,77841,77843,77845,77847],{"class":31,"line":59},[29,77842,77661],{"class":309},[29,77844,58376],{"class":35},[29,77846,77784],{"class":309},[29,77848,77721],{"class":367},[29,77850,77851,77853,77855,77858],{"class":31,"line":67},[29,77852,77661],{"class":309},[29,77854,58376],{"class":35},[29,77856,77857],{"class":309},"(d)",[29,77859,77860],{"class":367},"  \u002F\u002F4\n",[275,77862,77864],{"id":77863},"_462-对象解构","4.6.2 对象解构",[171,77866,77867],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[171,77869,77870],{},"用的非常非常多！！！！！！",[22173,77872,77874],{"id":77873},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[171,77876,77877],{},"基本语法：",[259,77879,77880,77883,77886,77889],{},[178,77881,77882],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[178,77884,77885],{},"对象属性的值将被赋值给与属性名相同的变量",[178,77887,77888],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[178,77890,77891],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[19,77893,77895],{"className":50762,"code":77894,"language":50764,"meta":24,"style":24},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[26,77896,77897,77902,77907,77912,77916],{"__ignoreMap":24},[29,77898,77899],{"class":31,"line":32},[29,77900,77901],{"class":309},"const obj = {\n",[29,77903,77904],{"class":31,"line":43},[29,77905,77906],{"class":309},"   uname: 'pink老师',\n",[29,77908,77909],{"class":31,"line":51},[29,77910,77911],{"class":309},"   age: 18,\n",[29,77913,77914],{"class":31,"line":59},[29,77915,1741],{"class":309},[29,77917,77918],{"class":31,"line":67},[29,77919,77920],{"class":309},"const { uname, age } = obj\n",[171,77922,77923],{},"上方代码这样写等价于：",[171,77925,77926],{},"const uname等价于obj.uname",[171,77928,77929],{},"变量名可以重新改名：",[171,77931,77932],{},"const uname='red老师'",[171,77934,77935],{},"const user={",[171,77937,77938],{},"  uname:'pink老师',",[171,77940,77941],{},"  age:18",[171,77943,1254],{},[171,77945,77946],{},"const {uname,age}=user",[171,77948,77949],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[171,77951,77952],{},"const {旧变量名：新变量名}=对象",[171,77954,77955],{},"const {uname:username,age}=user",[22173,77957,77959],{"id":77958},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[171,77961,77962],{},[1638,77963],{"alt":24,"src":77964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22173,77966,77968],{"id":77967},"_4623-多级对象解构","4.6.2.3 多级对象解构",[171,77970,77971],{},[1638,77972],{"alt":24,"src":77973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[19,77975,77977],{"className":53196,"code":77976,"language":53198,"meta":24,"style":24},"  \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",[26,77978,77979,77987,77992,77997,78002,78007,78012,78017,78022,78027,78031,78036,78041],{"__ignoreMap":24},[29,77980,77981,77983,77985],{"class":31,"line":32},[29,77982,52273],{"class":309},[29,77984,51942],{"class":51429},[29,77986,51436],{"class":309},[29,77988,77989],{"class":31,"line":43},[29,77990,77991],{"class":309},"    const pig = {\n",[29,77993,77994],{"class":31,"line":51},[29,77995,77996],{"class":309},"      name: '佩奇',\n",[29,77998,77999],{"class":31,"line":59},[29,78000,78001],{"class":309},"      family: {\n",[29,78003,78004],{"class":31,"line":67},[29,78005,78006],{"class":309},"        mother: '猪妈妈',\n",[29,78008,78009],{"class":31,"line":75},[29,78010,78011],{"class":309},"        father: '猪爸爸',\n",[29,78013,78014],{"class":31,"line":83},[29,78015,78016],{"class":309},"        sister: '乔治'\n",[29,78018,78019],{"class":31,"line":158},[29,78020,78021],{"class":309},"      },\n",[29,78023,78024],{"class":31,"line":166},[29,78025,78026],{"class":309},"      age: 6\n",[29,78028,78029],{"class":31,"line":1505},[29,78030,2362],{"class":309},[29,78032,78033],{"class":31,"line":1788},[29,78034,78035],{"class":309},"    \u002F\u002F 多级对象解构\n",[29,78037,78038],{"class":31,"line":1793},[29,78039,78040],{"class":309},"    const { name, family: { mother, father, sister }, age } = pig\n",[29,78042,78043,78045,78047],{"class":31,"line":1799},[29,78044,52546],{"class":309},[29,78046,51942],{"class":51429},[29,78048,51436],{"class":309},[171,78050,78051],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[19,78053,78056],{"className":78054,"code":78055,"language":76576,"meta":24,"style":24},"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",[26,78057,78058,78063,78074,78086,78098,78107,78111,78122,78134,78144,78149,78153,78163,78174,78183,78187,78191,78202,78213,78222,78226,78231],{"__ignoreMap":24},[29,78059,78060],{"class":31,"line":32},[29,78061,78062],{"class":367},"    \u002F\u002F 这是后台传递过来的数据\n",[29,78064,78065,78067,78070,78072],{"class":31,"line":43},[29,78066,11396],{"class":305},[29,78068,78069],{"class":309}," msg ",[29,78071,355],{"class":305},[29,78073,15747],{"class":309},[29,78075,78076,78079,78081,78084],{"class":31,"line":51},[29,78077,78078],{"class":103},"      \"code\"",[29,78080,1167],{"class":305},[29,78082,78083],{"class":39}," 200",[29,78085,31595],{"class":309},[29,78087,78088,78091,78093,78096],{"class":31,"line":59},[29,78089,78090],{"class":103},"      \"msg\"",[29,78092,1167],{"class":305},[29,78094,78095],{"class":103}," \"获取新闻列表成功\"",[29,78097,31595],{"class":309},[29,78099,78100,78103,78105],{"class":31,"line":67},[29,78101,78102],{"class":103},"      \"data\"",[29,78104,1167],{"class":305},[29,78106,55576],{"class":309},[29,78108,78109],{"class":31,"line":75},[29,78110,2685],{"class":309},[29,78112,78113,78116,78118,78120],{"class":31,"line":83},[29,78114,78115],{"class":103},"          \"id\"",[29,78117,1167],{"class":305},[29,78119,25247],{"class":39},[29,78121,31595],{"class":309},[29,78123,78124,78127,78129,78132],{"class":31,"line":158},[29,78125,78126],{"class":103},"          \"title\"",[29,78128,1167],{"class":305},[29,78130,78131],{"class":103}," \"5G商用自己，三大运用商收入下降\"",[29,78133,31595],{"class":309},[29,78135,78136,78139,78141],{"class":31,"line":166},[29,78137,78138],{"class":103},"          \"count\"",[29,78140,1167],{"class":305},[29,78142,78143],{"class":39}," 58\n",[29,78145,78146],{"class":31,"line":1505},[29,78147,78148],{"class":309},"        },\n",[29,78150,78151],{"class":31,"line":1788},[29,78152,2685],{"class":309},[29,78154,78155,78157,78159,78161],{"class":31,"line":1793},[29,78156,78115],{"class":103},[29,78158,1167],{"class":305},[29,78160,14930],{"class":39},[29,78162,31595],{"class":309},[29,78164,78165,78167,78169,78172],{"class":31,"line":1799},[29,78166,78126],{"class":103},[29,78168,1167],{"class":305},[29,78170,78171],{"class":103}," \"国际媒体头条速览\"",[29,78173,31595],{"class":309},[29,78175,78176,78178,78180],{"class":31,"line":1804},[29,78177,78138],{"class":103},[29,78179,1167],{"class":305},[29,78181,78182],{"class":39}," 56\n",[29,78184,78185],{"class":31,"line":1818},[29,78186,78148],{"class":309},[29,78188,78189],{"class":31,"line":1823},[29,78190,2685],{"class":309},[29,78192,78193,78195,78197,78200],{"class":31,"line":1829},[29,78194,78115],{"class":103},[29,78196,1167],{"class":305},[29,78198,78199],{"class":39}," 3",[29,78201,31595],{"class":309},[29,78203,78204,78206,78208,78211],{"class":31,"line":1850},[29,78205,78126],{"class":103},[29,78207,1167],{"class":305},[29,78209,78210],{"class":103}," \"乌克兰和俄罗斯持续冲突\"",[29,78212,31595],{"class":309},[29,78214,78215,78217,78219],{"class":31,"line":1855},[29,78216,78138],{"class":103},[29,78218,1167],{"class":305},[29,78220,78221],{"class":39}," 1669\n",[29,78223,78224],{"class":31,"line":1869},[29,78225,78148],{"class":309},[29,78227,78228],{"class":31,"line":1874},[29,78229,78230],{"class":309},"      ]\n",[29,78232,78233],{"class":31,"line":1903},[29,78234,2362],{"class":309},[171,78236,78237],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[171,78239,78240],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[171,78242,78243],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[171,78245,78246],{},"function({data}) {",[171,78248,78249],{},"console.log(data)",[171,78251,1254],{},[171,78253,78254],{},"render(msg)",[171,78256,78257],{},"实参传递给形参的时候解构了",[171,78259,78260],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[171,78262,78263],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[171,78265,78266],{},"function render({data:mydata}) {",[171,78268,78269],{},"  console.log(data)",[171,78271,1254],{},[275,78273,78275],{"id":78274},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[171,78277,78278],{},"有两种情况：一个是数组结构，一个是立即执行函数",[259,78280,78281],{},[178,78282,78283],{},"如果对一个数组进行遍历，有两种方式：",[171,78285,78286],{},"①法1",[171,78288,78289],{},"const arr=[1,2,3]",[171,78291,78292],{},"arr.map(function(item,index) {",[171,78294,78295],{},"  console.log(item)",[171,78297,52593],{},[171,78299,78300],{},[1638,78301],{"alt":24,"src":78302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[171,78304,78305],{},"②法2",[171,78307,78308],{},"const str='pink'",[171,78310,78311],{},"[1,2,3].map(function(item,index) {",[171,78313,78314],{},"console.log(item)",[171,78316,52593],{},[171,78318,78319],{},[1638,78320],{"alt":24,"src":78321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[171,78323,78324],{},"此时会报错",[171,78326,78327],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[171,78329,78314],{},[171,78331,52593],{},[171,78333,78334],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78336,78338],{"id":78337},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[171,78340,78341],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[171,78343,78344],{},"可以理解为加强版的for循环",[171,78346,78347],{},[1638,78348],{"alt":24,"src":78349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[171,78351,78352],{},"里边不写return，不返回数组，只遍历不返回",[171,78354,78355],{},"map是返回数组",[171,78357,78358],{},"forEach主要用于遍历数组对象",[19,78360,78362],{"className":53196,"code":78361,"language":53198,"meta":24,"style":24},"  \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",[26,78363,78364,78372,78377,78382,78387,78392,78396,78401],{"__ignoreMap":24},[29,78365,78366,78368,78370],{"class":31,"line":32},[29,78367,52273],{"class":309},[29,78369,51942],{"class":51429},[29,78371,51436],{"class":309},[29,78373,78374],{"class":31,"line":43},[29,78375,78376],{"class":309},"    const arr = ['red', 'green', 'pink']\n",[29,78378,78379],{"class":31,"line":51},[29,78380,78381],{"class":309},"    const result = arr.forEach(function (item, index) {\n",[29,78383,78384],{"class":31,"line":59},[29,78385,78386],{"class":309},"      console.log(item)\n",[29,78388,78389],{"class":31,"line":67},[29,78390,78391],{"class":309},"      console.log(index)\n",[29,78393,78394],{"class":31,"line":75},[29,78395,33590],{"class":309},[29,78397,78398],{"class":31,"line":83},[29,78399,78400],{"class":309},"    console.log(result)\n",[29,78402,78403,78405,78407],{"class":31,"line":158},[29,78404,52546],{"class":309},[29,78406,51942],{"class":51429},[29,78408,51436],{"class":309},[171,78410,78411],{},[1638,78412],{"alt":24,"src":78413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78415,78417],{"id":78416},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[171,78419,78420],{},[1638,78421],{"alt":24,"src":78422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[171,78424,78425],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[19,78427,78429],{"className":53196,"code":78428,"language":53198,"meta":24,"style":24},"\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",[26,78430,78431,78439,78447,78452,78457,78461,78465,78470,78474,78479,78487],{"__ignoreMap":24},[29,78432,78433,78435,78437],{"class":31,"line":32},[29,78434,1218],{"class":309},[29,78436,51929],{"class":51429},[29,78438,51436],{"class":309},[29,78440,78441,78443,78445],{"class":31,"line":43},[29,78442,52273],{"class":309},[29,78444,51942],{"class":51429},[29,78446,51436],{"class":309},[29,78448,78449],{"class":31,"line":51},[29,78450,78451],{"class":309},"    const arr = [10, 20, 30]\n",[29,78453,78454],{"class":31,"line":59},[29,78455,78456],{"class":309},"    const newArr = arr.filter(function (item, index) {\n",[29,78458,78459],{"class":31,"line":67},[29,78460,78386],{"class":309},[29,78462,78463],{"class":31,"line":75},[29,78464,78391],{"class":309},[29,78466,78467],{"class":31,"line":83},[29,78468,78469],{"class":309},"      return item >= 20\n",[29,78471,78472],{"class":31,"line":158},[29,78473,33590],{"class":309},[29,78475,78476],{"class":31,"line":166},[29,78477,78478],{"class":309},"    console.log(newArr)\n",[29,78480,78481,78483,78485],{"class":31,"line":1505},[29,78482,52546],{"class":309},[29,78484,51942],{"class":51429},[29,78486,51436],{"class":309},[29,78488,78489,78491,78493],{"class":31,"line":1788},[29,78490,51914],{"class":309},[29,78492,51929],{"class":51429},[29,78494,51436],{"class":309},[171,78496,78497],{},"这个也可以写成箭头函数：",[19,78499,78501],{"className":50762,"code":78500,"language":50764,"meta":24,"style":24},"const newArr = arr.filter(item => item >= 20)\n",[26,78502,78503],{"__ignoreMap":24},[29,78504,78505],{"class":31,"line":32},[29,78506,78500],{"class":309},[14,78508,78510],{"id":78509},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[171,78512,78513],{},[1638,78514],{"alt":24,"src":78515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[171,78517,78518],{},"步骤：",[171,78520,78521],{},"①：渲染页面模块",[175,78523,78524,78527],{},[178,78525,78526],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[178,78528,78529],{},"用forEach+字符串的形式",[171,78531,78532],{},"②：点击不同需求，显示不同页面内容",[175,78534,78535,78538,78541,78544,78547],{},[178,78536,78537],{},"点击采取事件委托方式 .filter",[178,78539,78540],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[178,78542,78543],{},"筛选条件是根据点击的 data-index 来判断",[178,78545,78546],{},"可以使用对象解构，把事件对象解构",[178,78548,78549],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[19,78551,78553],{"className":50762,"code":78552,"language":50764,"meta":24,"style":24},"\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",[26,78554,78555,78565,78579,78583,78591,78605,78625,78637,78645,78651,78661,78671,78681,78685,78689,78695,78708,78720,78730,78742,78746,78750,78757,78770,78782,78799,78817,78830,78834,78838,78850,78860,78864,78868,78875,78916,78943,78953,78957,78961,78969,78981,78985,78989,78997,79009,79021,79032,79036,79040,79049,79061,79072,79076,79080,79089,79101,79113,79117,79121,79128,79138,79150,79162,79177,79181,79185,79193,79209,79219,79229,79239,79251,79255,79259,79269,79280,79290,79294,79302,79310,79314,79322,79337,79363,79388,79413,79432,79440,79454,79459,79464,79469,79474,79479,79487,79495,79500,79511,79516,79526,79536,79546,79556,79560,79564,79573,79582,79591,79600,79604,79608,79617,79626,79635,79644,79648,79652,79661,79670,79679,79688,79692,79696,79705,79714,79723,79732,79736,79740,79749,79758,79767,79776,79780,79784,79793,79802,79811,79820,79824,79828,79837,79846,79854,79863,79867,79871,79875,79880,79892,79897,79909,79913,79930,79958,79967,79972,79982,79992,80001,80006,80011,80015,80020,80037,80041,80046,80054,80059,80086,80091,80111,80116,80128,80133,80138,80143,80154,80168,80205,80223,80256,80273,80297,80301,80306,80312,80316,80320,80324,80332,80340,80344],{"__ignoreMap":24},[29,78556,78557,78559,78561,78563],{"class":31,"line":32},[29,78558,51426],{"class":309},[29,78560,51430],{"class":51429},[29,78562,51433],{"class":35},[29,78564,51436],{"class":309},[29,78566,78567,78569,78571,78573,78575,78577],{"class":31,"line":43},[29,78568,1218],{"class":309},[29,78570,50764],{"class":51429},[29,78572,51445],{"class":35},[29,78574,355],{"class":309},[29,78576,51450],{"class":103},[29,78578,51436],{"class":309},[29,78580,78581],{"class":31,"line":51},[29,78582,2575],{"emptyLinePlaceholder":233},[29,78584,78585,78587,78589],{"class":31,"line":59},[29,78586,1218],{"class":309},[29,78588,51463],{"class":51429},[29,78590,51436],{"class":309},[29,78592,78593,78595,78597,78599,78601,78603],{"class":31,"line":67},[29,78594,52273],{"class":309},[29,78596,51473],{"class":51429},[29,78598,51476],{"class":35},[29,78600,355],{"class":309},[29,78602,51481],{"class":103},[29,78604,51436],{"class":309},[29,78606,78607,78609,78611,78613,78615,78617,78619,78621,78623],{"class":31,"line":75},[29,78608,52273],{"class":309},[29,78610,51473],{"class":51429},[29,78612,15095],{"class":35},[29,78614,355],{"class":309},[29,78616,51520],{"class":103},[29,78618,51500],{"class":35},[29,78620,355],{"class":309},[29,78622,51527],{"class":103},[29,78624,51436],{"class":309},[29,78626,78627,78629,78631,78633,78635],{"class":31,"line":83},[29,78628,52273],{"class":309},[29,78630,51536],{"class":51429},[29,78632,51539],{"class":309},[29,78634,51536],{"class":51429},[29,78636,51436],{"class":309},[29,78638,78639,78641,78643],{"class":31,"line":158},[29,78640,52273],{"class":309},[29,78642,223],{"class":51429},[29,78644,51436],{"class":309},[29,78646,78647,78649],{"class":31,"line":166},[29,78648,6578],{"class":51429},[29,78650,15747],{"class":309},[29,78652,78653,78655,78657,78659],{"class":31,"line":1505},[29,78654,54824],{"class":39},[29,78656,51566],{"class":309},[29,78658,499],{"class":39},[29,78660,1468],{"class":309},[29,78662,78663,78665,78667,78669],{"class":31,"line":1788},[29,78664,54835],{"class":39},[29,78666,51566],{"class":309},[29,78668,499],{"class":39},[29,78670,1468],{"class":309},[29,78672,78673,78675,78677,78679],{"class":31,"line":1793},[29,78674,72725],{"class":39},[29,78676,51566],{"class":309},[29,78678,60634],{"class":39},[29,78680,1468],{"class":309},[29,78682,78683],{"class":31,"line":1799},[29,78684,2362],{"class":309},[29,78686,78687],{"class":31,"line":1804},[29,78688,2575],{"emptyLinePlaceholder":233},[29,78690,78691,78693],{"class":31,"line":1818},[29,78692,62252],{"class":35},[29,78694,15747],{"class":309},[29,78696,78697,78699,78701,78704,78706],{"class":31,"line":1823},[29,78698,54900],{"class":39},[29,78700,51566],{"class":309},[29,78702,78703],{"class":39},"990",[29,78705,51621],{"class":305},[29,78707,1468],{"class":309},[29,78709,78710,78712,78714,78716,78718],{"class":31,"line":1829},[29,78711,54835],{"class":39},[29,78713,51566],{"class":309},[29,78715,499],{"class":39},[29,78717,51685],{"class":39},[29,78719,1468],{"class":309},[29,78721,78722,78724,78726,78728],{"class":31,"line":1850},[29,78723,55138],{"class":39},[29,78725,51566],{"class":309},[29,78727,51606],{"class":39},[29,78729,1468],{"class":309},[29,78731,78732,78735,78737,78740],{"class":31,"line":1855},[29,78733,78734],{"class":39},"      flex-wrap",[29,78736,51566],{"class":309},[29,78738,78739],{"class":39},"wrap",[29,78741,1468],{"class":309},[29,78743,78744],{"class":31,"line":1869},[29,78745,2362],{"class":309},[29,78747,78748],{"class":31,"line":1874},[29,78749,2575],{"emptyLinePlaceholder":233},[29,78751,78752,78755],{"class":31,"line":1903},[29,78753,78754],{"class":35},"    .item",[29,78756,15747],{"class":309},[29,78758,78759,78761,78763,78766,78768],{"class":31,"line":1908},[29,78760,54900],{"class":39},[29,78762,51566],{"class":309},[29,78764,78765],{"class":39},"240",[29,78767,51621],{"class":305},[29,78769,1468],{"class":309},[29,78771,78772,78774,78776,78778,78780],{"class":31,"line":1925},[29,78773,62129],{"class":39},[29,78775,51566],{"class":309},[29,78777,754],{"class":39},[29,78779,51621],{"class":305},[29,78781,1468],{"class":309},[29,78783,78784,78786,78788,78790,78792,78795,78797],{"class":31,"line":1930},[29,78785,54824],{"class":39},[29,78787,51566],{"class":309},[29,78789,1008],{"class":39},[29,78791,51621],{"class":305},[29,78793,78794],{"class":39}," 30",[29,78796,51621],{"class":305},[29,78798,1468],{"class":309},[29,78800,78801,78803,78805,78807,78810,78813,78815],{"class":31,"line":1935},[29,78802,61989],{"class":39},[29,78804,51566],{"class":309},[29,78806,28250],{"class":39},[29,78808,78809],{"class":39}," ease",[29,78811,78812],{"class":39}," .5",[29,78814,1003],{"class":305},[29,78816,1468],{"class":309},[29,78818,78819,78822,78824,78826,78828],{"class":31,"line":1940},[29,78820,78821],{"class":39},"      margin-bottom",[29,78823,51566],{"class":309},[29,78825,1008],{"class":39},[29,78827,51621],{"class":305},[29,78829,1468],{"class":309},[29,78831,78832],{"class":31,"line":1954},[29,78833,2362],{"class":309},[29,78835,78836],{"class":31,"line":1959},[29,78837,2575],{"emptyLinePlaceholder":233},[29,78839,78840,78843,78845,78848],{"class":31,"line":2752},[29,78841,78842],{"class":35},"    .item:nth-child",[29,78844,310],{"class":309},[29,78846,78847],{"class":39},"4n",[29,78849,12617],{"class":309},[29,78851,78852,78854,78856,78858],{"class":31,"line":2766},[29,78853,62129],{"class":39},[29,78855,51566],{"class":309},[29,78857,499],{"class":39},[29,78859,1468],{"class":309},[29,78861,78862],{"class":31,"line":2774},[29,78863,2362],{"class":309},[29,78865,78866],{"class":31,"line":2779},[29,78867,2575],{"emptyLinePlaceholder":233},[29,78869,78870,78873],{"class":31,"line":2785},[29,78871,78872],{"class":35},"    .item:hover",[29,78874,15747],{"class":309},[29,78876,78877,78880,78882,78884,78886,78888,78890,78892,78894,78897,78899,78901,78903,78905,78907,78909,78911,78914],{"class":31,"line":2791},[29,78878,78879],{"class":39},"      box-shadow",[29,78881,51566],{"class":309},[29,78883,499],{"class":39},[29,78885,51621],{"class":305},[29,78887,4268],{"class":39},[29,78889,51621],{"class":305},[29,78891,2323],{"class":39},[29,78893,51621],{"class":305},[29,78895,78896],{"class":39}," rgba",[29,78898,310],{"class":309},[29,78900,499],{"class":39},[29,78902,12610],{"class":309},[29,78904,499],{"class":39},[29,78906,12610],{"class":309},[29,78908,499],{"class":39},[29,78910,12610],{"class":309},[29,78912,78913],{"class":39},".2",[29,78915,2894],{"class":309},[29,78917,78918,78921,78923,78926,78928,78930,78932,78935,78937,78939,78941],{"class":31,"line":2796},[29,78919,78920],{"class":39},"      transform",[29,78922,51566],{"class":309},[29,78924,78925],{"class":39},"translate3d",[29,78927,310],{"class":309},[29,78929,499],{"class":39},[29,78931,12610],{"class":309},[29,78933,78934],{"class":39},"-4",[29,78936,51621],{"class":305},[29,78938,12610],{"class":309},[29,78940,499],{"class":39},[29,78942,2894],{"class":309},[29,78944,78945,78947,78949,78951],{"class":31,"line":8123},[29,78946,62154],{"class":39},[29,78948,51566],{"class":309},[29,78950,62159],{"class":39},[29,78952,1468],{"class":309},[29,78954,78955],{"class":31,"line":8147},[29,78956,2362],{"class":309},[29,78958,78959],{"class":31,"line":8152},[29,78960,2575],{"emptyLinePlaceholder":233},[29,78962,78963,78965,78967],{"class":31,"line":8158},[29,78964,78754],{"class":35},[29,78966,55744],{"class":51429},[29,78968,15747],{"class":309},[29,78970,78971,78973,78975,78977,78979],{"class":31,"line":8185},[29,78972,54900],{"class":39},[29,78974,51566],{"class":309},[29,78976,619],{"class":39},[29,78978,636],{"class":305},[29,78980,1468],{"class":309},[29,78982,78983],{"class":31,"line":8190},[29,78984,2362],{"class":309},[29,78986,78987],{"class":31,"line":8196},[29,78988,2575],{"emptyLinePlaceholder":233},[29,78990,78991,78993,78995],{"class":31,"line":8208},[29,78992,78754],{"class":35},[29,78994,62433],{"class":35},[29,78996,15747],{"class":309},[29,78998,78999,79001,79003,79005,79007],{"class":31,"line":8220},[29,79000,55051],{"class":39},[29,79002,51566],{"class":309},[29,79004,958],{"class":39},[29,79006,51621],{"class":305},[29,79008,1468],{"class":309},[29,79010,79011,79013,79015,79017,79019],{"class":31,"line":8232},[29,79012,78821],{"class":39},[29,79014,51566],{"class":309},[29,79016,754],{"class":39},[29,79018,51621],{"class":305},[29,79020,1468],{"class":309},[29,79022,79023,79025,79027,79030],{"class":31,"line":9891},[29,79024,57545],{"class":39},[29,79026,51566],{"class":309},[29,79028,79029],{"class":39},"#666",[29,79031,1468],{"class":309},[29,79033,79034],{"class":31,"line":9916},[29,79035,2362],{"class":309},[29,79037,79038],{"class":31,"line":9939},[29,79039,2575],{"emptyLinePlaceholder":233},[29,79041,79042,79044,79047],{"class":31,"line":9963},[29,79043,78754],{"class":35},[29,79045,79046],{"class":35}," .price",[29,79048,15747],{"class":309},[29,79050,79051,79053,79055,79057,79059],{"class":31,"line":9968},[29,79052,55051],{"class":39},[29,79054,51566],{"class":309},[29,79056,1058],{"class":39},[29,79058,51621],{"class":305},[29,79060,1468],{"class":309},[29,79062,79063,79065,79067,79070],{"class":31,"line":9973},[29,79064,57545],{"class":39},[29,79066,51566],{"class":309},[29,79068,79069],{"class":39},"firebrick",[29,79071,1468],{"class":309},[29,79073,79074],{"class":31,"line":9978},[29,79075,2362],{"class":309},[29,79077,79078],{"class":31,"line":9987},[29,79079,2575],{"emptyLinePlaceholder":233},[29,79081,79082,79084,79087],{"class":31,"line":9992},[29,79083,78754],{"class":35},[29,79085,79086],{"class":35}," .price::before",[29,79088,15747],{"class":309},[29,79090,79091,79094,79096,79099],{"class":31,"line":9998},[29,79092,79093],{"class":39},"      content",[29,79095,51566],{"class":309},[29,79097,79098],{"class":103},"'￥'",[29,79100,1468],{"class":309},[29,79102,79103,79105,79107,79109,79111],{"class":31,"line":10019},[29,79104,55051],{"class":39},[29,79106,51566],{"class":309},[29,79108,857],{"class":39},[29,79110,51621],{"class":305},[29,79112,1468],{"class":309},[29,79114,79115],{"class":31,"line":10025},[29,79116,2362],{"class":309},[29,79118,79119],{"class":31,"line":10039},[29,79120,2575],{"emptyLinePlaceholder":233},[29,79122,79123,79126],{"class":31,"line":10045},[29,79124,79125],{"class":35},"    .filter",[29,79127,15747],{"class":309},[29,79129,79130,79132,79134,79136],{"class":31,"line":10072},[29,79131,55138],{"class":39},[29,79133,51566],{"class":309},[29,79135,51606],{"class":39},[29,79137,1468],{"class":309},[29,79139,79140,79142,79144,79146,79148],{"class":31,"line":10081},[29,79141,54900],{"class":39},[29,79143,51566],{"class":309},[29,79145,78703],{"class":39},[29,79147,51621],{"class":305},[29,79149,1468],{"class":309},[29,79151,79152,79154,79156,79158,79160],{"class":31,"line":10087},[29,79153,54835],{"class":39},[29,79155,51566],{"class":309},[29,79157,499],{"class":39},[29,79159,51685],{"class":39},[29,79161,1468],{"class":309},[29,79163,79164,79166,79168,79170,79172,79174],{"class":31,"line":10095},[29,79165,54824],{"class":39},[29,79167,51566],{"class":309},[29,79169,964],{"class":39},[29,79171,51621],{"class":305},[29,79173,78794],{"class":39},[29,79175,79176],{"class":305},"px\n",[29,79178,79179],{"class":31,"line":10100},[29,79180,2362],{"class":309},[29,79182,79183],{"class":31,"line":16779},[29,79184,2575],{"emptyLinePlaceholder":233},[29,79186,79187,79189,79191],{"class":31,"line":16785},[29,79188,79125],{"class":35},[29,79190,1574],{"class":51429},[29,79192,15747],{"class":309},[29,79194,79195,79197,79199,79201,79203,79205,79207],{"class":31,"line":16808},[29,79196,54824],{"class":39},[29,79198,51566],{"class":309},[29,79200,754],{"class":39},[29,79202,51621],{"class":305},[29,79204,9125],{"class":39},[29,79206,51621],{"class":305},[29,79208,1468],{"class":309},[29,79210,79211,79213,79215,79217],{"class":31,"line":16814},[29,79212,61850],{"class":39},[29,79214,51566],{"class":309},[29,79216,61947],{"class":39},[29,79218,1468],{"class":309},[29,79220,79221,79223,79225,79227],{"class":31,"line":16837},[29,79222,57545],{"class":39},[29,79224,51566],{"class":309},[29,79226,79029],{"class":39},[29,79228,1468],{"class":309},[29,79230,79231,79233,79235,79237],{"class":31,"line":16851},[29,79232,64099],{"class":39},[29,79234,51566],{"class":309},[29,79236,54866],{"class":39},[29,79238,1468],{"class":309},[29,79240,79241,79243,79245,79247,79249],{"class":31,"line":16871},[29,79242,61879],{"class":39},[29,79244,51566],{"class":309},[29,79246,1008],{"class":39},[29,79248,51621],{"class":305},[29,79250,1468],{"class":309},[29,79252,79253],{"class":31,"line":16877},[29,79254,2362],{"class":309},[29,79256,79257],{"class":31,"line":16888},[29,79258,2575],{"emptyLinePlaceholder":233},[29,79260,79261,79263,79265,79267],{"class":31,"line":16911},[29,79262,79125],{"class":35},[29,79264,1574],{"class":51429},[29,79266,62029],{"class":35},[29,79268,15747],{"class":309},[29,79270,79271,79273,79275,79278],{"class":31,"line":16933},[29,79272,55013],{"class":39},[29,79274,51566],{"class":309},[29,79276,79277],{"class":39},"#05943c",[29,79279,1468],{"class":309},[29,79281,79282,79284,79286,79288],{"class":31,"line":16938},[29,79283,57545],{"class":39},[29,79285,51566],{"class":309},[29,79287,60971],{"class":39},[29,79289,1468],{"class":309},[29,79291,79292],{"class":31,"line":16944},[29,79293,2362],{"class":309},[29,79295,79296,79298,79300],{"class":31,"line":16958},[29,79297,52546],{"class":309},[29,79299,223],{"class":51429},[29,79301,51436],{"class":309},[29,79303,79304,79306,79308],{"class":31,"line":16971},[29,79305,51914],{"class":309},[29,79307,51463],{"class":51429},[29,79309,51436],{"class":309},[29,79311,79312],{"class":31,"line":16976},[29,79313,2575],{"emptyLinePlaceholder":233},[29,79315,79316,79318,79320],{"class":31,"line":16990},[29,79317,1218],{"class":309},[29,79319,51929],{"class":51429},[29,79321,51436],{"class":309},[29,79323,79324,79326,79328,79330,79332,79335],{"class":31,"line":16995},[29,79325,52273],{"class":309},[29,79327,51740],{"class":51429},[29,79329,53615],{"class":35},[29,79331,355],{"class":309},[29,79333,79334],{"class":103},"\"filter\"",[29,79336,51436],{"class":309},[29,79338,79339,79341,79343,79345,79347,79349,79352,79354,79356,79359,79361],{"class":31,"line":17001},[29,79340,51470],{"class":309},[29,79342,546],{"class":51429},[29,79344,61186],{"class":35},[29,79346,355],{"class":309},[29,79348,61191],{"class":103},[29,79350,79351],{"class":35}," data-index",[29,79353,355],{"class":309},[29,79355,3853],{"class":103},[29,79357,79358],{"class":309},">0-100元\u003C\u002F",[29,79360,546],{"class":51429},[29,79362,51436],{"class":309},[29,79364,79365,79367,79369,79371,79373,79375,79377,79379,79381,79384,79386],{"class":31,"line":17006},[29,79366,51470],{"class":309},[29,79368,546],{"class":51429},[29,79370,61186],{"class":35},[29,79372,355],{"class":309},[29,79374,61191],{"class":103},[29,79376,79351],{"class":35},[29,79378,355],{"class":309},[29,79380,3876],{"class":103},[29,79382,79383],{"class":309},">100-300元\u003C\u002F",[29,79385,546],{"class":51429},[29,79387,51436],{"class":309},[29,79389,79390,79392,79394,79396,79398,79400,79402,79404,79406,79409,79411],{"class":31,"line":17020},[29,79391,51470],{"class":309},[29,79393,546],{"class":51429},[29,79395,61186],{"class":35},[29,79397,355],{"class":309},[29,79399,61191],{"class":103},[29,79401,79351],{"class":35},[29,79403,355],{"class":309},[29,79405,3889],{"class":103},[29,79407,79408],{"class":309},">300元以上\u003C\u002F",[29,79410,546],{"class":51429},[29,79412,51436],{"class":309},[29,79414,79415,79417,79419,79421,79423,79425,79428,79430],{"class":31,"line":17025},[29,79416,51470],{"class":309},[29,79418,546],{"class":51429},[29,79420,61186],{"class":35},[29,79422,355],{"class":309},[29,79424,61191],{"class":103},[29,79426,79427],{"class":309},">全部区间\u003C\u002F",[29,79429,546],{"class":51429},[29,79431,51436],{"class":309},[29,79433,79434,79436,79438],{"class":31,"line":17030},[29,79435,52546],{"class":309},[29,79437,51740],{"class":51429},[29,79439,51436],{"class":309},[29,79441,79442,79444,79446,79448,79450,79452],{"class":31,"line":17044},[29,79443,52273],{"class":309},[29,79445,51740],{"class":51429},[29,79447,53615],{"class":35},[29,79449,355],{"class":309},[29,79451,62737],{"class":103},[29,79453,51436],{"class":309},[29,79455,79456],{"class":31,"line":17056},[29,79457,79458],{"class":367},"    \u003C!-- \u003Cdiv class=\"item\">\n",[29,79460,79461],{"class":31,"line":17061},[29,79462,79463],{"class":367},"      \u003Cimg src=\"\" alt=\"\">\n",[29,79465,79466],{"class":31,"line":17074},[29,79467,79468],{"class":367},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[29,79470,79471],{"class":31,"line":17079},[29,79472,79473],{"class":367},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[29,79475,79476],{"class":31,"line":17084},[29,79477,79478],{"class":367},"    \u003C\u002Fdiv> -->\n",[29,79480,79481,79483,79485],{"class":31,"line":17089},[29,79482,52546],{"class":309},[29,79484,51740],{"class":51429},[29,79486,51436],{"class":309},[29,79488,79489,79491,79493],{"class":31,"line":17102},[29,79490,52273],{"class":309},[29,79492,51942],{"class":51429},[29,79494,51436],{"class":309},[29,79496,79497],{"class":31,"line":17107},[29,79498,79499],{"class":367},"    \u002F\u002F 2. 初始化数据\n",[29,79501,79502,79504,79507,79509],{"class":31,"line":32762},[29,79503,11396],{"class":305},[29,79505,79506],{"class":39}," goodsList",[29,79508,13739],{"class":305},[29,79510,55576],{"class":309},[29,79512,79513],{"class":31,"line":32768},[29,79514,79515],{"class":309},"      {\n",[29,79517,79518,79521,79524],{"class":31,"line":32774},[29,79519,79520],{"class":309},"        id: ",[29,79522,79523],{"class":103},"'4001172'",[29,79525,31595],{"class":309},[29,79527,79528,79531,79534],{"class":31,"line":32780},[29,79529,79530],{"class":309},"        name: ",[29,79532,79533],{"class":103},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[29,79535,31595],{"class":309},[29,79537,79538,79541,79544],{"class":31,"line":32786},[29,79539,79540],{"class":309},"        price: ",[29,79542,79543],{"class":103},"'289.00'",[29,79545,31595],{"class":309},[29,79547,79548,79551,79554],{"class":31,"line":32797},[29,79549,79550],{"class":309},"        picture: ",[29,79552,79553],{"class":103},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[29,79555,31595],{"class":309},[29,79557,79558],{"class":31,"line":32803},[29,79559,78021],{"class":309},[29,79561,79562],{"class":31,"line":32823},[29,79563,79515],{"class":309},[29,79565,79566,79568,79571],{"class":31,"line":32829},[29,79567,79520],{"class":309},[29,79569,79570],{"class":103},"'4001594'",[29,79572,31595],{"class":309},[29,79574,79575,79577,79580],{"class":31,"line":32840},[29,79576,79530],{"class":309},[29,79578,79579],{"class":103},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[29,79581,31595],{"class":309},[29,79583,79584,79586,79589],{"class":31,"line":32846},[29,79585,79540],{"class":309},[29,79587,79588],{"class":103},"'288.00'",[29,79590,31595],{"class":309},[29,79592,79593,79595,79598],{"class":31,"line":32852},[29,79594,79550],{"class":309},[29,79596,79597],{"class":103},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[29,79599,31595],{"class":309},[29,79601,79602],{"class":31,"line":32858},[29,79603,78021],{"class":309},[29,79605,79606],{"class":31,"line":32864},[29,79607,79515],{"class":309},[29,79609,79610,79612,79615],{"class":31,"line":32870},[29,79611,79520],{"class":309},[29,79613,79614],{"class":103},"'4001009'",[29,79616,31595],{"class":309},[29,79618,79619,79621,79624],{"class":31,"line":32876},[29,79620,79530],{"class":309},[29,79622,79623],{"class":103},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[29,79625,31595],{"class":309},[29,79627,79628,79630,79633],{"class":31,"line":32882},[29,79629,79540],{"class":309},[29,79631,79632],{"class":103},"'109.00'",[29,79634,31595],{"class":309},[29,79636,79637,79639,79642],{"class":31,"line":32902},[29,79638,79550],{"class":309},[29,79640,79641],{"class":103},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[29,79643,31595],{"class":309},[29,79645,79646],{"class":31,"line":32908},[29,79647,78021],{"class":309},[29,79649,79650],{"class":31,"line":32924},[29,79651,79515],{"class":309},[29,79653,79654,79656,79659],{"class":31,"line":32930},[29,79655,79520],{"class":309},[29,79657,79658],{"class":103},"'4001874'",[29,79660,31595],{"class":309},[29,79662,79663,79665,79668],{"class":31,"line":32944},[29,79664,79530],{"class":309},[29,79666,79667],{"class":103},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[29,79669,31595],{"class":309},[29,79671,79672,79674,79677],{"class":31,"line":32950},[29,79673,79540],{"class":309},[29,79675,79676],{"class":103},"'488.00'",[29,79678,31595],{"class":309},[29,79680,79681,79683,79686],{"class":31,"line":32965},[29,79682,79550],{"class":309},[29,79684,79685],{"class":103},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[29,79687,31595],{"class":309},[29,79689,79690],{"class":31,"line":32971},[29,79691,78021],{"class":309},[29,79693,79694],{"class":31,"line":32980},[29,79695,79515],{"class":309},[29,79697,79698,79700,79703],{"class":31,"line":32986},[29,79699,79520],{"class":309},[29,79701,79702],{"class":103},"'4001649'",[29,79704,31595],{"class":309},[29,79706,79707,79709,79712],{"class":31,"line":32995},[29,79708,79530],{"class":309},[29,79710,79711],{"class":103},"'大师监制龙泉青瓷茶叶罐'",[29,79713,31595],{"class":309},[29,79715,79716,79718,79721],{"class":31,"line":33001},[29,79717,79540],{"class":309},[29,79719,79720],{"class":103},"'139.00'",[29,79722,31595],{"class":309},[29,79724,79725,79727,79730],{"class":31,"line":33007},[29,79726,79550],{"class":309},[29,79728,79729],{"class":103},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[29,79731,31595],{"class":309},[29,79733,79734],{"class":31,"line":33016},[29,79735,78021],{"class":309},[29,79737,79738],{"class":31,"line":33022},[29,79739,79515],{"class":309},[29,79741,79742,79744,79747],{"class":31,"line":33033},[29,79743,79520],{"class":309},[29,79745,79746],{"class":103},"'3997185'",[29,79748,31595],{"class":309},[29,79750,79751,79753,79756],{"class":31,"line":33039},[29,79752,79530],{"class":309},[29,79754,79755],{"class":103},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[29,79757,31595],{"class":309},[29,79759,79760,79762,79765],{"class":31,"line":33058},[29,79761,79540],{"class":309},[29,79763,79764],{"class":103},"'108.00'",[29,79766,31595],{"class":309},[29,79768,79769,79771,79774],{"class":31,"line":33064},[29,79770,79550],{"class":309},[29,79772,79773],{"class":103},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[29,79775,31595],{"class":309},[29,79777,79778],{"class":31,"line":33075},[29,79779,78021],{"class":309},[29,79781,79782],{"class":31,"line":33081},[29,79783,79515],{"class":309},[29,79785,79786,79788,79791],{"class":31,"line":33101},[29,79787,79520],{"class":309},[29,79789,79790],{"class":103},"'3997403'",[29,79792,31595],{"class":309},[29,79794,79795,79797,79800],{"class":31,"line":33117},[29,79796,79530],{"class":309},[29,79798,79799],{"class":103},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[29,79801,31595],{"class":309},[29,79803,79804,79806,79809],{"class":31,"line":33123},[29,79805,79540],{"class":309},[29,79807,79808],{"class":103},"'100.00'",[29,79810,31595],{"class":309},[29,79812,79813,79815,79818],{"class":31,"line":33137},[29,79814,79550],{"class":309},[29,79816,79817],{"class":103},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[29,79819,31595],{"class":309},[29,79821,79822],{"class":31,"line":33143},[29,79823,78021],{"class":309},[29,79825,79826],{"class":31,"line":33149},[29,79827,79515],{"class":309},[29,79829,79830,79832,79835],{"class":31,"line":33160},[29,79831,79520],{"class":309},[29,79833,79834],{"class":103},"'3998274'",[29,79836,31595],{"class":309},[29,79838,79839,79841,79844],{"class":31,"line":33166},[29,79840,79530],{"class":309},[29,79842,79843],{"class":103},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[29,79845,31595],{"class":309},[29,79847,79848,79850,79852],{"class":31,"line":33172},[29,79849,79540],{"class":309},[29,79851,79720],{"class":103},[29,79853,31595],{"class":309},[29,79855,79856,79858,79861],{"class":31,"line":33182},[29,79857,79550],{"class":309},[29,79859,79860],{"class":103},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[29,79862,31595],{"class":309},[29,79864,79865],{"class":31,"line":33188},[29,79866,78021],{"class":309},[29,79868,79869],{"class":31,"line":33199},[29,79870,53238],{"class":309},[29,79872,79873],{"class":31,"line":33205},[29,79874,2575],{"emptyLinePlaceholder":233},[29,79876,79877],{"class":31,"line":33215},[29,79878,79879],{"class":367},"    \u002F\u002F 1.渲染函数\n",[29,79881,79882,79884,79886,79888,79890],{"class":31,"line":33220},[29,79883,70213],{"class":305},[29,79885,70216],{"class":35},[29,79887,310],{"class":309},[29,79889,4055],{"class":5391},[29,79891,12617],{"class":309},[29,79893,79894],{"class":31,"line":33226},[29,79895,79896],{"class":367},"      \u002F\u002F 声明空字符串\n",[29,79898,79899,79902,79905,79907],{"class":31,"line":33275},[29,79900,79901],{"class":305},"      let",[29,79903,79904],{"class":309}," str ",[29,79906,355],{"class":305},[29,79908,70233],{"class":103},[29,79910,79911],{"class":31,"line":33322},[29,79912,70238],{"class":367},[29,79914,79915,79917,79920,79922,79925,79928],{"class":31,"line":33327},[29,79916,58136],{"class":309},[29,79918,79919],{"class":35},"forEach",[29,79921,310],{"class":309},[29,79923,79924],{"class":5391},"item",[29,79926,79927],{"class":305}," =>",[29,79929,15747],{"class":309},[29,79931,79932,79934,79937,79940,79942,79945,79947,79950,79953,79955],{"class":31,"line":33333},[29,79933,61399],{"class":305},[29,79935,79936],{"class":309}," { ",[29,79938,79939],{"class":39},"name",[29,79941,12610],{"class":309},[29,79943,79944],{"class":39},"price",[29,79946,12610],{"class":309},[29,79948,79949],{"class":39},"picture",[29,79951,79952],{"class":309}," } ",[29,79954,355],{"class":305},[29,79956,79957],{"class":309}," item\n",[29,79959,79960,79963,79965],{"class":31,"line":33352},[29,79961,79962],{"class":309},"        str ",[29,79964,9652],{"class":305},[29,79966,70297],{"class":103},[29,79968,79969],{"class":31,"line":33358},[29,79970,79971],{"class":103},"          \u003Cdiv class=\"item\">\n",[29,79973,79974,79977,79979],{"class":31,"line":33378},[29,79975,79976],{"class":103},"            \u003Cimg src=\"${",[29,79978,79949],{"class":309},[29,79980,79981],{"class":103},"}\" alt=\"\">\n",[29,79983,79984,79987,79989],{"class":31,"line":33384},[29,79985,79986],{"class":103},"            \u003Cp class=\"name\">${",[29,79988,79939],{"class":309},[29,79990,79991],{"class":103},"}\u003C\u002Fp>\n",[29,79993,79994,79997,79999],{"class":31,"line":33390},[29,79995,79996],{"class":103},"            \u003Cp class=\"price\">${",[29,79998,79944],{"class":309},[29,80000,79991],{"class":103},[29,80002,80003],{"class":31,"line":33400},[29,80004,80005],{"class":103},"          \u003C\u002Fdiv>\n",[29,80007,80008],{"class":31,"line":33405},[29,80009,80010],{"class":103},"        `\n",[29,80012,80013],{"class":31,"line":33411},[29,80014,64944],{"class":309},[29,80016,80017],{"class":31,"line":33427},[29,80018,80019],{"class":367},"      \u002F\u002F 追加给List\n",[29,80021,80022,80024,80026,80028,80031,80033,80035],{"class":31,"line":33472},[29,80023,55900],{"class":309},[29,80025,54528],{"class":35},[29,80027,310],{"class":309},[29,80029,80030],{"class":103},"'.list'",[29,80032,74378],{"class":309},[29,80034,355],{"class":305},[29,80036,74114],{"class":309},[29,80038,80039],{"class":31,"line":33478},[29,80040,2362],{"class":309},[29,80042,80043],{"class":31,"line":33484},[29,80044,80045],{"class":367},"    \u002F\u002F 页面一打开就需要渲染\n",[29,80047,80048,80051],{"class":31,"line":33490},[29,80049,80050],{"class":35},"    render",[29,80052,80053],{"class":309},"(goodsList)\n",[29,80055,80056],{"class":31,"line":33501},[29,80057,80058],{"class":367},"    \u002F\u002F 2.过滤筛选\n",[29,80060,80061,80063,80065,80067,80070,80072,80074,80076,80078,80080,80082,80084],{"class":31,"line":33507},[29,80062,52536],{"class":309},[29,80064,54528],{"class":35},[29,80066,310],{"class":309},[29,80068,80069],{"class":103},"'.filter'",[29,80071,30955],{"class":309},[29,80073,57942],{"class":35},[29,80075,310],{"class":309},[29,80077,57947],{"class":103},[29,80079,12610],{"class":309},[29,80081,383],{"class":5391},[29,80083,79927],{"class":305},[29,80085,15747],{"class":309},[29,80087,80088],{"class":31,"line":33513},[29,80089,80090],{"class":367},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[29,80092,80093,80095,80097,80100,80102,80104,80106,80108],{"class":31,"line":33519},[29,80094,58357],{"class":305},[29,80096,79936],{"class":309},[29,80098,80099],{"class":39},"tagName",[29,80101,12610],{"class":309},[29,80103,31666],{"class":39},[29,80105,79952],{"class":309},[29,80107,355],{"class":305},[29,80109,80110],{"class":309}," e.target\n",[29,80112,80113],{"class":31,"line":33537},[29,80114,80115],{"class":367},"      \u002F\u002F 判断\n",[29,80117,80118,80120,80122,80124,80126],{"class":31,"line":33551},[29,80119,54609],{"class":305},[29,80121,67163],{"class":309},[29,80123,54615],{"class":305},[29,80125,68385],{"class":103},[29,80127,12617],{"class":309},[29,80129,80130],{"class":31,"line":33560},[29,80131,80132],{"class":367},"        \u002F\u002F console.log(11)\n",[29,80134,80135],{"class":31,"line":33569},[29,80136,80137],{"class":367},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[29,80139,80140],{"class":31,"line":33578},[29,80141,80142],{"class":367},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[29,80144,80145,80147,80149,80151],{"class":31,"line":33587},[29,80146,51959],{"class":305},[29,80148,51962],{"class":309},[29,80150,355],{"class":305},[29,80152,80153],{"class":309}," goodsList\n",[29,80155,80156,80158,80161,80163,80166],{"class":31,"line":33593},[29,80157,2672],{"class":305},[29,80159,80160],{"class":309}," (dataset.index ",[29,80162,54615],{"class":305},[29,80164,80165],{"class":103}," '1'",[29,80167,12617],{"class":309},[29,80169,80170,80173,80175,80178,80181,80183,80185,80187,80190,80192,80194,80197,80199,80201,80203],{"class":31,"line":33599},[29,80171,80172],{"class":309},"          arr ",[29,80174,355],{"class":305},[29,80176,80177],{"class":309}," goodsList.",[29,80179,80180],{"class":35},"filter",[29,80182,310],{"class":309},[29,80184,79924],{"class":5391},[29,80186,79927],{"class":305},[29,80188,80189],{"class":309}," item.price ",[29,80191,1886],{"class":305},[29,80193,4268],{"class":39},[29,80195,80196],{"class":305}," &&",[29,80198,80189],{"class":309},[29,80200,1764],{"class":305},[29,80202,5929],{"class":39},[29,80204,316],{"class":309},[29,80206,80207,80210,80212,80214,80216,80218,80221],{"class":31,"line":33607},[29,80208,80209],{"class":309},"        } ",[29,80211,1877],{"class":305},[29,80213,1880],{"class":305},[29,80215,80160],{"class":309},[29,80217,54615],{"class":305},[29,80219,80220],{"class":103}," '2'",[29,80222,12617],{"class":309},[29,80224,80225,80227,80229,80231,80233,80235,80237,80239,80241,80243,80245,80247,80249,80251,80254],{"class":31,"line":33612},[29,80226,80172],{"class":309},[29,80228,355],{"class":305},[29,80230,80177],{"class":309},[29,80232,80180],{"class":35},[29,80234,310],{"class":309},[29,80236,79924],{"class":5391},[29,80238,79927],{"class":305},[29,80240,80189],{"class":309},[29,80242,1886],{"class":305},[29,80244,5929],{"class":39},[29,80246,80196],{"class":305},[29,80248,80189],{"class":309},[29,80250,1764],{"class":305},[29,80252,80253],{"class":39}," 300",[29,80255,316],{"class":309},[29,80257,80258,80260,80262,80264,80266,80268,80271],{"class":31,"line":33618},[29,80259,80209],{"class":309},[29,80261,1877],{"class":305},[29,80263,1880],{"class":305},[29,80265,80160],{"class":309},[29,80267,54615],{"class":305},[29,80269,80270],{"class":103}," '3'",[29,80272,12617],{"class":309},[29,80274,80275,80277,80279,80281,80283,80285,80287,80289,80291,80293,80295],{"class":31,"line":33629},[29,80276,80172],{"class":309},[29,80278,355],{"class":305},[29,80280,80177],{"class":309},[29,80282,80180],{"class":35},[29,80284,310],{"class":309},[29,80286,79924],{"class":5391},[29,80288,79927],{"class":305},[29,80290,80189],{"class":309},[29,80292,1886],{"class":305},[29,80294,80253],{"class":39},[29,80296,316],{"class":309},[29,80298,80299],{"class":31,"line":33635},[29,80300,2704],{"class":309},[29,80302,80303],{"class":31,"line":33655},[29,80304,80305],{"class":367},"        \u002F\u002F 渲染函数\n",[29,80307,80308,80310],{"class":31,"line":33661},[29,80309,70537],{"class":35},[29,80311,52541],{"class":309},[29,80313,80314],{"class":31,"line":33667},[29,80315,52527],{"class":309},[29,80317,80318],{"class":31,"line":33673},[29,80319,2575],{"emptyLinePlaceholder":233},[29,80321,80322],{"class":31,"line":33690},[29,80323,33590],{"class":309},[29,80325,80326,80328,80330],{"class":31,"line":33696},[29,80327,52546],{"class":309},[29,80329,51942],{"class":51429},[29,80331,51436],{"class":309},[29,80333,80334,80336,80338],{"class":31,"line":33702},[29,80335,51914],{"class":309},[29,80337,51929],{"class":51429},[29,80339,51436],{"class":309},[29,80341,80342],{"class":31,"line":33708},[29,80343,2575],{"emptyLinePlaceholder":233},[29,80345,80346,80348,80350],{"class":31,"line":33714},[29,80347,51914],{"class":309},[29,80349,50764],{"class":51429},[29,80351,51436],{"class":309},[14,80353,80355],{"id":80354},"_410-深入了解对象","4.10 深入了解对象",[275,80357,80359],{"id":80358},"_4101-创建对象","4.10.1 创建对象",[171,80361,80362],{},[1638,80363],{"alt":24,"src":80364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[171,80366,80367],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[275,80369,80371],{"id":80370},"_4102-构造函数","4.10.2 构造函数",[171,80373,80374,80377],{},[457,80375,80376],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[171,80379,80380,80383],{},[457,80381,80382],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[19,80385,80387],{"className":50762,"code":80386,"language":50764,"meta":24,"style":24},"\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",[26,80388,80389,80397,80402,80423,80436,80448,80460,80464,80469,80496,80501,80528],{"__ignoreMap":24},[29,80390,80391,80393,80395],{"class":31,"line":32},[29,80392,1218],{"class":309},[29,80394,51942],{"class":51429},[29,80396,51436],{"class":309},[29,80398,80399],{"class":31,"line":43},[29,80400,80401],{"class":367},"\u002F\u002F例：\n",[29,80403,80404,80406,80409,80411,80413,80415,80417,80419,80421],{"class":31,"line":51},[29,80405,54578],{"class":305},[29,80407,80408],{"class":35}," Pig",[29,80410,310],{"class":309},[29,80412,79939],{"class":5391},[29,80414,686],{"class":309},[29,80416,70350],{"class":5391},[29,80418,686],{"class":309},[29,80420,70367],{"class":5391},[29,80422,12617],{"class":309},[29,80424,80425,80428,80431,80433],{"class":31,"line":59},[29,80426,80427],{"class":39},"    this",[29,80429,80430],{"class":309},".name",[29,80432,355],{"class":305},[29,80434,80435],{"class":309},"name\n",[29,80437,80438,80440,80443,80445],{"class":31,"line":67},[29,80439,80427],{"class":39},[29,80441,80442],{"class":309},".age",[29,80444,355],{"class":305},[29,80446,80447],{"class":309},"age\n",[29,80449,80450,80452,80455,80457],{"class":31,"line":75},[29,80451,80427],{"class":39},[29,80453,80454],{"class":309},".gender",[29,80456,355],{"class":305},[29,80458,80459],{"class":309},"gender    \n",[29,80461,80462],{"class":31,"line":83},[29,80463,1741],{"class":309},[29,80465,80466],{"class":31,"line":158},[29,80467,80468],{"class":367},"\u002F\u002F创建佩奇对象\n",[29,80470,80471,80473,80476,80478,80480,80482,80485,80487,80489,80491,80494],{"class":31,"line":166},[29,80472,6967],{"class":305},[29,80474,80475],{"class":39}," Peppa",[29,80477,11892],{"class":305},[29,80479,80408],{"class":35},[29,80481,310],{"class":309},[29,80483,80484],{"class":103},"'佩奇'",[29,80486,686],{"class":309},[29,80488,652],{"class":39},[29,80490,686],{"class":309},[29,80492,80493],{"class":103},"'女'",[29,80495,316],{"class":309},[29,80497,80498],{"class":31,"line":1505},[29,80499,80500],{"class":367},"\u002F\u002F创建乔治对象\n",[29,80502,80503,80505,80508,80510,80512,80514,80517,80519,80521,80523,80526],{"class":31,"line":1788},[29,80504,6967],{"class":305},[29,80506,80507],{"class":39}," George",[29,80509,11892],{"class":305},[29,80511,80408],{"class":35},[29,80513,310],{"class":309},[29,80515,80516],{"class":103},"'乔治'",[29,80518,686],{"class":309},[29,80520,380],{"class":39},[29,80522,686],{"class":309},[29,80524,80525],{"class":103},"'男'",[29,80527,316],{"class":309},[29,80529,80530,80532,80534],{"class":31,"line":1793},[29,80531,51914],{"class":309},[29,80533,51942],{"class":51429},[29,80535,51436],{"class":309},[171,80537,80538],{},[1638,80539],{"alt":24,"src":80540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[171,80542,80543],{},[1638,80544],{"alt":24,"src":80545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[171,80547,80548],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[171,80550,80551],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[171,80553,80554],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[171,80556,80557],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[171,80559,80560],{},"这里用等号是因为：对象.属性=值",[171,80562,80563],{},"①利用对象字面量创建对象",[171,80565,80566],{},"const o={",[171,80568,80569],{},"name:'pink'",[171,80571,80572],{},"} ②利用new Object创建对象",[171,80574,80575],{},"const o=new Object({name:'pink'})",[171,80577,80578],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[171,80580,80581],{},"构造函数创建对象的执行过程：",[171,80583,80584],{},[1638,80585],{"alt":24,"src":80586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[275,80588,80590],{"id":80589},"_4103-实例成员","4.10.3 实例成员",[171,80592,80593],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[259,80595,80596,80599,80602],{},[178,80597,80598],{},"实例对象的属性和方法即为实例成员",[178,80600,80601],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[178,80603,80604],{},"构造函数创建的实例对象彼此独立互不影响",[275,80606,80608],{"id":80607},"_4104-静态成员","4.10.4 静态成员",[171,80610,80611],{},[1638,80612],{"alt":24,"src":80613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[171,80615,80616],{},"静态成员有Date.now() Math.PI Math.random()",[171,80618,80619],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[171,80621,80622],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[171,80624,80625],{},"function Pig(name) n {",[171,80627,80628],{},"this.name=name",[171,80630,1254],{},[171,80632,80633],{},"Pig.eyes=2",[171,80635,80636],{},"Pig.sayHai=function () { console.log(this) }",[171,80638,80639],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[171,80641,80642],{},"console.log(Pig.eyes) \u002F\u002F2",[171,80644,11507],{},[259,80646,80647,80650,80653,80656,80659],{},[178,80648,80649],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[178,80651,80652],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[178,80654,80655],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[178,80657,80658],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[178,80660,80661],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[171,80663,80664],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[275,80666,80668],{"id":80667},"_4105-内置构造函数","4.10.5 内置构造函数",[171,80670,80671],{},"内置构造函数包含：",[171,80673,80674],{},[1638,80675],{"alt":24,"src":80676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[171,80678,80679],{},[1638,80680],{"alt":24,"src":80681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[171,80683,80684],{},"这些基本数据类型，js对他们进行了包装",[51942,80686,80687],{},"\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",[22173,80689,80691],{"id":80690},"_41051-object","4.10.5.1 Object",[171,80693,80694],{},"Object 是内置的构造函数，用于创建普通对象",[171,80696,80697],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[19,80699,80701],{"className":50762,"code":80700,"language":50764,"meta":24,"style":24},"const user=new Object({name:'小明',age:15})\n",[26,80702,80703],{"__ignoreMap":24},[29,80704,80705],{"class":31,"line":32},[29,80706,80700],{"class":309},[171,80708,80709],{},"三个常用的静态方法：",[23085,80711,80713],{"id":80712},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[171,80715,80716],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[171,80718,80719],{},[1638,80720],{"alt":24,"src":80721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[171,80723,80724],{},[1638,80725],{"alt":24,"src":80726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[19,80728,80730],{"className":53196,"code":80729,"language":53198,"meta":24,"style":24},"\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",[26,80731,80732,80740,80748,80753,80758,80763,80768,80773,80778,80786],{"__ignoreMap":24},[29,80733,80734,80736,80738],{"class":31,"line":32},[29,80735,1218],{"class":309},[29,80737,51929],{"class":51429},[29,80739,51436],{"class":309},[29,80741,80742,80744,80746],{"class":31,"line":43},[29,80743,52273],{"class":309},[29,80745,51942],{"class":51429},[29,80747,51436],{"class":309},[29,80749,80750],{"class":31,"line":51},[29,80751,80752],{"class":309},"    const o = { name: 'pink', age: 6 }\n",[29,80754,80755],{"class":31,"line":59},[29,80756,80757],{"class":309},"    \u002F\u002F 获得所有属性名\n",[29,80759,80760],{"class":31,"line":67},[29,80761,80762],{"class":309},"    const arr = Object.keys(o)\n",[29,80764,80765],{"class":31,"line":75},[29,80766,80767],{"class":309},"    console.log(arr)\n",[29,80769,80770],{"class":31,"line":83},[29,80771,80772],{"class":309},"    \u002F\u002F 获得所有属性值\n",[29,80774,80775],{"class":31,"line":158},[29,80776,80777],{"class":309},"    console.log(Object.values(o))\n",[29,80779,80780,80782,80784],{"class":31,"line":166},[29,80781,52546],{"class":309},[29,80783,51942],{"class":51429},[29,80785,51436],{"class":309},[29,80787,80788,80790,80792],{"class":31,"line":1505},[29,80789,51914],{"class":309},[29,80791,51929],{"class":51429},[29,80793,51436],{"class":309},[23085,80795,80797],{"id":80796},"_410512-object-assign","4.10.5.1.2 Object. assign",[171,80799,80800],{},"Object.assign(oo,o)",[171,80802,80803],{},"后的东西添加给前 是追加",[171,80805,80806],{},[1638,80807],{"alt":24,"src":80808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[171,80810,80811],{},[1638,80812],{"alt":24,"src":80813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[19,80815,80817],{"className":53196,"code":80816,"language":53198,"meta":24,"style":24},"\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",[26,80818,80819,80827,80835,80839,80843,80847,80851,80855,80859,80864,80869,80874,80879,80884,80892],{"__ignoreMap":24},[29,80820,80821,80823,80825],{"class":31,"line":32},[29,80822,1218],{"class":309},[29,80824,51929],{"class":51429},[29,80826,51436],{"class":309},[29,80828,80829,80831,80833],{"class":31,"line":43},[29,80830,52273],{"class":309},[29,80832,51942],{"class":51429},[29,80834,51436],{"class":309},[29,80836,80837],{"class":31,"line":51},[29,80838,80752],{"class":309},[29,80840,80841],{"class":31,"line":59},[29,80842,80757],{"class":309},[29,80844,80845],{"class":31,"line":67},[29,80846,80762],{"class":309},[29,80848,80849],{"class":31,"line":75},[29,80850,80767],{"class":309},[29,80852,80853],{"class":31,"line":83},[29,80854,80772],{"class":309},[29,80856,80857],{"class":31,"line":158},[29,80858,80777],{"class":309},[29,80860,80861],{"class":31,"line":166},[29,80862,80863],{"class":309},"    const oo = {}\n",[29,80865,80866],{"class":31,"line":1505},[29,80867,80868],{"class":309},"    Object.assign(oo, o)\n",[29,80870,80871],{"class":31,"line":1788},[29,80872,80873],{"class":309},"    console.log(oo)\n",[29,80875,80876],{"class":31,"line":1793},[29,80877,80878],{"class":309},"    Object.assign(o, { gender: '女' })\n",[29,80880,80881],{"class":31,"line":1799},[29,80882,80883],{"class":309},"    console.log(o)\n",[29,80885,80886,80888,80890],{"class":31,"line":1804},[29,80887,52546],{"class":309},[29,80889,51942],{"class":51429},[29,80891,51436],{"class":309},[29,80893,80894,80896,80898],{"class":31,"line":1818},[29,80895,51914],{"class":309},[29,80897,51929],{"class":51429},[29,80899,51436],{"class":309},[171,80901,80902],{},[1638,80903],{"alt":24,"src":80904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22173,80906,80908],{"id":80907},"_41052-array","4.10.5.2 Array",[171,80910,80911],{},"Array 是内置的构造函数，用于创建数组",[171,80913,80914],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[19,80916,80918],{"className":50762,"code":80917,"language":50764,"meta":24,"style":24},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[26,80919,80920,80925],{"__ignoreMap":24},[29,80921,80922],{"class":31,"line":32},[29,80923,80924],{"class":309},"const arr=new Array(3,5)\n",[29,80926,80927],{"class":31,"line":43},[29,80928,80929],{"class":309},"console.log(arr)  \u002F\u002F[3,5]\n",[171,80931,80932],{},"Array的实例方法，这个方法是实例成员",[171,80934,80935],{},[1638,80936],{"alt":24,"src":80937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23085,80939,80941],{"id":80940},"_410521-reduce","4.10.5.2.1 reduce",[171,80943,80944],{},[1638,80945],{"alt":24,"src":80946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[19,80948,80950],{"className":53196,"code":80949,"language":53198,"meta":24,"style":24},"\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",[26,80951,80952,80960,80968,80973,80978,80983,80988,80992,80997,81002,81007,81011,81016,81021,81025,81030,81035,81040,81048],{"__ignoreMap":24},[29,80953,80954,80956,80958],{"class":31,"line":32},[29,80955,1218],{"class":309},[29,80957,51929],{"class":51429},[29,80959,51436],{"class":309},[29,80961,80962,80964,80966],{"class":31,"line":43},[29,80963,52273],{"class":309},[29,80965,51942],{"class":51429},[29,80967,51436],{"class":309},[29,80969,80970],{"class":31,"line":51},[29,80971,80972],{"class":309},"    const arr = [1, 5, 8]\n",[29,80974,80975],{"class":31,"line":59},[29,80976,80977],{"class":309},"    \u002F\u002F 1.没有初始值\n",[29,80979,80980],{"class":31,"line":67},[29,80981,80982],{"class":309},"    const total = arr.reduce(function (prev, current) {\n",[29,80984,80985],{"class":31,"line":75},[29,80986,80987],{"class":309},"      return prev + current\n",[29,80989,80990],{"class":31,"line":83},[29,80991,33590],{"class":309},[29,80993,80994],{"class":31,"line":158},[29,80995,80996],{"class":309},"    console.log(total)   \u002F\u002F14\n",[29,80998,80999],{"class":31,"line":166},[29,81000,81001],{"class":309},"    \u002F\u002F 2.有初始值\n",[29,81003,81004],{"class":31,"line":1505},[29,81005,81006],{"class":309},"    const total1 = arr.reduce(function (prev, current) {\n",[29,81008,81009],{"class":31,"line":1788},[29,81010,80987],{"class":309},[29,81012,81013],{"class":31,"line":1793},[29,81014,81015],{"class":309},"    }, 10)\n",[29,81017,81018],{"class":31,"line":1799},[29,81019,81020],{"class":309},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[29,81022,81023],{"class":31,"line":1804},[29,81024,2575],{"emptyLinePlaceholder":233},[29,81026,81027],{"class":31,"line":1818},[29,81028,81029],{"class":309},"    \u002F\u002F 3.箭头函数写法\n",[29,81031,81032],{"class":31,"line":1823},[29,81033,81034],{"class":309},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[29,81036,81037],{"class":31,"line":1829},[29,81038,81039],{"class":309},"    console.log(total2)   \u002F\u002F24\n",[29,81041,81042,81044,81046],{"class":31,"line":1850},[29,81043,52546],{"class":309},[29,81045,51942],{"class":51429},[29,81047,51436],{"class":309},[29,81049,81050,81052,81054],{"class":31,"line":1855},[29,81051,51914],{"class":309},[29,81053,51929],{"class":51429},[29,81055,51436],{"class":309},[171,81057,81058],{},"执行过程：",[259,81060,81061,81064,81067],{},[178,81062,81063],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[178,81065,81066],{},"每一次循环，把返回值给作为下一次循环的上一次值",[178,81068,81069],{},"如果有起始值，则起始值作为上一次值",[19,81071,81073],{"className":53196,"code":81072,"language":53198,"meta":24,"style":24},"\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",[26,81074,81075,81083,81091,81095,81099,81103,81107,81111,81115,81120,81125,81130,81135,81140,81144,81148,81152,81156,81160,81164,81169,81173,81178,81182,81187,81192,81196,81200,81204,81212],{"__ignoreMap":24},[29,81076,81077,81079,81081],{"class":31,"line":32},[29,81078,1218],{"class":309},[29,81080,51929],{"class":51429},[29,81082,51436],{"class":309},[29,81084,81085,81087,81089],{"class":31,"line":43},[29,81086,52273],{"class":309},[29,81088,51942],{"class":51429},[29,81090,51436],{"class":309},[29,81092,81093],{"class":31,"line":51},[29,81094,80972],{"class":309},[29,81096,81097],{"class":31,"line":59},[29,81098,80977],{"class":309},[29,81100,81101],{"class":31,"line":67},[29,81102,80982],{"class":309},[29,81104,81105],{"class":31,"line":75},[29,81106,80987],{"class":309},[29,81108,81109],{"class":31,"line":83},[29,81110,33590],{"class":309},[29,81112,81113],{"class":31,"line":158},[29,81114,80996],{"class":309},[29,81116,81117],{"class":31,"line":166},[29,81118,81119],{"class":309},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[29,81121,81122],{"class":31,"line":1505},[29,81123,81124],{"class":309},"    \u002F\u002F     1              5                    6\n",[29,81126,81127],{"class":31,"line":1788},[29,81128,81129],{"class":309},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[29,81131,81132],{"class":31,"line":1793},[29,81133,81134],{"class":309},"    \u002F\u002F     6              8                    14\n",[29,81136,81137],{"class":31,"line":1799},[29,81138,81139],{"class":309},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[29,81141,81142],{"class":31,"line":1804},[29,81143,81001],{"class":309},[29,81145,81146],{"class":31,"line":1818},[29,81147,81006],{"class":309},[29,81149,81150],{"class":31,"line":1823},[29,81151,80987],{"class":309},[29,81153,81154],{"class":31,"line":1829},[29,81155,81015],{"class":309},[29,81157,81158],{"class":31,"line":1850},[29,81159,81020],{"class":309},[29,81161,81162],{"class":31,"line":1855},[29,81163,81119],{"class":309},[29,81165,81166],{"class":31,"line":1869},[29,81167,81168],{"class":309},"    \u002F\u002F     10             1                     11\n",[29,81170,81171],{"class":31,"line":1874},[29,81172,81129],{"class":309},[29,81174,81175],{"class":31,"line":1903},[29,81176,81177],{"class":309},"    \u002F\u002F     11             5                    16\n",[29,81179,81180],{"class":31,"line":1908},[29,81181,81129],{"class":309},[29,81183,81184],{"class":31,"line":1925},[29,81185,81186],{"class":309},"    \u002F\u002F     16             8                    24\n",[29,81188,81189],{"class":31,"line":1930},[29,81190,81191],{"class":309},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[29,81193,81194],{"class":31,"line":1935},[29,81195,81029],{"class":309},[29,81197,81198],{"class":31,"line":1940},[29,81199,81034],{"class":309},[29,81201,81202],{"class":31,"line":1954},[29,81203,81039],{"class":309},[29,81205,81206,81208,81210],{"class":31,"line":1959},[29,81207,52546],{"class":309},[29,81209,51942],{"class":51429},[29,81211,51436],{"class":309},[29,81213,81214,81216,81218],{"class":31,"line":2752},[29,81215,51914],{"class":309},[29,81217,51929],{"class":51429},[29,81219,51436],{"class":309},[23085,81221,81223],{"id":81222},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[171,81225,81226],{},[1638,81227],{"alt":24,"src":81228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[19,81230,81232],{"className":53196,"code":81231,"language":53198,"meta":24,"style":24},"\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",[26,81233,81234,81242,81250,81255,81260,81265,81270,81274,81279,81284,81289,81294,81299,81304,81308,81313,81317,81322,81330],{"__ignoreMap":24},[29,81235,81236,81238,81240],{"class":31,"line":32},[29,81237,1218],{"class":309},[29,81239,51929],{"class":51429},[29,81241,51436],{"class":309},[29,81243,81244,81246,81248],{"class":31,"line":43},[29,81245,52273],{"class":309},[29,81247,51942],{"class":51429},[29,81249,51436],{"class":309},[29,81251,81252],{"class":31,"line":51},[29,81253,81254],{"class":309},"    const arr = [\n",[29,81256,81257],{"class":31,"line":59},[29,81258,81259],{"class":309},"      { name: '张三', salary: 10000 },\n",[29,81261,81262],{"class":31,"line":67},[29,81263,81264],{"class":309},"      { name: '李四', salary: 10000 },\n",[29,81266,81267],{"class":31,"line":75},[29,81268,81269],{"class":309},"      { name: '王五', salary: 10000 }\n",[29,81271,81272],{"class":31,"line":83},[29,81273,53238],{"class":309},[29,81275,81276],{"class":31,"line":158},[29,81277,81278],{"class":309},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[29,81280,81281],{"class":31,"line":166},[29,81282,81283],{"class":309},"    \u002F\u002F prev是累计值\n",[29,81285,81286],{"class":31,"line":1505},[29,81287,81288],{"class":309},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[29,81290,81291],{"class":31,"line":1788},[29,81292,81293],{"class":309},"    console.log(total)\n",[29,81295,81296],{"class":31,"line":1793},[29,81297,81298],{"class":309},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[29,81300,81301],{"class":31,"line":1799},[29,81302,81303],{"class":309},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[29,81305,81306],{"class":31,"line":1804},[29,81307,81298],{"class":309},[29,81309,81310],{"class":31,"line":1818},[29,81311,81312],{"class":309},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[29,81314,81315],{"class":31,"line":1823},[29,81316,81298],{"class":309},[29,81318,81319],{"class":31,"line":1829},[29,81320,81321],{"class":309},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[29,81323,81324,81326,81328],{"class":31,"line":1850},[29,81325,52546],{"class":309},[29,81327,51942],{"class":51429},[29,81329,51436],{"class":309},[29,81331,81332,81334,81336],{"class":31,"line":1855},[29,81333,51914],{"class":309},[29,81335,51929],{"class":51429},[29,81337,51436],{"class":309},[23085,81339,81341],{"id":81340},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[171,81343,81344],{},[1638,81345],{"alt":24,"src":81346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[171,81348,81349],{},[1638,81350],{"alt":24,"src":81351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[259,81353,81354],{},[178,81355,81356],{},"find()",[171,81358,81359],{},"循环查找，找到第一个就ok",[171,81361,81362],{},[546,81363,81366],{"href":81364,"rel":81365},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24038],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[19,81368,81370],{"className":50762,"code":81369,"language":50764,"meta":24,"style":24},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[26,81371,81372,81377,81382],{"__ignoreMap":24},[29,81373,81374],{"class":31,"line":32},[29,81375,81376],{"class":309},"const array1 = [5, 12, 8, 130, 44]\n",[29,81378,81379],{"class":31,"line":43},[29,81380,81381],{"class":309},"const found = array1.find((element) => element > 10)\n",[29,81383,81384],{"class":31,"line":51},[29,81385,81386],{"class":309},"console.log(found)  \u002F\u002F12\n",[171,81388,81389,81391,81392,81397,81398,81401,81402,81404,81405,81410,81411,81413,81414,81416,81417,81419,81420],{},[26,81390,81356],{}," 方法是一个",[546,81393,81396],{"href":81394,"rel":81395},"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",[24038],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[26,81399,81400],{},"callbackFn"," 函数，直到 ",[26,81403,81400],{}," 返回一个",[546,81406,81409],{"href":81407,"rel":81408},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24038],"真值","。然后 ",[26,81412,81356],{}," 返回该元素并停止迭代数组。如果 ",[26,81415,81400],{}," 从未返回真值，则 ",[26,81418,81356],{}," 返回 ",[26,81421,81422],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[19,81424,81426],{"className":53196,"code":81425,"language":53198,"meta":24,"style":24},"\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",[26,81427,81428,81436,81444,81449,81454,81459,81463,81468,81473,81477,81482,81487,81491,81495,81500,81505,81509,81513,81518,81523,81528,81533,81538,81542,81547,81552,81557,81562,81566,81571,81579],{"__ignoreMap":24},[29,81429,81430,81432,81434],{"class":31,"line":32},[29,81431,1218],{"class":309},[29,81433,51929],{"class":51429},[29,81435,51436],{"class":309},[29,81437,81438,81440,81442],{"class":31,"line":43},[29,81439,52273],{"class":309},[29,81441,51942],{"class":51429},[29,81443,51436],{"class":309},[29,81445,81446],{"class":31,"line":51},[29,81447,81448],{"class":309},"    const arr = ['red', 'blue', 'green']\n",[29,81450,81451],{"class":31,"line":59},[29,81452,81453],{"class":309},"    const found = arr.find(item => item === 'pink')\n",[29,81455,81456],{"class":31,"line":67},[29,81457,81458],{"class":309},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[29,81460,81461],{"class":31,"line":75},[29,81462,2575],{"emptyLinePlaceholder":233},[29,81464,81465],{"class":31,"line":83},[29,81466,81467],{"class":309},"    \u002F\u002F 使用场景，用于查找数据\n",[29,81469,81470],{"class":31,"line":158},[29,81471,81472],{"class":309},"    const arr1 = [\n",[29,81474,81475],{"class":31,"line":166},[29,81476,79515],{"class":309},[29,81478,81479],{"class":31,"line":1505},[29,81480,81481],{"class":309},"        name: '小米',\n",[29,81483,81484],{"class":31,"line":1788},[29,81485,81486],{"class":309},"        price: 1999\n",[29,81488,81489],{"class":31,"line":1793},[29,81490,78021],{"class":309},[29,81492,81493],{"class":31,"line":1799},[29,81494,79515],{"class":309},[29,81496,81497],{"class":31,"line":1804},[29,81498,81499],{"class":309},"        name: '华为',\n",[29,81501,81502],{"class":31,"line":1818},[29,81503,81504],{"class":309},"        price: 3999\n",[29,81506,81507],{"class":31,"line":1823},[29,81508,52527],{"class":309},[29,81510,81511],{"class":31,"line":1829},[29,81512,53238],{"class":309},[29,81514,81515],{"class":31,"line":1850},[29,81516,81517],{"class":309},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[29,81519,81520],{"class":31,"line":1855},[29,81521,81522],{"class":309},"    \u002F\u002F const found1 = arr1.find(item => {\n",[29,81524,81525],{"class":31,"line":1869},[29,81526,81527],{"class":309},"    \u002F\u002F   if (item.name === '小米') {\n",[29,81529,81530],{"class":31,"line":1874},[29,81531,81532],{"class":309},"    \u002F\u002F     return item\n",[29,81534,81535],{"class":31,"line":1903},[29,81536,81537],{"class":309},"    \u002F\u002F   }\n",[29,81539,81540],{"class":31,"line":1908},[29,81541,63419],{"class":309},[29,81543,81544],{"class":31,"line":1925},[29,81545,81546],{"class":309},"    \u002F\u002F 另一种写法\n",[29,81548,81549],{"class":31,"line":1930},[29,81550,81551],{"class":309},"    const found1 = arr1.find(item => {\n",[29,81553,81554],{"class":31,"line":1935},[29,81555,81556],{"class":309},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[29,81558,81559],{"class":31,"line":1940},[29,81560,81561],{"class":309},"      return item.name = '小米'\n",[29,81563,81564],{"class":31,"line":1954},[29,81565,33590],{"class":309},[29,81567,81568],{"class":31,"line":1959},[29,81569,81570],{"class":309},"    console.log(found1)\n",[29,81572,81573,81575,81577],{"class":31,"line":2752},[29,81574,52546],{"class":309},[29,81576,51942],{"class":51429},[29,81578,51436],{"class":309},[29,81580,81581,81583,81585],{"class":31,"line":2766},[29,81582,51914],{"class":309},[29,81584,51929],{"class":51429},[29,81586,51436],{"class":309},[171,81588,81589],{},[1638,81590],{"alt":24,"src":81591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[171,81593,81594],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[259,81596,81597],{"start":43},[178,81598,81599],{},"every()返回的是布尔值",[171,81601,81602],{},[546,81603,81606],{"href":81604,"rel":81605},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24038],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[171,81608,81609],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[171,81611,81612],{},"some是只有有一个就没问题",[171,81614,81615],{},"every是必须全是才行",[19,81617,81621],{"className":81618,"code":81619,"language":81620,"meta":24,"style":24},"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",[26,81622,81623,81639,81653,81657,81666],{"__ignoreMap":24},[29,81624,81625,81627,81630,81632,81634,81637],{"class":31,"line":32},[29,81626,54578],{"class":305},[29,81628,81629],{"class":309}," isBigEnough(element, ",[29,81631,74187],{"class":305},[29,81633,12610],{"class":309},[29,81635,81636],{"class":305},"array",[29,81638,12617],{"class":309},[29,81640,81641,81644,81647,81649,81651],{"class":31,"line":43},[29,81642,81643],{"class":305},"  return",[29,81645,81646],{"class":309}," element ",[29,81648,1886],{"class":305},[29,81650,2213],{"class":39},[29,81652,1468],{"class":309},[29,81654,81655],{"class":31,"line":51},[29,81656,1741],{"class":309},[29,81658,81659,81662,81664],{"class":31,"line":59},[29,81660,81661],{"class":309},"[12, 5, 8, 130, 44].every(isBigEnough); ",[29,81663,33458],{"class":305},[29,81665,54645],{"class":309},[29,81667,81668,81671,81673],{"class":31,"line":67},[29,81669,81670],{"class":309},"[12, 54, 18, 130, 44].every(isBigEnough); ",[29,81672,33458],{"class":305},[29,81674,58069],{"class":309},[19,81676,81678],{"className":53196,"code":81677,"language":53198,"meta":24,"style":24},"\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",[26,81679,81680,81688,81696,81701,81705,81710,81715,81723],{"__ignoreMap":24},[29,81681,81682,81684,81686],{"class":31,"line":32},[29,81683,1218],{"class":309},[29,81685,51929],{"class":51429},[29,81687,51436],{"class":309},[29,81689,81690,81692,81694],{"class":31,"line":43},[29,81691,52273],{"class":309},[29,81693,51942],{"class":51429},[29,81695,51436],{"class":309},[29,81697,81698],{"class":31,"line":51},[29,81699,81700],{"class":309},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[29,81702,81703],{"class":31,"line":59},[29,81704,78451],{"class":309},[29,81706,81707],{"class":31,"line":67},[29,81708,81709],{"class":309},"    const flag = arr.every(item => item >= 10)\n",[29,81711,81712],{"class":31,"line":75},[29,81713,81714],{"class":309},"    console.log(flag)    \u002F\u002Ftrue\n",[29,81716,81717,81719,81721],{"class":31,"line":83},[29,81718,52546],{"class":309},[29,81720,51942],{"class":51429},[29,81722,51436],{"class":309},[29,81724,81725,81727,81729],{"class":31,"line":158},[29,81726,51914],{"class":309},[29,81728,51929],{"class":51429},[29,81730,51436],{"class":309},[19,81732,81734],{"className":53196,"code":81733,"language":53198,"meta":24,"style":24},"\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",[26,81735,81736,81744,81752,81756,81761,81766,81771,81779],{"__ignoreMap":24},[29,81737,81738,81740,81742],{"class":31,"line":32},[29,81739,1218],{"class":309},[29,81741,51929],{"class":51429},[29,81743,51436],{"class":309},[29,81745,81746,81748,81750],{"class":31,"line":43},[29,81747,52273],{"class":309},[29,81749,51942],{"class":51429},[29,81751,51436],{"class":309},[29,81753,81754],{"class":31,"line":51},[29,81755,81700],{"class":309},[29,81757,81758],{"class":31,"line":59},[29,81759,81760],{"class":309},"    const arr = [10, 0, 5]\n",[29,81762,81763],{"class":31,"line":67},[29,81764,81765],{"class":309},"    const flag = arr.some(item => item >= 10)\n",[29,81767,81768],{"class":31,"line":75},[29,81769,81770],{"class":309},"    console.log(flag)   \u002F\u002Ftrue\n",[29,81772,81773,81775,81777],{"class":31,"line":83},[29,81774,52546],{"class":309},[29,81776,51942],{"class":51429},[29,81778,51436],{"class":309},[29,81780,81781,81783,81785],{"class":31,"line":158},[29,81782,51914],{"class":309},[29,81784,51929],{"class":51429},[29,81786,51436],{"class":309},[23085,81788,81790],{"id":81789},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[171,81792,81793],{},[1638,81794],{"alt":24,"src":81795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[19,81797,81799],{"className":50762,"code":81798,"language":50764,"meta":24,"style":24},"\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",[26,81800,81801,81811,81825,81829,81837,81851,81871,81883,81891,81898,81910,81922,81934,81946,81956,81966,81970,81978,81986,81990,81998,82010,82018,82040,82045,82050,82083,82091,82099,82103],{"__ignoreMap":24},[29,81802,81803,81805,81807,81809],{"class":31,"line":32},[29,81804,51426],{"class":309},[29,81806,51430],{"class":51429},[29,81808,51433],{"class":35},[29,81810,51436],{"class":309},[29,81812,81813,81815,81817,81819,81821,81823],{"class":31,"line":43},[29,81814,1218],{"class":309},[29,81816,50764],{"class":51429},[29,81818,51445],{"class":35},[29,81820,355],{"class":309},[29,81822,51450],{"class":103},[29,81824,51436],{"class":309},[29,81826,81827],{"class":31,"line":51},[29,81828,2575],{"emptyLinePlaceholder":233},[29,81830,81831,81833,81835],{"class":31,"line":59},[29,81832,1218],{"class":309},[29,81834,51463],{"class":51429},[29,81836,51436],{"class":309},[29,81838,81839,81841,81843,81845,81847,81849],{"class":31,"line":67},[29,81840,52273],{"class":309},[29,81842,51473],{"class":51429},[29,81844,51476],{"class":35},[29,81846,355],{"class":309},[29,81848,51481],{"class":103},[29,81850,51436],{"class":309},[29,81852,81853,81855,81857,81859,81861,81863,81865,81867,81869],{"class":31,"line":75},[29,81854,52273],{"class":309},[29,81856,51473],{"class":51429},[29,81858,15095],{"class":35},[29,81860,355],{"class":309},[29,81862,51520],{"class":103},[29,81864,51500],{"class":35},[29,81866,355],{"class":309},[29,81868,51527],{"class":103},[29,81870,51436],{"class":309},[29,81872,81873,81875,81877,81879,81881],{"class":31,"line":83},[29,81874,52273],{"class":309},[29,81876,51536],{"class":51429},[29,81878,51539],{"class":309},[29,81880,51536],{"class":51429},[29,81882,51436],{"class":309},[29,81884,81885,81887,81889],{"class":31,"line":158},[29,81886,52273],{"class":309},[29,81888,223],{"class":51429},[29,81890,51436],{"class":309},[29,81892,81893,81896],{"class":31,"line":166},[29,81894,81895],{"class":51429},"    div",[29,81897,15747],{"class":309},[29,81899,81900,81902,81904,81906,81908],{"class":31,"line":1505},[29,81901,54900],{"class":39},[29,81903,51566],{"class":309},[29,81905,1898],{"class":39},[29,81907,51621],{"class":305},[29,81909,1468],{"class":309},[29,81911,81912,81914,81916,81918,81920],{"class":31,"line":1788},[29,81913,54914],{"class":39},[29,81915,51566],{"class":309},[29,81917,709],{"class":39},[29,81919,51621],{"class":305},[29,81921,1468],{"class":309},[29,81923,81924,81926,81928,81930,81932],{"class":31,"line":1793},[29,81925,57488],{"class":39},[29,81927,51566],{"class":309},[29,81929,709],{"class":39},[29,81931,51621],{"class":305},[29,81933,1468],{"class":309},[29,81935,81936,81938,81940,81942,81944],{"class":31,"line":1799},[29,81937,65262],{"class":39},[29,81939,51566],{"class":309},[29,81941,806],{"class":39},[29,81943,51621],{"class":305},[29,81945,1468],{"class":309},[29,81947,81948,81950,81952,81954],{"class":31,"line":1804},[29,81949,57415],{"class":39},[29,81951,51566],{"class":309},[29,81953,51721],{"class":39},[29,81955,1468],{"class":309},[29,81957,81958,81960,81962,81964],{"class":31,"line":1818},[29,81959,55013],{"class":39},[29,81961,51566],{"class":309},[29,81963,51774],{"class":39},[29,81965,1468],{"class":309},[29,81967,81968],{"class":31,"line":1823},[29,81969,2362],{"class":309},[29,81971,81972,81974,81976],{"class":31,"line":1829},[29,81973,52546],{"class":309},[29,81975,223],{"class":51429},[29,81977,51436],{"class":309},[29,81979,81980,81982,81984],{"class":31,"line":1850},[29,81981,51914],{"class":309},[29,81983,51463],{"class":51429},[29,81985,51436],{"class":309},[29,81987,81988],{"class":31,"line":1855},[29,81989,2575],{"emptyLinePlaceholder":233},[29,81991,81992,81994,81996],{"class":31,"line":1869},[29,81993,1218],{"class":309},[29,81995,51929],{"class":51429},[29,81997,51436],{"class":309},[29,81999,82000,82002,82004,82006,82008],{"class":31,"line":1874},[29,82001,52273],{"class":309},[29,82003,51740],{"class":51429},[29,82005,55443],{"class":309},[29,82007,51740],{"class":51429},[29,82009,51436],{"class":309},[29,82011,82012,82014,82016],{"class":31,"line":1903},[29,82013,52273],{"class":309},[29,82015,51942],{"class":51429},[29,82017,51436],{"class":309},[29,82019,82020,82022,82025,82027,82030,82033,82035,82038],{"class":31,"line":1908},[29,82021,11396],{"class":305},[29,82023,82024],{"class":39}," spec",[29,82026,13739],{"class":305},[29,82028,82029],{"class":309}," { size: ",[29,82031,82032],{"class":103},"'40cm*40cm'",[29,82034,55593],{"class":309},[29,82036,82037],{"class":103},"'黑色'",[29,82039,55733],{"class":309},[29,82041,82042],{"class":31,"line":1925},[29,82043,82044],{"class":367},"    \u002F\u002F const arr = Object.values(spec)\n",[29,82046,82047],{"class":31,"line":1930},[29,82048,82049],{"class":367},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[29,82051,82052,82054,82056,82058,82061,82063,82065,82068,82071,82074,82076,82078,82081],{"class":31,"line":1935},[29,82053,52536],{"class":309},[29,82055,54528],{"class":35},[29,82057,310],{"class":309},[29,82059,82060],{"class":103},"'div'",[29,82062,74378],{"class":309},[29,82064,355],{"class":305},[29,82066,82067],{"class":309}," Object.",[29,82069,82070],{"class":35},"values",[29,82072,82073],{"class":309},"(spec).",[29,82075,74352],{"class":35},[29,82077,310],{"class":309},[29,82079,82080],{"class":103},"'\u002F'",[29,82082,316],{"class":309},[29,82084,82085,82087,82089],{"class":31,"line":1940},[29,82086,52546],{"class":309},[29,82088,51942],{"class":51429},[29,82090,51436],{"class":309},[29,82092,82093,82095,82097],{"class":31,"line":1954},[29,82094,51914],{"class":309},[29,82096,51929],{"class":51429},[29,82098,51436],{"class":309},[29,82100,82101],{"class":31,"line":1959},[29,82102,2575],{"emptyLinePlaceholder":233},[29,82104,82105,82107,82109],{"class":31,"line":2752},[29,82106,51914],{"class":309},[29,82108,50764],{"class":51429},[29,82110,51436],{"class":309},[171,82112,82113],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23085,82115,82117],{"id":82116},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[171,82119,82120],{},"静态方法，将伪数组转换为真数组",[171,82122,82123],{},[1638,82124],{"alt":24,"src":82125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[19,82127,82129],{"className":53196,"code":82128,"language":53198,"meta":24,"style":24},"\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",[26,82130,82131,82139,82147,82159,82171,82183,82191,82199,82204,82209,82214,82219,82227],{"__ignoreMap":24},[29,82132,82133,82135,82137],{"class":31,"line":32},[29,82134,1218],{"class":309},[29,82136,51929],{"class":51429},[29,82138,51436],{"class":309},[29,82140,82141,82143,82145],{"class":31,"line":43},[29,82142,52273],{"class":309},[29,82144,175],{"class":51429},[29,82146,51436],{"class":309},[29,82148,82149,82151,82153,82155,82157],{"class":31,"line":51},[29,82150,51470],{"class":309},[29,82152,178],{"class":51429},[29,82154,55443],{"class":309},[29,82156,178],{"class":51429},[29,82158,51436],{"class":309},[29,82160,82161,82163,82165,82167,82169],{"class":31,"line":59},[29,82162,51470],{"class":309},[29,82164,178],{"class":51429},[29,82166,55443],{"class":309},[29,82168,178],{"class":51429},[29,82170,51436],{"class":309},[29,82172,82173,82175,82177,82179,82181],{"class":31,"line":67},[29,82174,51470],{"class":309},[29,82176,178],{"class":51429},[29,82178,55443],{"class":309},[29,82180,178],{"class":51429},[29,82182,51436],{"class":309},[29,82184,82185,82187,82189],{"class":31,"line":75},[29,82186,52546],{"class":309},[29,82188,175],{"class":51429},[29,82190,51436],{"class":309},[29,82192,82193,82195,82197],{"class":31,"line":83},[29,82194,52273],{"class":309},[29,82196,51942],{"class":51429},[29,82198,51436],{"class":309},[29,82200,82201],{"class":31,"line":158},[29,82202,82203],{"class":309},"    const lis = document.querySelectorAll('li')\n",[29,82205,82206],{"class":31,"line":166},[29,82207,82208],{"class":309},"    const liss = Array.from(lis)\n",[29,82210,82211],{"class":31,"line":1505},[29,82212,82213],{"class":309},"    liss.pop()\n",[29,82215,82216],{"class":31,"line":1788},[29,82217,82218],{"class":309},"    console.log(liss)\n",[29,82220,82221,82223,82225],{"class":31,"line":1793},[29,82222,52546],{"class":309},[29,82224,51942],{"class":51429},[29,82226,51436],{"class":309},[29,82228,82229,82231,82233],{"class":31,"line":1799},[29,82230,51914],{"class":309},[29,82232,51929],{"class":51429},[29,82234,51436],{"class":309},[171,82236,82237],{},[1638,82238],{"alt":24,"src":82239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22173,82241,82243],{"id":82242},"_41053-string","4.10.5.3 String",[171,82245,82246],{},[1638,82247],{"alt":24,"src":82248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23085,82250,82252],{"id":82251},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[19,82254,82256],{"className":53196,"code":82255,"language":53198,"meta":24,"style":24},"\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",[26,82257,82258,82266,82274,82279,82284,82289,82293,82298,82303,82308,82316],{"__ignoreMap":24},[29,82259,82260,82262,82264],{"class":31,"line":32},[29,82261,1218],{"class":309},[29,82263,51929],{"class":51429},[29,82265,51436],{"class":309},[29,82267,82268,82270,82272],{"class":31,"line":43},[29,82269,52273],{"class":309},[29,82271,51942],{"class":51429},[29,82273,51436],{"class":309},[29,82275,82276],{"class":31,"line":51},[29,82277,82278],{"class":309},"    \u002F\u002F 把字符串转化为数组\n",[29,82280,82281],{"class":31,"line":59},[29,82282,82283],{"class":309},"    const str = 'pink,red'\n",[29,82285,82286],{"class":31,"line":67},[29,82287,82288],{"class":309},"    const arr = str.split(',')\n",[29,82290,82291],{"class":31,"line":75},[29,82292,80767],{"class":309},[29,82294,82295],{"class":31,"line":83},[29,82296,82297],{"class":309},"    const str1 = '2025-8-25'\n",[29,82299,82300],{"class":31,"line":158},[29,82301,82302],{"class":309},"    const arr1 = str1.split('-')\n",[29,82304,82305],{"class":31,"line":166},[29,82306,82307],{"class":309},"    console.log(arr1)\n",[29,82309,82310,82312,82314],{"class":31,"line":1505},[29,82311,52546],{"class":309},[29,82313,51942],{"class":51429},[29,82315,51436],{"class":309},[29,82317,82318,82320,82322],{"class":31,"line":1788},[29,82319,51914],{"class":309},[29,82321,51929],{"class":51429},[29,82323,51436],{"class":309},[23085,82325,82327],{"id":82326},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[171,82329,5356],{},[171,82331,82332],{},"substring(indexStart)",[171,82334,82335],{},"substring(indexStart, indexEnd)",[175,82337,82338,82349,82361,82371],{},[178,82339,82340,82341,82344,82345,82348],{},"如果省略了 ",[26,82342,82343],{},"indexEnd","，则 ",[26,82346,82347],{},"substring()"," 提取字符直到字符串的末尾",[178,82350,82351,82352,82355,82356,82344,82358,82360],{},"如果 ",[26,82353,82354],{},"indexStart"," 等于 ",[26,82357,82343],{},[26,82359,82347],{}," 返回一个空字符串",[178,82362,82351,82363,82365,82366,82344,82368,82370],{},[26,82364,82354],{}," 大于 ",[26,82367,82343],{},[26,82369,82347],{}," 的效果就像交换了这两个参数一样",[178,82372,82373],{},"结束的索引号不包含想要截取的部分",[19,82375,82377],{"className":81618,"code":82376,"language":81620,"meta":24,"style":24},"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",[26,82378,82379,82391,82395,82429,82459,82463,82494,82498,82525,82555,82585,82589,82620],{"__ignoreMap":24},[29,82380,82381,82384,82386,82389],{"class":31,"line":32},[29,82382,82383],{"class":309},"const anyString ",[29,82385,355],{"class":305},[29,82387,82388],{"class":103}," \"Mozilla\"",[29,82390,1468],{"class":309},[29,82392,82393],{"class":31,"line":43},[29,82394,2575],{"emptyLinePlaceholder":233},[29,82396,82397,82400,82402,82404,82406,82409,82411,82414,82416,82418,82420,82422,82424,82426],{"class":31,"line":51},[29,82398,82399],{"class":39},"console",[29,82401,866],{"class":309},[29,82403,58376],{"class":39},[29,82405,310],{"class":309},[29,82407,82408],{"class":39},"anyString",[29,82410,866],{"class":309},[29,82412,82413],{"class":39},"substring",[29,82415,310],{"class":309},[29,82417,499],{"class":39},[29,82419,12610],{"class":309},[29,82421,525],{"class":39},[29,82423,75382],{"class":309},[29,82425,33458],{"class":305},[29,82427,82428],{"class":103}," 'M'\n",[29,82430,82431,82433,82435,82437,82439,82441,82443,82445,82447,82449,82451,82453,82455,82457],{"class":31,"line":59},[29,82432,82399],{"class":39},[29,82434,866],{"class":309},[29,82436,58376],{"class":39},[29,82438,310],{"class":309},[29,82440,82408],{"class":39},[29,82442,866],{"class":309},[29,82444,82413],{"class":39},[29,82446,310],{"class":309},[29,82448,525],{"class":39},[29,82450,12610],{"class":309},[29,82452,499],{"class":39},[29,82454,75382],{"class":309},[29,82456,33458],{"class":305},[29,82458,82428],{"class":103},[29,82460,82461],{"class":31,"line":67},[29,82462,2575],{"emptyLinePlaceholder":233},[29,82464,82465,82467,82469,82471,82473,82475,82477,82479,82481,82483,82485,82487,82489,82491],{"class":31,"line":75},[29,82466,82399],{"class":39},[29,82468,866],{"class":309},[29,82470,58376],{"class":39},[29,82472,310],{"class":309},[29,82474,82408],{"class":39},[29,82476,866],{"class":309},[29,82478,82413],{"class":39},[29,82480,310],{"class":309},[29,82482,499],{"class":39},[29,82484,12610],{"class":309},[29,82486,652],{"class":39},[29,82488,75382],{"class":309},[29,82490,33458],{"class":305},[29,82492,82493],{"class":103}," 'Mozill'\n",[29,82495,82496],{"class":31,"line":83},[29,82497,2575],{"emptyLinePlaceholder":233},[29,82499,82500,82502,82504,82506,82508,82510,82512,82514,82516,82518,82520,82522],{"class":31,"line":158},[29,82501,82399],{"class":39},[29,82503,866],{"class":309},[29,82505,58376],{"class":39},[29,82507,310],{"class":309},[29,82509,82408],{"class":39},[29,82511,866],{"class":309},[29,82513,82413],{"class":39},[29,82515,310],{"class":309},[29,82517,601],{"class":39},[29,82519,75382],{"class":309},[29,82521,33458],{"class":305},[29,82523,82524],{"class":103}," 'lla'\n",[29,82526,82527,82529,82531,82533,82535,82537,82539,82541,82543,82545,82547,82549,82551,82553],{"class":31,"line":166},[29,82528,82399],{"class":39},[29,82530,866],{"class":309},[29,82532,58376],{"class":39},[29,82534,310],{"class":309},[29,82536,82408],{"class":39},[29,82538,866],{"class":309},[29,82540,82413],{"class":39},[29,82542,310],{"class":309},[29,82544,601],{"class":39},[29,82546,12610],{"class":309},[29,82548,677],{"class":39},[29,82550,75438],{"class":309},[29,82552,33458],{"class":305},[29,82554,82524],{"class":103},[29,82556,82557,82559,82561,82563,82565,82567,82569,82571,82573,82575,82577,82579,82581,82583],{"class":31,"line":1505},[29,82558,82399],{"class":39},[29,82560,866],{"class":309},[29,82562,58376],{"class":39},[29,82564,310],{"class":309},[29,82566,82408],{"class":39},[29,82568,866],{"class":309},[29,82570,82413],{"class":39},[29,82572,310],{"class":309},[29,82574,677],{"class":39},[29,82576,12610],{"class":309},[29,82578,601],{"class":39},[29,82580,75382],{"class":309},[29,82582,33458],{"class":305},[29,82584,82524],{"class":103},[29,82586,82587],{"class":31,"line":1788},[29,82588,2575],{"emptyLinePlaceholder":233},[29,82590,82591,82593,82595,82597,82599,82601,82603,82605,82607,82609,82611,82613,82615,82617],{"class":31,"line":1793},[29,82592,82399],{"class":39},[29,82594,866],{"class":309},[29,82596,58376],{"class":39},[29,82598,310],{"class":309},[29,82600,82408],{"class":39},[29,82602,866],{"class":309},[29,82604,82413],{"class":39},[29,82606,310],{"class":309},[29,82608,499],{"class":39},[29,82610,12610],{"class":309},[29,82612,677],{"class":39},[29,82614,75382],{"class":309},[29,82616,33458],{"class":305},[29,82618,82619],{"class":103}," 'Mozilla'\n",[29,82621,82622,82624,82626,82628,82630,82632,82634,82636,82638,82640,82642,82644,82646,82648],{"class":31,"line":1799},[29,82623,82399],{"class":39},[29,82625,866],{"class":309},[29,82627,58376],{"class":39},[29,82629,310],{"class":309},[29,82631,82408],{"class":39},[29,82633,866],{"class":309},[29,82635,82413],{"class":39},[29,82637,310],{"class":309},[29,82639,499],{"class":39},[29,82641,12610],{"class":309},[29,82643,754],{"class":39},[29,82645,75382],{"class":309},[29,82647,33458],{"class":305},[29,82649,82619],{"class":103},[23085,82651,82653],{"id":82652},"_410533-startswith","4.10.5.3.3 startsWith",[171,82655,82656,82659,82660,82665,82666,82668,82669],{},[26,82657,82658],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[457,82661,82662],{},[26,82663,82664],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[26,82667,1538],{}," 或 ",[26,82670,66149],{},[19,82672,82674],{"className":77624,"code":82673,"language":77626,"meta":24,"style":24},"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",[26,82675,82676,82688,82707,82712,82732],{"__ignoreMap":24},[29,82677,82678,82680,82683,82685],{"class":31,"line":32},[29,82679,6967],{"class":305},[29,82681,82682],{"class":309}," str1 ",[29,82684,355],{"class":305},[29,82686,82687],{"class":103}," \"Saturday night plans\"\n",[29,82689,82690,82692,82694,82697,82700,82702,82705],{"class":31,"line":43},[29,82691,77661],{"class":309},[29,82693,58376],{"class":35},[29,82695,82696],{"class":309},"(str1.",[29,82698,82699],{"class":35},"startsWith",[29,82701,310],{"class":309},[29,82703,82704],{"class":103},"\"Sat\"",[29,82706,30626],{"class":309},[29,82708,82709],{"class":31,"line":51},[29,82710,82711],{"class":367},"\u002F\u002F Expected output: true\n",[29,82713,82714,82716,82718,82720,82722,82724,82726,82728,82730],{"class":31,"line":59},[29,82715,77661],{"class":309},[29,82717,58376],{"class":35},[29,82719,82696],{"class":309},[29,82721,82699],{"class":35},[29,82723,310],{"class":309},[29,82725,82704],{"class":103},[29,82727,12610],{"class":309},[29,82729,380],{"class":39},[29,82731,30626],{"class":309},[29,82733,82734],{"class":31,"line":67},[29,82735,82736],{"class":367},"\u002F\u002F Expected output: false\n",[19,82738,82740],{"className":50762,"code":82739,"language":50764,"meta":24,"style":24},"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",[26,82741,82742,82747,82752,82756,82761,82766],{"__ignoreMap":24},[29,82743,82744],{"class":31,"line":32},[29,82745,82746],{"class":309},"startsWith(searchString)\n",[29,82748,82749],{"class":31,"line":43},[29,82750,82751],{"class":309},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[29,82753,82754],{"class":31,"line":51},[29,82755,2575],{"emptyLinePlaceholder":233},[29,82757,82758],{"class":31,"line":59},[29,82759,82760],{"class":309},"const str3 = 'pink老师上课中'\n",[29,82762,82763],{"class":31,"line":67},[29,82764,82765],{"class":309},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[29,82767,82768],{"class":31,"line":75},[29,82769,82770],{"class":309},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23085,82772,82774],{"id":82773},"_410534-includes","4.10.5.3.4 includes",[171,82776,82777],{},"includes(searchString) includes(searchString, position)",[259,82779,82780],{},[178,82781,82782],{},"searchString:",[171,82784,82785,82786,82788,82789,82794,82795,82800,82801,21675,82804,82807,82808,82811],{},"一个要在 ",[26,82787,1477],{}," 中查找的字符串。",[546,82790,82793],{"href":82791,"rel":82792},"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",[24038],"不能是正则表达式","。所有非正则表达式的值都会被",[546,82796,82799],{"href":82797,"rel":82798},"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",[24038],"强制转换为字符串","，因此如果该参数被省略或传入 ",[26,82802,82803],{},"undefined",[26,82805,82806],{},"includes()"," 方法会在字符串中搜索 ",[26,82809,82810],{},"\"undefined\"","，这通常不是你想要的",[259,82813,82814],{"start":43},[178,82815,82816,1167],{},[26,82817,82818],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[171,82820,82821,82822,82825,82826],{},"在字符串中开始搜索 ",[26,82823,82824],{},"searchString"," 的位置。默认值为 ",[26,82827,499],{},[259,82829,82830],{"start":51},[178,82831,82832],{},"返回值：",[171,82834,82835,82836,82838,82839,82843,82844],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[26,82837,82824],{}," 为空字符串的情况），则返回 ",[457,82840,82841],{},[26,82842,1538],{}," ，否则返回 ",[457,82845,82846],{},[26,82847,66149],{},[259,82849,82850],{"start":59},[178,82851,82852],{},"异常：",[171,82854,82351,82855,13970,82857,82861],{},[26,82856,82824],{},[546,82858,82860],{"href":82791,"rel":82859},[24038],"是一个正则表达式","，则会抛出",[171,82863,82864],{},"只要是有就是true，不需要非得以谁开头结尾",[19,82866,82868],{"className":77624,"code":82867,"language":77626,"meta":24,"style":24},"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",[26,82869,82870,82881,82904,82923,82943,82965,82984],{"__ignoreMap":24},[29,82871,82872,82874,82876,82878],{"class":31,"line":32},[29,82873,6967],{"class":305},[29,82875,79904],{"class":309},[29,82877,355],{"class":305},[29,82879,82880],{"class":103}," \"To be, or not to be, that is the question.\"\n",[29,82882,82883,82885,82887,82890,82893,82895,82898,82901],{"class":31,"line":43},[29,82884,77661],{"class":309},[29,82886,58376],{"class":35},[29,82888,82889],{"class":309},"(str.",[29,82891,82892],{"class":35},"includes",[29,82894,310],{"class":309},[29,82896,82897],{"class":103},"\"To be\"",[29,82899,82900],{"class":309},"))",[29,82902,82903],{"class":367},"  \u002F\u002F true\n",[29,82905,82906,82908,82910,82912,82914,82916,82919,82921],{"class":31,"line":51},[29,82907,77661],{"class":309},[29,82909,58376],{"class":35},[29,82911,82889],{"class":309},[29,82913,82892],{"class":35},[29,82915,310],{"class":309},[29,82917,82918],{"class":103},"\"question\"",[29,82920,82900],{"class":309},[29,82922,82903],{"class":367},[29,82924,82925,82927,82929,82931,82933,82935,82938,82940],{"class":31,"line":59},[29,82926,77661],{"class":309},[29,82928,58376],{"class":35},[29,82930,82889],{"class":309},[29,82932,82892],{"class":35},[29,82934,310],{"class":309},[29,82936,82937],{"class":103},"\"nonexistent\"",[29,82939,82900],{"class":309},[29,82941,82942],{"class":367},"  \u002F\u002F false\n",[29,82944,82945,82947,82949,82951,82953,82955,82957,82959,82961,82963],{"class":31,"line":67},[29,82946,77661],{"class":309},[29,82948,58376],{"class":35},[29,82950,82889],{"class":309},[29,82952,82892],{"class":35},[29,82954,310],{"class":309},[29,82956,82897],{"class":103},[29,82958,12610],{"class":309},[29,82960,525],{"class":39},[29,82962,82900],{"class":309},[29,82964,82942],{"class":367},[29,82966,82967,82969,82971,82973,82975,82977,82980,82982],{"class":31,"line":75},[29,82968,77661],{"class":309},[29,82970,58376],{"class":35},[29,82972,82889],{"class":309},[29,82974,82892],{"class":35},[29,82976,310],{"class":309},[29,82978,82979],{"class":103},"\"TO BE\"",[29,82981,82900],{"class":309},[29,82983,82942],{"class":367},[29,82985,82986,82988,82990,82992,82994,82996,82998,83000],{"class":31,"line":83},[29,82987,77661],{"class":309},[29,82989,58376],{"class":35},[29,82991,82889],{"class":309},[29,82993,82892],{"class":35},[29,82995,310],{"class":309},[29,82997,7827],{"class":103},[29,82999,82900],{"class":309},[29,83001,82903],{"class":367},[23085,83003,83005],{"id":83004},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[19,83007,83009],{"className":53196,"code":83008,"language":53198,"meta":24,"style":24},"\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",[26,83010,83011,83019,83027,83032,83037,83042,83047,83052,83060],{"__ignoreMap":24},[29,83012,83013,83015,83017],{"class":31,"line":32},[29,83014,1218],{"class":309},[29,83016,51929],{"class":51429},[29,83018,51436],{"class":309},[29,83020,83021,83023,83025],{"class":31,"line":43},[29,83022,52273],{"class":309},[29,83024,51942],{"class":51429},[29,83026,51436],{"class":309},[29,83028,83029],{"class":31,"line":51},[29,83030,83031],{"class":309},"    const num = 10\n",[29,83033,83034],{"class":31,"line":59},[29,83035,83036],{"class":309},"    \u002F\u002F 强制转换\n",[29,83038,83039],{"class":31,"line":67},[29,83040,83041],{"class":309},"    console.log(String(num))\n",[29,83043,83044],{"class":31,"line":75},[29,83045,83046],{"class":309},"    \u002F\u002F toString()方法转换\n",[29,83048,83049],{"class":31,"line":83},[29,83050,83051],{"class":309},"    console.log(num.toString())\n",[29,83053,83054,83056,83058],{"class":31,"line":158},[29,83055,52546],{"class":309},[29,83057,51942],{"class":51429},[29,83059,51436],{"class":309},[29,83061,83062,83064,83066],{"class":31,"line":166},[29,83063,51914],{"class":309},[29,83065,51929],{"class":51429},[29,83067,51436],{"class":309},[23085,83069,83071],{"id":83070},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[171,83073,83074],{},[1638,83075],{"alt":24,"src":83076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[19,83078,83080],{"className":50762,"code":83079,"language":50764,"meta":24,"style":24},"\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",[26,83081,83082,83092,83106,83110,83118,83132,83152,83164,83172,83176,83184,83196,83204,83216,83221,83226,83231,83278,83294,83302,83310,83314],{"__ignoreMap":24},[29,83083,83084,83086,83088,83090],{"class":31,"line":32},[29,83085,51426],{"class":309},[29,83087,51430],{"class":51429},[29,83089,51433],{"class":35},[29,83091,51436],{"class":309},[29,83093,83094,83096,83098,83100,83102,83104],{"class":31,"line":43},[29,83095,1218],{"class":309},[29,83097,50764],{"class":51429},[29,83099,51445],{"class":35},[29,83101,355],{"class":309},[29,83103,51450],{"class":103},[29,83105,51436],{"class":309},[29,83107,83108],{"class":31,"line":51},[29,83109,2575],{"emptyLinePlaceholder":233},[29,83111,83112,83114,83116],{"class":31,"line":59},[29,83113,1218],{"class":309},[29,83115,51463],{"class":51429},[29,83117,51436],{"class":309},[29,83119,83120,83122,83124,83126,83128,83130],{"class":31,"line":67},[29,83121,52273],{"class":309},[29,83123,51473],{"class":51429},[29,83125,51476],{"class":35},[29,83127,355],{"class":309},[29,83129,51481],{"class":103},[29,83131,51436],{"class":309},[29,83133,83134,83136,83138,83140,83142,83144,83146,83148,83150],{"class":31,"line":75},[29,83135,52273],{"class":309},[29,83137,51473],{"class":51429},[29,83139,15095],{"class":35},[29,83141,355],{"class":309},[29,83143,51520],{"class":103},[29,83145,51500],{"class":35},[29,83147,355],{"class":309},[29,83149,51527],{"class":103},[29,83151,51436],{"class":309},[29,83153,83154,83156,83158,83160,83162],{"class":31,"line":83},[29,83155,52273],{"class":309},[29,83157,51536],{"class":51429},[29,83159,51539],{"class":309},[29,83161,51536],{"class":51429},[29,83163,51436],{"class":309},[29,83165,83166,83168,83170],{"class":31,"line":158},[29,83167,51914],{"class":309},[29,83169,51463],{"class":51429},[29,83171,51436],{"class":309},[29,83173,83174],{"class":31,"line":166},[29,83175,2575],{"emptyLinePlaceholder":233},[29,83177,83178,83180,83182],{"class":31,"line":1505},[29,83179,1218],{"class":309},[29,83181,51929],{"class":51429},[29,83183,51436],{"class":309},[29,83185,83186,83188,83190,83192,83194],{"class":31,"line":1788},[29,83187,52273],{"class":309},[29,83189,51740],{"class":51429},[29,83191,55443],{"class":309},[29,83193,51740],{"class":51429},[29,83195,51436],{"class":309},[29,83197,83198,83200,83202],{"class":31,"line":1793},[29,83199,52273],{"class":309},[29,83201,51942],{"class":51429},[29,83203,51436],{"class":309},[29,83205,83206,83208,83211,83213],{"class":31,"line":1799},[29,83207,11396],{"class":305},[29,83209,83210],{"class":39}," gift",[29,83212,13739],{"class":305},[29,83214,83215],{"class":103}," '50g的茶叶，清洗球'\n",[29,83217,83218],{"class":31,"line":1804},[29,83219,83220],{"class":367},"    \u002F\u002F 1.把字符串拆分为数组\n",[29,83222,83223],{"class":31,"line":1818},[29,83224,83225],{"class":367},"    \u002F\u002F console.log(gift.split(','))\n",[29,83227,83228],{"class":31,"line":1823},[29,83229,83230],{"class":367},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[29,83232,83233,83235,83237,83239,83242,83245,83247,83250,83252,83254,83256,83258,83260,83263,83265,83268,83270,83272,83274,83276],{"class":31,"line":1829},[29,83234,11396],{"class":305},[29,83236,74048],{"class":39},[29,83238,13739],{"class":305},[29,83240,83241],{"class":309}," gift.",[29,83243,83244],{"class":35},"split",[29,83246,310],{"class":309},[29,83248,83249],{"class":103},"'，'",[29,83251,30955],{"class":309},[29,83253,74173],{"class":35},[29,83255,310],{"class":309},[29,83257,79924],{"class":5391},[29,83259,79927],{"class":305},[29,83261,83262],{"class":103}," `\u003Cspan>【赠品】${",[29,83264,79924],{"class":309},[29,83266,83267],{"class":103},"}\u003C\u002Fspan>\u003Cbr>`",[29,83269,30955],{"class":309},[29,83271,74352],{"class":35},[29,83273,310],{"class":309},[29,83275,74357],{"class":103},[29,83277,316],{"class":309},[29,83279,83280,83282,83284,83286,83288,83290,83292],{"class":31,"line":1850},[29,83281,52536],{"class":309},[29,83283,54528],{"class":35},[29,83285,310],{"class":309},[29,83287,82060],{"class":103},[29,83289,74378],{"class":309},[29,83291,355],{"class":305},[29,83293,74114],{"class":309},[29,83295,83296,83298,83300],{"class":31,"line":1855},[29,83297,52546],{"class":309},[29,83299,51942],{"class":51429},[29,83301,51436],{"class":309},[29,83303,83304,83306,83308],{"class":31,"line":1869},[29,83305,51914],{"class":309},[29,83307,51929],{"class":51429},[29,83309,51436],{"class":309},[29,83311,83312],{"class":31,"line":1874},[29,83313,2575],{"emptyLinePlaceholder":233},[29,83315,83316,83318,83320],{"class":31,"line":1903},[29,83317,51914],{"class":309},[29,83319,50764],{"class":51429},[29,83321,51436],{"class":309},[22173,83323,83325],{"id":83324},"_41054-number","4.10.5.4 Number",[171,83327,83328],{},[1638,83329],{"alt":24,"src":83330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[171,83332,83333],{},"整数也可以进行toFixed来保留小数",[171,83335,83336],{},"比如：",[171,83338,83339],{},"const price=10",[171,83341,83342],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22173,83344,83346],{"id":83345},"_41055-购物车展示","4.10.5.5 购物车展示",[171,83348,83349],{},[1638,83350],{"alt":24,"src":83351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[19,83353,83355],{"className":50762,"code":83354,"language":50764,"meta":24,"style":24},"\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",[26,83356,83357,83367,83381,83385,83393,83407,83427,83439,83447,83453,83463,83473,83483,83487,83491,83497,83509,83523,83527,83531,83537,83549,83565,83575,83591,83595,83599,83605,83615,83625,83629,83633,83641,83653,83665,83677,83681,83685,83693,83705,83709,83713,83724,83734,83746,83758,83768,83772,83776,83784,83793,83805,83815,83825,83829,83833,83841,83850,83857,83867,83879,83883,83887,83896,83906,83917,83929,83941,83945,83949,83958,83968,83979,83983,83987,83993,84005,84017,84027,84037,84055,84067,84071,84075,84084,84096,84106,84116,84128,84132,84140,84148,84152,84160,84174,84182,84196,84224,84232,84240,84250,84254,84262,84270,84279,84287,84296,84306,84310,84314,84322,84330,84339,84347,84355,84368,84372,84376,84384,84392,84401,84409,84417,84432,84436,84440,84448,84456,84465,84473,84481,84495,84503,84507,84511,84516,84542,84547,84584,84589,84612,84617,84671,84676,84712,84716,84722,84727,84736,84750,84759,84778,84787,84797,84802,84807,84820,84825,84879,84905,84913,84921,84925],{"__ignoreMap":24},[29,83358,83359,83361,83363,83365],{"class":31,"line":32},[29,83360,51426],{"class":309},[29,83362,51430],{"class":51429},[29,83364,51433],{"class":35},[29,83366,51436],{"class":309},[29,83368,83369,83371,83373,83375,83377,83379],{"class":31,"line":43},[29,83370,1218],{"class":309},[29,83372,50764],{"class":51429},[29,83374,51445],{"class":35},[29,83376,355],{"class":309},[29,83378,51450],{"class":103},[29,83380,51436],{"class":309},[29,83382,83383],{"class":31,"line":51},[29,83384,2575],{"emptyLinePlaceholder":233},[29,83386,83387,83389,83391],{"class":31,"line":59},[29,83388,1218],{"class":309},[29,83390,51463],{"class":51429},[29,83392,51436],{"class":309},[29,83394,83395,83397,83399,83401,83403,83405],{"class":31,"line":67},[29,83396,52273],{"class":309},[29,83398,51473],{"class":51429},[29,83400,51476],{"class":35},[29,83402,355],{"class":309},[29,83404,51481],{"class":103},[29,83406,51436],{"class":309},[29,83408,83409,83411,83413,83415,83417,83419,83421,83423,83425],{"class":31,"line":75},[29,83410,52273],{"class":309},[29,83412,51473],{"class":51429},[29,83414,15095],{"class":35},[29,83416,355],{"class":309},[29,83418,51520],{"class":103},[29,83420,51500],{"class":35},[29,83422,355],{"class":309},[29,83424,51527],{"class":103},[29,83426,51436],{"class":309},[29,83428,83429,83431,83433,83435,83437],{"class":31,"line":83},[29,83430,52273],{"class":309},[29,83432,51536],{"class":51429},[29,83434,51539],{"class":309},[29,83436,51536],{"class":51429},[29,83438,51436],{"class":309},[29,83440,83441,83443,83445],{"class":31,"line":158},[29,83442,52273],{"class":309},[29,83444,223],{"class":51429},[29,83446,51436],{"class":309},[29,83448,83449,83451],{"class":31,"line":166},[29,83450,6578],{"class":51429},[29,83452,15747],{"class":309},[29,83454,83455,83457,83459,83461],{"class":31,"line":1505},[29,83456,54824],{"class":39},[29,83458,51566],{"class":309},[29,83460,499],{"class":39},[29,83462,1468],{"class":309},[29,83464,83465,83467,83469,83471],{"class":31,"line":1788},[29,83466,54835],{"class":39},[29,83468,51566],{"class":309},[29,83470,499],{"class":39},[29,83472,1468],{"class":309},[29,83474,83475,83477,83479,83481],{"class":31,"line":1793},[29,83476,72725],{"class":39},[29,83478,51566],{"class":309},[29,83480,60634],{"class":39},[29,83482,1468],{"class":309},[29,83484,83485],{"class":31,"line":1799},[29,83486,2362],{"class":309},[29,83488,83489],{"class":31,"line":1804},[29,83490,2575],{"emptyLinePlaceholder":233},[29,83492,83493,83495],{"class":31,"line":1818},[29,83494,62252],{"class":35},[29,83496,15747],{"class":309},[29,83498,83499,83501,83503,83505,83507],{"class":31,"line":1823},[29,83500,54900],{"class":39},[29,83502,51566],{"class":309},[29,83504,78703],{"class":39},[29,83506,51621],{"class":305},[29,83508,1468],{"class":309},[29,83510,83511,83513,83515,83517,83519,83521],{"class":31,"line":1829},[29,83512,54835],{"class":39},[29,83514,51566],{"class":309},[29,83516,619],{"class":39},[29,83518,51621],{"class":305},[29,83520,51685],{"class":39},[29,83522,1468],{"class":309},[29,83524,83525],{"class":31,"line":1850},[29,83526,2362],{"class":309},[29,83528,83529],{"class":31,"line":1855},[29,83530,2575],{"emptyLinePlaceholder":233},[29,83532,83533,83535],{"class":31,"line":1869},[29,83534,78754],{"class":35},[29,83536,15747],{"class":309},[29,83538,83539,83541,83543,83545,83547],{"class":31,"line":1874},[29,83540,54824],{"class":39},[29,83542,51566],{"class":309},[29,83544,883],{"class":39},[29,83546,51621],{"class":305},[29,83548,1468],{"class":309},[29,83550,83551,83553,83555,83557,83559,83561,83563],{"class":31,"line":1903},[29,83552,61989],{"class":39},[29,83554,51566],{"class":309},[29,83556,28250],{"class":39},[29,83558,78809],{"class":39},[29,83560,78812],{"class":39},[29,83562,1003],{"class":305},[29,83564,1468],{"class":309},[29,83566,83567,83569,83571,83573],{"class":31,"line":1908},[29,83568,55138],{"class":39},[29,83570,51566],{"class":309},[29,83572,51606],{"class":39},[29,83574,1468],{"class":309},[29,83576,83577,83579,83581,83583,83585,83587,83589],{"class":31,"line":1925},[29,83578,62106],{"class":39},[29,83580,51566],{"class":309},[29,83582,525],{"class":39},[29,83584,51621],{"class":305},[29,83586,51650],{"class":39},[29,83588,62373],{"class":39},[29,83590,1468],{"class":309},[29,83592,83593],{"class":31,"line":1930},[29,83594,2362],{"class":309},[29,83596,83597],{"class":31,"line":1935},[29,83598,2575],{"emptyLinePlaceholder":233},[29,83600,83601,83603],{"class":31,"line":1940},[29,83602,78872],{"class":35},[29,83604,15747],{"class":309},[29,83606,83607,83609,83611,83613],{"class":31,"line":1954},[29,83608,62154],{"class":39},[29,83610,51566],{"class":309},[29,83612,62159],{"class":39},[29,83614,1468],{"class":309},[29,83616,83617,83619,83621,83623],{"class":31,"line":1959},[29,83618,55013],{"class":39},[29,83620,51566],{"class":309},[29,83622,61947],{"class":39},[29,83624,1468],{"class":309},[29,83626,83627],{"class":31,"line":2752},[29,83628,2362],{"class":309},[29,83630,83631],{"class":31,"line":2766},[29,83632,2575],{"emptyLinePlaceholder":233},[29,83634,83635,83637,83639],{"class":31,"line":2774},[29,83636,78754],{"class":35},[29,83638,55744],{"class":51429},[29,83640,15747],{"class":309},[29,83642,83643,83645,83647,83649,83651],{"class":31,"line":2779},[29,83644,54900],{"class":39},[29,83646,51566],{"class":309},[29,83648,920],{"class":39},[29,83650,51621],{"class":305},[29,83652,1468],{"class":309},[29,83654,83655,83657,83659,83661,83663],{"class":31,"line":2785},[29,83656,54914],{"class":39},[29,83658,51566],{"class":309},[29,83660,920],{"class":39},[29,83662,51621],{"class":305},[29,83664,1468],{"class":309},[29,83666,83667,83669,83671,83673,83675],{"class":31,"line":2791},[29,83668,61879],{"class":39},[29,83670,51566],{"class":309},[29,83672,627],{"class":39},[29,83674,51621],{"class":305},[29,83676,1468],{"class":309},[29,83678,83679],{"class":31,"line":2796},[29,83680,2362],{"class":309},[29,83682,83683],{"class":31,"line":8123},[29,83684,2575],{"emptyLinePlaceholder":233},[29,83686,83687,83689,83691],{"class":31,"line":8147},[29,83688,78754],{"class":35},[29,83690,62433],{"class":35},[29,83692,15747],{"class":309},[29,83694,83695,83697,83699,83701,83703],{"class":31,"line":8152},[29,83696,54900],{"class":39},[29,83698,51566],{"class":309},[29,83700,1898],{"class":39},[29,83702,51621],{"class":305},[29,83704,1468],{"class":309},[29,83706,83707],{"class":31,"line":8158},[29,83708,2362],{"class":309},[29,83710,83711],{"class":31,"line":8185},[29,83712,2575],{"emptyLinePlaceholder":233},[29,83714,83715,83717,83719,83722],{"class":31,"line":8190},[29,83716,78754],{"class":35},[29,83718,62433],{"class":35},[29,83720,83721],{"class":35}," .tag",[29,83723,15747],{"class":309},[29,83725,83726,83728,83730,83732],{"class":31,"line":8196},[29,83727,55138],{"class":39},[29,83729,51566],{"class":309},[29,83731,60998],{"class":39},[29,83733,1468],{"class":309},[29,83735,83736,83738,83740,83742,83744],{"class":31,"line":8208},[29,83737,54824],{"class":39},[29,83739,51566],{"class":309},[29,83741,386],{"class":39},[29,83743,51621],{"class":305},[29,83745,1468],{"class":309},[29,83747,83748,83750,83752,83754,83756],{"class":31,"line":8220},[29,83749,55051],{"class":39},[29,83751,51566],{"class":309},[29,83753,806],{"class":39},[29,83755,51621],{"class":305},[29,83757,1468],{"class":309},[29,83759,83760,83762,83764,83766],{"class":31,"line":8232},[29,83761,57545],{"class":39},[29,83763,51566],{"class":309},[29,83765,62199],{"class":39},[29,83767,1468],{"class":309},[29,83769,83770],{"class":31,"line":9891},[29,83771,2362],{"class":309},[29,83773,83774],{"class":31,"line":9916},[29,83775,2575],{"emptyLinePlaceholder":233},[29,83777,83778,83780,83782],{"class":31,"line":9939},[29,83779,78754],{"class":35},[29,83781,79046],{"class":35},[29,83783,31595],{"class":309},[29,83785,83786,83788,83791],{"class":31,"line":9963},[29,83787,78754],{"class":35},[29,83789,83790],{"class":35}," .sub-total",[29,83792,15747],{"class":309},[29,83794,83795,83797,83799,83801,83803],{"class":31,"line":9968},[29,83796,55051],{"class":39},[29,83798,51566],{"class":309},[29,83800,958],{"class":39},[29,83802,51621],{"class":305},[29,83804,1468],{"class":309},[29,83806,83807,83809,83811,83813],{"class":31,"line":9973},[29,83808,57545],{"class":39},[29,83810,51566],{"class":309},[29,83812,79069],{"class":39},[29,83814,1468],{"class":309},[29,83816,83817,83819,83821,83823],{"class":31,"line":9978},[29,83818,61966],{"class":39},[29,83820,51566],{"class":309},[29,83822,525],{"class":39},[29,83824,1468],{"class":309},[29,83826,83827],{"class":31,"line":9987},[29,83828,2362],{"class":309},[29,83830,83831],{"class":31,"line":9992},[29,83832,2575],{"emptyLinePlaceholder":233},[29,83834,83835,83837,83839],{"class":31,"line":9998},[29,83836,78754],{"class":35},[29,83838,79086],{"class":35},[29,83840,31595],{"class":309},[29,83842,83843,83845,83848],{"class":31,"line":10019},[29,83844,78754],{"class":35},[29,83846,83847],{"class":35}," .sub-total::before",[29,83849,31595],{"class":309},[29,83851,83852,83855],{"class":31,"line":10025},[29,83853,83854],{"class":35},"    .amount::before",[29,83856,15747],{"class":309},[29,83858,83859,83861,83863,83865],{"class":31,"line":10039},[29,83860,79093],{"class":39},[29,83862,51566],{"class":309},[29,83864,79098],{"class":103},[29,83866,1468],{"class":309},[29,83868,83869,83871,83873,83875,83877],{"class":31,"line":10045},[29,83870,55051],{"class":39},[29,83872,51566],{"class":309},[29,83874,806],{"class":39},[29,83876,51621],{"class":305},[29,83878,1468],{"class":309},[29,83880,83881],{"class":31,"line":10072},[29,83882,2362],{"class":309},[29,83884,83885],{"class":31,"line":10081},[29,83886,2575],{"emptyLinePlaceholder":233},[29,83888,83889,83891,83894],{"class":31,"line":10087},[29,83890,78754],{"class":35},[29,83892,83893],{"class":35}," .spec",[29,83895,15747],{"class":309},[29,83897,83898,83900,83902,83904],{"class":31,"line":10095},[29,83899,61966],{"class":39},[29,83901,51566],{"class":309},[29,83903,386],{"class":39},[29,83905,1468],{"class":309},[29,83907,83908,83910,83912,83915],{"class":31,"line":10100},[29,83909,57545],{"class":39},[29,83911,51566],{"class":309},[29,83913,83914],{"class":39},"#888",[29,83916,1468],{"class":309},[29,83918,83919,83921,83923,83925,83927],{"class":31,"line":16779},[29,83920,55051],{"class":39},[29,83922,51566],{"class":309},[29,83924,857],{"class":39},[29,83926,51621],{"class":305},[29,83928,1468],{"class":309},[29,83930,83931,83933,83935,83937,83939],{"class":31,"line":16785},[29,83932,62129],{"class":39},[29,83934,51566],{"class":309},[29,83936,1008],{"class":39},[29,83938,51621],{"class":305},[29,83940,1468],{"class":309},[29,83942,83943],{"class":31,"line":16808},[29,83944,2362],{"class":309},[29,83946,83947],{"class":31,"line":16814},[29,83948,2575],{"emptyLinePlaceholder":233},[29,83950,83951,83953,83956],{"class":31,"line":16837},[29,83952,78754],{"class":35},[29,83954,83955],{"class":35}," .count",[29,83957,15747],{"class":309},[29,83959,83960,83962,83964,83966],{"class":31,"line":16851},[29,83961,61966],{"class":39},[29,83963,51566],{"class":309},[29,83965,525],{"class":39},[29,83967,1468],{"class":309},[29,83969,83970,83972,83974,83977],{"class":31,"line":16871},[29,83971,57545],{"class":39},[29,83973,51566],{"class":309},[29,83975,83976],{"class":39},"#aaa",[29,83978,1468],{"class":309},[29,83980,83981],{"class":31,"line":16877},[29,83982,2362],{"class":309},[29,83984,83985],{"class":31,"line":16888},[29,83986,2575],{"emptyLinePlaceholder":233},[29,83988,83989,83991],{"class":31,"line":16911},[29,83990,72604],{"class":35},[29,83992,15747],{"class":309},[29,83994,83995,83997,83999,84001,84003],{"class":31,"line":16933},[29,83996,54900],{"class":39},[29,83998,51566],{"class":309},[29,84000,78703],{"class":39},[29,84002,51621],{"class":305},[29,84004,1468],{"class":309},[29,84006,84007,84009,84011,84013,84015],{"class":31,"line":16938},[29,84008,54835],{"class":39},[29,84010,51566],{"class":309},[29,84012,499],{"class":39},[29,84014,51685],{"class":39},[29,84016,1468],{"class":309},[29,84018,84019,84021,84023,84025],{"class":31,"line":16944},[29,84020,55138],{"class":39},[29,84022,51566],{"class":309},[29,84024,51606],{"class":39},[29,84026,1468],{"class":309},[29,84028,84029,84031,84033,84035],{"class":31,"line":16958},[29,84030,55149],{"class":39},[29,84032,51566],{"class":309},[29,84034,51709],{"class":39},[29,84036,1468],{"class":309},[29,84038,84039,84042,84044,84046,84048,84050,84053],{"class":31,"line":16971},[29,84040,84041],{"class":39},"      border-top",[29,84043,51566],{"class":309},[29,84045,525],{"class":39},[29,84047,51621],{"class":305},[29,84049,51650],{"class":39},[29,84051,84052],{"class":39}," #4e4e4e",[29,84054,1468],{"class":309},[29,84056,84057,84059,84061,84063,84065],{"class":31,"line":16976},[29,84058,54824],{"class":39},[29,84060,51566],{"class":309},[29,84062,1008],{"class":39},[29,84064,51621],{"class":305},[29,84066,1468],{"class":309},[29,84068,84069],{"class":31,"line":16990},[29,84070,2362],{"class":309},[29,84072,84073],{"class":31,"line":16995},[29,84074,2575],{"emptyLinePlaceholder":233},[29,84076,84077,84079,84082],{"class":31,"line":17001},[29,84078,72604],{"class":35},[29,84080,84081],{"class":35}," .amount",[29,84083,15747],{"class":309},[29,84085,84086,84088,84090,84092,84094],{"class":31,"line":17006},[29,84087,55051],{"class":39},[29,84089,51566],{"class":309},[29,84091,958],{"class":39},[29,84093,51621],{"class":305},[29,84095,1468],{"class":309},[29,84097,84098,84100,84102,84104],{"class":31,"line":17020},[29,84099,57545],{"class":39},[29,84101,51566],{"class":309},[29,84103,79069],{"class":39},[29,84105,1468],{"class":309},[29,84107,84108,84110,84112,84114],{"class":31,"line":17025},[29,84109,62463],{"class":39},[29,84111,51566],{"class":309},[29,84113,51618],{"class":39},[29,84115,1468],{"class":309},[29,84117,84118,84120,84122,84124,84126],{"class":31,"line":17030},[29,84119,61879],{"class":39},[29,84121,51566],{"class":309},[29,84123,964],{"class":39},[29,84125,51621],{"class":305},[29,84127,1468],{"class":309},[29,84129,84130],{"class":31,"line":17044},[29,84131,2362],{"class":309},[29,84133,84134,84136,84138],{"class":31,"line":17056},[29,84135,52546],{"class":309},[29,84137,223],{"class":51429},[29,84139,51436],{"class":309},[29,84141,84142,84144,84146],{"class":31,"line":17061},[29,84143,51914],{"class":309},[29,84145,51463],{"class":51429},[29,84147,51436],{"class":309},[29,84149,84150],{"class":31,"line":17074},[29,84151,2575],{"emptyLinePlaceholder":233},[29,84153,84154,84156,84158],{"class":31,"line":17079},[29,84155,1218],{"class":309},[29,84157,51929],{"class":51429},[29,84159,51436],{"class":309},[29,84161,84162,84164,84166,84168,84170,84172],{"class":31,"line":17084},[29,84163,52273],{"class":309},[29,84165,51740],{"class":51429},[29,84167,53615],{"class":35},[29,84169,355],{"class":309},[29,84171,62737],{"class":103},[29,84173,51436],{"class":309},[29,84175,84176,84178,84180],{"class":31,"line":17089},[29,84177,52546],{"class":309},[29,84179,51740],{"class":51429},[29,84181,51436],{"class":309},[29,84183,84184,84186,84188,84190,84192,84194],{"class":31,"line":17102},[29,84185,52273],{"class":309},[29,84187,51740],{"class":51429},[29,84189,53615],{"class":35},[29,84191,355],{"class":309},[29,84193,62709],{"class":103},[29,84195,51436],{"class":309},[29,84197,84198,84200,84202,84205,84207,84209,84211,84214,84216,84218,84220,84222],{"class":31,"line":17107},[29,84199,51470],{"class":309},[29,84201,51740],{"class":51429},[29,84203,84204],{"class":309},">合计：\u003C",[29,84206,29],{"class":51429},[29,84208,53615],{"class":35},[29,84210,355],{"class":309},[29,84212,84213],{"class":103},"\"amount\"",[29,84215,55443],{"class":309},[29,84217,29],{"class":51429},[29,84219,55443],{"class":309},[29,84221,51740],{"class":51429},[29,84223,51436],{"class":309},[29,84225,84226,84228,84230],{"class":31,"line":32762},[29,84227,52546],{"class":309},[29,84229,51740],{"class":51429},[29,84231,51436],{"class":309},[29,84233,84234,84236,84238],{"class":31,"line":32768},[29,84235,52273],{"class":309},[29,84237,51942],{"class":51429},[29,84239,51436],{"class":309},[29,84241,84242,84244,84246,84248],{"class":31,"line":32774},[29,84243,11396],{"class":305},[29,84245,79506],{"class":39},[29,84247,13739],{"class":305},[29,84249,55576],{"class":309},[29,84251,84252],{"class":31,"line":32780},[29,84253,79515],{"class":309},[29,84255,84256,84258,84260],{"class":31,"line":32786},[29,84257,79520],{"class":309},[29,84259,79523],{"class":103},[29,84261,31595],{"class":309},[29,84263,84264,84266,84268],{"class":31,"line":32797},[29,84265,79530],{"class":309},[29,84267,79533],{"class":103},[29,84269,31595],{"class":309},[29,84271,84272,84274,84277],{"class":31,"line":32803},[29,84273,79540],{"class":309},[29,84275,84276],{"class":39},"289.9",[29,84278,31595],{"class":309},[29,84280,84281,84283,84285],{"class":31,"line":32823},[29,84282,79550],{"class":309},[29,84284,79553],{"class":103},[29,84286,31595],{"class":309},[29,84288,84289,84292,84294],{"class":31,"line":32829},[29,84290,84291],{"class":309},"        count: ",[29,84293,386],{"class":39},[29,84295,31595],{"class":309},[29,84297,84298,84301,84304],{"class":31,"line":32840},[29,84299,84300],{"class":309},"        spec: { color: ",[29,84302,84303],{"class":103},"'白色'",[29,84305,55733],{"class":309},[29,84307,84308],{"class":31,"line":32846},[29,84309,78021],{"class":309},[29,84311,84312],{"class":31,"line":32852},[29,84313,79515],{"class":309},[29,84315,84316,84318,84320],{"class":31,"line":32858},[29,84317,79520],{"class":309},[29,84319,79614],{"class":103},[29,84321,31595],{"class":309},[29,84323,84324,84326,84328],{"class":31,"line":32864},[29,84325,79530],{"class":309},[29,84327,79623],{"class":103},[29,84329,31595],{"class":309},[29,84331,84332,84334,84337],{"class":31,"line":32870},[29,84333,79540],{"class":309},[29,84335,84336],{"class":39},"109.8",[29,84338,31595],{"class":309},[29,84340,84341,84343,84345],{"class":31,"line":32876},[29,84342,79550],{"class":309},[29,84344,79641],{"class":103},[29,84346,31595],{"class":309},[29,84348,84349,84351,84353],{"class":31,"line":32882},[29,84350,84291],{"class":309},[29,84352,380],{"class":39},[29,84354,31595],{"class":309},[29,84356,84357,84360,84362,84364,84366],{"class":31,"line":32902},[29,84358,84359],{"class":309},"        spec: { size: ",[29,84361,82032],{"class":103},[29,84363,55593],{"class":309},[29,84365,82037],{"class":103},[29,84367,55733],{"class":309},[29,84369,84370],{"class":31,"line":32908},[29,84371,78021],{"class":309},[29,84373,84374],{"class":31,"line":32924},[29,84375,79515],{"class":309},[29,84377,84378,84380,84382],{"class":31,"line":32930},[29,84379,79520],{"class":309},[29,84381,79658],{"class":103},[29,84383,31595],{"class":309},[29,84385,84386,84388,84390],{"class":31,"line":32944},[29,84387,79530],{"class":309},[29,84389,79667],{"class":103},[29,84391,31595],{"class":309},[29,84393,84394,84396,84399],{"class":31,"line":32950},[29,84395,79540],{"class":309},[29,84397,84398],{"class":39},"488",[29,84400,31595],{"class":309},[29,84402,84403,84405,84407],{"class":31,"line":32965},[29,84404,79550],{"class":309},[29,84406,79685],{"class":103},[29,84408,31595],{"class":309},[29,84410,84411,84413,84415],{"class":31,"line":32971},[29,84412,84291],{"class":309},[29,84414,525],{"class":39},[29,84416,31595],{"class":309},[29,84418,84419,84421,84424,84427,84430],{"class":31,"line":32980},[29,84420,84300],{"class":309},[29,84422,84423],{"class":103},"'青色'",[29,84425,84426],{"class":309},", sum: ",[29,84428,84429],{"class":103},"'一大四小'",[29,84431,55733],{"class":309},[29,84433,84434],{"class":31,"line":32986},[29,84435,78021],{"class":309},[29,84437,84438],{"class":31,"line":32995},[29,84439,79515],{"class":309},[29,84441,84442,84444,84446],{"class":31,"line":33001},[29,84443,79520],{"class":309},[29,84445,79702],{"class":103},[29,84447,31595],{"class":309},[29,84449,84450,84452,84454],{"class":31,"line":33007},[29,84451,79530],{"class":309},[29,84453,79711],{"class":103},[29,84455,31595],{"class":309},[29,84457,84458,84460,84463],{"class":31,"line":33016},[29,84459,79540],{"class":309},[29,84461,84462],{"class":39},"139",[29,84464,31595],{"class":309},[29,84466,84467,84469,84471],{"class":31,"line":33022},[29,84468,79550],{"class":309},[29,84470,79729],{"class":103},[29,84472,31595],{"class":309},[29,84474,84475,84477,84479],{"class":31,"line":33033},[29,84476,84291],{"class":309},[29,84478,525],{"class":39},[29,84480,31595],{"class":309},[29,84482,84483,84485,84488,84490,84493],{"class":31,"line":33039},[29,84484,84359],{"class":309},[29,84486,84487],{"class":103},"'小号'",[29,84489,55593],{"class":309},[29,84491,84492],{"class":103},"'紫色'",[29,84494,55599],{"class":309},[29,84496,84497,84500],{"class":31,"line":33058},[29,84498,84499],{"class":309},"        gift: ",[29,84501,84502],{"class":103},"'50g茶叶,清洗球'\n",[29,84504,84505],{"class":31,"line":33064},[29,84506,52527],{"class":309},[29,84508,84509],{"class":31,"line":33075},[29,84510,53238],{"class":309},[29,84512,84513],{"class":31,"line":33081},[29,84514,84515],{"class":367},"    \u002F\u002F  1.根据数据渲染页面\n",[29,84517,84518,84520,84522,84524,84526,84528,84530,84532,84534,84536,84538,84540],{"class":31,"line":33101},[29,84519,52536],{"class":309},[29,84521,54528],{"class":35},[29,84523,310],{"class":309},[29,84525,80030],{"class":103},[29,84527,74378],{"class":309},[29,84529,355],{"class":305},[29,84531,80177],{"class":309},[29,84533,74173],{"class":35},[29,84535,310],{"class":309},[29,84537,79924],{"class":5391},[29,84539,79927],{"class":305},[29,84541,15747],{"class":309},[29,84543,84544],{"class":31,"line":33117},[29,84545,84546],{"class":367},"      \u002F\u002F 对象解构\n",[29,84548,84549,84551,84553,84555,84557,84559,84561,84564,84566,84568,84570,84573,84575,84578,84580,84582],{"class":31,"line":33123},[29,84550,58357],{"class":305},[29,84552,79936],{"class":309},[29,84554,79949],{"class":39},[29,84556,12610],{"class":309},[29,84558,79939],{"class":39},[29,84560,12610],{"class":309},[29,84562,84563],{"class":39},"count",[29,84565,12610],{"class":309},[29,84567,79944],{"class":39},[29,84569,12610],{"class":309},[29,84571,84572],{"class":39},"spec",[29,84574,12610],{"class":309},[29,84576,84577],{"class":39},"gift",[29,84579,79952],{"class":309},[29,84581,355],{"class":305},[29,84583,79957],{"class":309},[29,84585,84586],{"class":31,"line":33137},[29,84587,84588],{"class":367},"      \u002F\u002F 规格文字模块处理\n",[29,84590,84591,84593,84596,84598,84600,84602,84604,84606,84608,84610],{"class":31,"line":33143},[29,84592,58357],{"class":305},[29,84594,84595],{"class":39}," text",[29,84597,13739],{"class":305},[29,84599,82067],{"class":309},[29,84601,82070],{"class":35},[29,84603,82073],{"class":309},[29,84605,74352],{"class":35},[29,84607,310],{"class":309},[29,84609,82080],{"class":103},[29,84611,316],{"class":309},[29,84613,84614],{"class":31,"line":33149},[29,84615,84616],{"class":367},"      \u002F\u002F 处理赠品模块\n",[29,84618,84619,84621,84623,84625,84628,84630,84632,84634,84636,84639,84641,84643,84645,84647,84649,84652,84654,84657,84659,84661,84663,84665,84667,84669],{"class":31,"line":33160},[29,84620,58357],{"class":305},[29,84622,74048],{"class":39},[29,84624,13739],{"class":305},[29,84626,84627],{"class":309}," gift ",[29,84629,1294],{"class":305},[29,84631,83241],{"class":309},[29,84633,83244],{"class":35},[29,84635,310],{"class":309},[29,84637,84638],{"class":103},"','",[29,84640,30955],{"class":309},[29,84642,74173],{"class":35},[29,84644,310],{"class":309},[29,84646,79924],{"class":5391},[29,84648,79927],{"class":305},[29,84650,84651],{"class":103}," `\u003Cspan class=\"tag\">【赠品】${",[29,84653,79924],{"class":309},[29,84655,84656],{"class":103},"}\u003C\u002Fspan>`",[29,84658,30955],{"class":309},[29,84660,74352],{"class":35},[29,84662,310],{"class":309},[29,84664,74357],{"class":103},[29,84666,13889],{"class":309},[29,84668,1167],{"class":305},[29,84670,70233],{"class":103},[29,84672,84673],{"class":31,"line":33166},[29,84674,84675],{"class":367},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[29,84677,84678,84680,84683,84685,84688,84690,84692,84694,84697,84699,84701,84703,84706,84708,84710],{"class":31,"line":33172},[29,84679,58357],{"class":305},[29,84681,84682],{"class":39}," subtotal",[29,84684,13739],{"class":305},[29,84686,84687],{"class":309}," ((price ",[29,84689,763],{"class":305},[29,84691,5929],{"class":39},[29,84693,6693],{"class":305},[29,84695,84696],{"class":309}," count) ",[29,84698,892],{"class":305},[29,84700,5929],{"class":39},[29,84702,30955],{"class":309},[29,84704,84705],{"class":35},"toFixed",[29,84707,310],{"class":309},[29,84709,386],{"class":39},[29,84711,316],{"class":309},[29,84713,84714],{"class":31,"line":33182},[29,84715,2575],{"emptyLinePlaceholder":233},[29,84717,84718,84720],{"class":31,"line":33188},[29,84719,74111],{"class":305},[29,84721,70297],{"class":103},[29,84723,84724],{"class":31,"line":33199},[29,84725,84726],{"class":103},"        \u003Cdiv class=\"item\">\n",[29,84728,84729,84732,84734],{"class":31,"line":33205},[29,84730,84731],{"class":103},"          \u003Cimg src=\"${",[29,84733,79949],{"class":309},[29,84735,79981],{"class":103},[29,84737,84738,84741,84743,84746,84748],{"class":31,"line":33215},[29,84739,84740],{"class":103},"          \u003Cp class=\"name\">${",[29,84742,79939],{"class":309},[29,84744,84745],{"class":103},"}${",[29,84747,1477],{"class":309},[29,84749,79991],{"class":103},[29,84751,84752,84755,84757],{"class":31,"line":33220},[29,84753,84754],{"class":103},"          \u003Cp class=\"spec\">${",[29,84756,5362],{"class":309},[29,84758,79991],{"class":103},[29,84760,84761,84764,84766,84768,84770,84772,84774,84776],{"class":31,"line":33226},[29,84762,84763],{"class":103},"          \u003Cp class=\"price\">${",[29,84765,79944],{"class":309},[29,84767,866],{"class":103},[29,84769,84705],{"class":35},[29,84771,310],{"class":103},[29,84773,386],{"class":39},[29,84775,737],{"class":103},[29,84777,79991],{"class":103},[29,84779,84780,84783,84785],{"class":31,"line":33275},[29,84781,84782],{"class":103},"          \u003Cp class=\"count\">x${",[29,84784,84563],{"class":309},[29,84786,79991],{"class":103},[29,84788,84789,84792,84795],{"class":31,"line":33322},[29,84790,84791],{"class":103},"          \u003Cp class=\"sub-total\">${",[29,84793,84794],{"class":309},"subtotal",[29,84796,79991],{"class":103},[29,84798,84799],{"class":31,"line":33327},[29,84800,84801],{"class":103},"        \u003C\u002Fdiv> \n",[29,84803,84804],{"class":31,"line":33333},[29,84805,84806],{"class":103},"             `\n",[29,84808,84809,84812,84814,84816,84818],{"class":31,"line":33352},[29,84810,84811],{"class":309},"    }).",[29,84813,74352],{"class":35},[29,84815,310],{"class":309},[29,84817,74357],{"class":103},[29,84819,316],{"class":309},[29,84821,84822],{"class":31,"line":33358},[29,84823,84824],{"class":367},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[29,84826,84827,84829,84831,84833,84835,84838,84840,84843,84845,84847,84849,84852,84855,84857,84860,84862,84864,84866,84869,84871,84873,84875,84877],{"class":31,"line":33378},[29,84828,11396],{"class":305},[29,84830,62914],{"class":39},[29,84832,13739],{"class":305},[29,84834,80177],{"class":309},[29,84836,84837],{"class":35},"reduce",[29,84839,2551],{"class":309},[29,84841,84842],{"class":5391},"prev",[29,84844,12610],{"class":309},[29,84846,79924],{"class":5391},[29,84848,13889],{"class":309},[29,84850,84851],{"class":305},"=>",[29,84853,84854],{"class":309}," prev ",[29,84856,789],{"class":305},[29,84858,84859],{"class":309}," (item.price ",[29,84861,763],{"class":305},[29,84863,5929],{"class":39},[29,84865,6693],{"class":305},[29,84867,84868],{"class":309}," item.count) ",[29,84870,892],{"class":305},[29,84872,5929],{"class":39},[29,84874,12610],{"class":309},[29,84876,499],{"class":39},[29,84878,316],{"class":309},[29,84880,84881,84883,84885,84887,84890,84892,84894,84897,84899,84901,84903],{"class":31,"line":33384},[29,84882,52536],{"class":309},[29,84884,54528],{"class":35},[29,84886,310],{"class":309},[29,84888,84889],{"class":103},"'.amount'",[29,84891,74378],{"class":309},[29,84893,355],{"class":305},[29,84895,84896],{"class":309}," total.",[29,84898,84705],{"class":35},[29,84900,310],{"class":309},[29,84902,386],{"class":39},[29,84904,316],{"class":309},[29,84906,84907,84909,84911],{"class":31,"line":33390},[29,84908,52546],{"class":309},[29,84910,51942],{"class":51429},[29,84912,51436],{"class":309},[29,84914,84915,84917,84919],{"class":31,"line":33400},[29,84916,51914],{"class":309},[29,84918,51929],{"class":51429},[29,84920,51436],{"class":309},[29,84922,84923],{"class":31,"line":33405},[29,84924,2575],{"emptyLinePlaceholder":233},[29,84926,84927,84929,84931],{"class":31,"line":33411},[29,84928,51914],{"class":309},[29,84930,50764],{"class":51429},[29,84932,51436],{"class":309},[14,84934,84936],{"id":84935},"_411-编程思想","4.11 编程思想",[275,84938,84940],{"id":84939},"_4111-面向过程介绍","4.11.1 面向过程介绍",[171,84942,84943,84946],{},[457,84944,84945],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[171,84948,84949],{},"调用就可以了",[171,84951,84952],{},[1638,84953],{"alt":24,"src":84954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[275,84956,84958],{"id":84957},"_4112-面向对象","4.11.2 面向对象",[171,84960,84961],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[171,84963,84964],{},[1638,84965],{"alt":24,"src":84966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[171,84968,84969],{},"面向对象的特性：",[175,84971,84972,84975,84978],{},[178,84973,84974],{},"封装性",[178,84976,84977],{},"继承性",[178,84979,84980],{},"多态性",[275,84982,84984],{"id":84983},"_4113-两者比较","4.11.3 两者比较",[171,84986,84987],{},[1638,84988],{"alt":24,"src":84989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,84991,84993],{"id":84992},"_412-构造函数回顾","4.12 构造函数回顾",[171,84995,84996],{},[1638,84997],{"alt":24,"src":84998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[171,85000,85001],{},[1638,85002],{"alt":24,"src":85003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[171,85005,85006],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[171,85008,85009],{},[1638,85010],{"alt":24,"src":85011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85013,85015],{"id":85014},"_413-原型","4.13 原型",[275,85017,85019],{"id":85018},"_4131-原型对象的认识","4.13.1 原型对象的认识",[171,85021,85022],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[171,85024,85025],{},[1638,85026],{"alt":24,"src":85027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[171,85029,85030],{},[1638,85031],{"alt":24,"src":85032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[171,85034,85035],{},"原型是构造函数的属性，它也是一个对象",[171,85037,85038],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[171,85040,85041],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[19,85043,85045],{"className":53196,"code":85044,"language":53198,"meta":24,"style":24},"\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",[26,85046,85047,85055,85060,85068,85073,85078,85083,85088,85093,85097,85101,85105,85110,85115,85119,85124,85129,85134,85139,85144,85148,85156],{"__ignoreMap":24},[29,85048,85049,85051,85053],{"class":31,"line":32},[29,85050,1218],{"class":309},[29,85052,51929],{"class":51429},[29,85054,51436],{"class":309},[29,85056,85057],{"class":31,"line":43},[29,85058,85059],{"class":367},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[29,85061,85062,85064,85066],{"class":31,"line":51},[29,85063,52273],{"class":309},[29,85065,51942],{"class":51429},[29,85067,51436],{"class":309},[29,85069,85070],{"class":31,"line":59},[29,85071,85072],{"class":309},"    function Star(uname, age) {\n",[29,85074,85075],{"class":31,"line":67},[29,85076,85077],{"class":309},"      this.uname = uname,\n",[29,85079,85080],{"class":31,"line":75},[29,85081,85082],{"class":309},"        this.age = age\n",[29,85084,85085],{"class":31,"line":83},[29,85086,85087],{"class":309},"      \u002F\u002F this.sing = function () {\n",[29,85089,85090],{"class":31,"line":158},[29,85091,85092],{"class":309},"      \u002F\u002F   console.log('唱歌')\n",[29,85094,85095],{"class":31,"line":166},[29,85096,2575],{"emptyLinePlaceholder":233},[29,85098,85099],{"class":31,"line":1505},[29,85100,60166],{"class":309},[29,85102,85103],{"class":31,"line":1788},[29,85104,2362],{"class":309},[29,85106,85107],{"class":31,"line":1793},[29,85108,85109],{"class":309},"    Star.prototype.sing = function () {\n",[29,85111,85112],{"class":31,"line":1799},[29,85113,85114],{"class":309},"      console.log('唱歌')\n",[29,85116,85117],{"class":31,"line":1804},[29,85118,2362],{"class":309},[29,85120,85121],{"class":31,"line":1818},[29,85122,85123],{"class":309},"    \u002F\u002F console.dir(Star.prototype)\n",[29,85125,85126],{"class":31,"line":1823},[29,85127,85128],{"class":309},"    const pink = new Star('pink', 18)\n",[29,85130,85131],{"class":31,"line":1829},[29,85132,85133],{"class":309},"    const red = new Star('red', 20)\n",[29,85135,85136],{"class":31,"line":1850},[29,85137,85138],{"class":309},"    pink.sing()\n",[29,85140,85141],{"class":31,"line":1855},[29,85142,85143],{"class":309},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[29,85145,85146],{"class":31,"line":1869},[29,85147,2575],{"emptyLinePlaceholder":233},[29,85149,85150,85152,85154],{"class":31,"line":1874},[29,85151,52546],{"class":309},[29,85153,51942],{"class":51429},[29,85155,51436],{"class":309},[29,85157,85158,85160,85162],{"class":31,"line":1903},[29,85159,51914],{"class":309},[29,85161,51929],{"class":51429},[29,85163,51436],{"class":309},[171,85165,85166],{},[1638,85167],{"alt":24,"src":85168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[19,85170,85172],{"className":53196,"code":85171,"language":53198,"meta":24,"style":24},"\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",[26,85173,85174,85182,85190,85195,85200,85205,85210,85214,85219,85224,85229,85233,85238,85242,85246,85251,85255,85263],{"__ignoreMap":24},[29,85175,85176,85178,85180],{"class":31,"line":32},[29,85177,1218],{"class":309},[29,85179,51929],{"class":51429},[29,85181,51436],{"class":309},[29,85183,85184,85186,85188],{"class":31,"line":43},[29,85185,52273],{"class":309},[29,85187,51942],{"class":51429},[29,85189,51436],{"class":309},[29,85191,85192],{"class":31,"line":51},[29,85193,85194],{"class":309},"    let that\n",[29,85196,85197],{"class":31,"line":59},[29,85198,85199],{"class":309},"    function Star(uname) {\n",[29,85201,85202],{"class":31,"line":67},[29,85203,85204],{"class":309},"      this.uname = uname\n",[29,85206,85207],{"class":31,"line":75},[29,85208,85209],{"class":309},"      that = this\n",[29,85211,85212],{"class":31,"line":83},[29,85213,2362],{"class":309},[29,85215,85216],{"class":31,"line":158},[29,85217,85218],{"class":309},"    \u002F\u002F 实例对象是 ldh\n",[29,85220,85221],{"class":31,"line":166},[29,85222,85223],{"class":309},"    const ldh = new Star('刘德华')\n",[29,85225,85226],{"class":31,"line":1505},[29,85227,85228],{"class":309},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[29,85230,85231],{"class":31,"line":1788},[29,85232,2575],{"emptyLinePlaceholder":233},[29,85234,85235],{"class":31,"line":1793},[29,85236,85237],{"class":309},"    Star.sing = function () {\n",[29,85239,85240],{"class":31,"line":1799},[29,85241,85114],{"class":309},[29,85243,85244],{"class":31,"line":1804},[29,85245,2362],{"class":309},[29,85247,85248],{"class":31,"line":1818},[29,85249,85250],{"class":309},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[29,85252,85253],{"class":31,"line":1823},[29,85254,2575],{"emptyLinePlaceholder":233},[29,85256,85257,85259,85261],{"class":31,"line":1829},[29,85258,52546],{"class":309},[29,85260,51942],{"class":51429},[29,85262,51436],{"class":309},[29,85264,85265,85267,85269],{"class":31,"line":1850},[29,85266,51914],{"class":309},[29,85268,51929],{"class":51429},[29,85270,51436],{"class":309},[171,85272,85273],{},"构造函数的this指向的是实例对象；",[171,85275,85276],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[275,85278,85280],{"id":85279},"_4132-数组扩展方法","4.13.2 数组扩展方法",[171,85282,85283],{},[1638,85284],{"alt":24,"src":85285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[19,85287,85289],{"className":53196,"code":85288,"language":53198,"meta":24,"style":24},"\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",[26,85290,85291,85299,85307,85312,85317,85322,85327,85332,85337,85342,85347,85352,85357,85361,85366,85371,85376,85381,85385,85390,85395,85400,85405,85409,85414,85419,85424,85429,85433,85438,85442,85450],{"__ignoreMap":24},[29,85292,85293,85295,85297],{"class":31,"line":32},[29,85294,1218],{"class":309},[29,85296,51929],{"class":51429},[29,85298,51436],{"class":309},[29,85300,85301,85303,85305],{"class":31,"line":43},[29,85302,52273],{"class":309},[29,85304,51942],{"class":51429},[29,85306,51436],{"class":309},[29,85308,85309],{"class":31,"line":51},[29,85310,85311],{"class":309},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[29,85313,85314],{"class":31,"line":59},[29,85315,85316],{"class":309},"    const arr = [1, 2, 3]\n",[29,85318,85319],{"class":31,"line":67},[29,85320,85321],{"class":309},"    \u002F\u002F 自己定义数组的扩展方法\n",[29,85323,85324],{"class":31,"line":75},[29,85325,85326],{"class":309},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[29,85328,85329],{"class":31,"line":83},[29,85330,85331],{"class":309},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[29,85333,85334],{"class":31,"line":158},[29,85335,85336],{"class":309},"    \u002F\u002F ①.最大值\n",[29,85338,85339],{"class":31,"line":166},[29,85340,85341],{"class":309},"    Array.prototype.max = function () {\n",[29,85343,85344],{"class":31,"line":1505},[29,85345,85346],{"class":309},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[29,85348,85349],{"class":31,"line":1788},[29,85350,85351],{"class":309},"      return Math.max(...this)\n",[29,85353,85354],{"class":31,"line":1793},[29,85355,85356],{"class":309},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[29,85358,85359],{"class":31,"line":1799},[29,85360,2362],{"class":309},[29,85362,85363],{"class":31,"line":1804},[29,85364,85365],{"class":309},"    console.log(arr.max())\n",[29,85367,85368],{"class":31,"line":1818},[29,85369,85370],{"class":309},"    \u002F\u002F ②最小值\n",[29,85372,85373],{"class":31,"line":1823},[29,85374,85375],{"class":309},"    Array.prototype.min = function () {\n",[29,85377,85378],{"class":31,"line":1829},[29,85379,85380],{"class":309},"      return Math.min(...this)\n",[29,85382,85383],{"class":31,"line":1850},[29,85384,2362],{"class":309},[29,85386,85387],{"class":31,"line":1855},[29,85388,85389],{"class":309},"    console.log(arr.min())\n",[29,85391,85392],{"class":31,"line":1869},[29,85393,85394],{"class":309},"    \u002F\u002F③求和\n",[29,85396,85397],{"class":31,"line":1874},[29,85398,85399],{"class":309},"    Array.prototype.sum = function () {\n",[29,85401,85402],{"class":31,"line":1903},[29,85403,85404],{"class":309},"      return this.reduce((prev, current) => prev + current, 0)\n",[29,85406,85407],{"class":31,"line":1908},[29,85408,2362],{"class":309},[29,85410,85411],{"class":31,"line":1925},[29,85412,85413],{"class":309},"    console.log(arr.sum())\n",[29,85415,85416],{"class":31,"line":1930},[29,85417,85418],{"class":309},"    \u002F\u002F ③排序\n",[29,85420,85421],{"class":31,"line":1935},[29,85422,85423],{"class":309},"    Array.prototype.rever = function () {\n",[29,85425,85426],{"class":31,"line":1940},[29,85427,85428],{"class":309},"      return this.reverse()\n",[29,85430,85431],{"class":31,"line":1954},[29,85432,2362],{"class":309},[29,85434,85435],{"class":31,"line":1959},[29,85436,85437],{"class":309},"    console.log(arr.rever())\n",[29,85439,85440],{"class":31,"line":2752},[29,85441,2575],{"emptyLinePlaceholder":233},[29,85443,85444,85446,85448],{"class":31,"line":2766},[29,85445,52546],{"class":309},[29,85447,51942],{"class":51429},[29,85449,51436],{"class":309},[29,85451,85452,85454,85456],{"class":31,"line":2774},[29,85453,51914],{"class":309},[29,85455,51929],{"class":51429},[29,85457,51436],{"class":309},[171,85459,85460],{},[1638,85461],{"alt":24,"src":85462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[275,85464,85466],{"id":85465},"_4133-constructor-属性","4.13.3 constructor 属性",[171,85468,85469],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[171,85471,85472],{},[1638,85473],{"alt":24,"src":85474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[19,85476,85478],{"className":53196,"code":85477,"language":53198,"meta":24,"style":24},"\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",[26,85479,85480,85488,85496,85501,85506,85510,85515,85520,85525,85533],{"__ignoreMap":24},[29,85481,85482,85484,85486],{"class":31,"line":32},[29,85483,1218],{"class":309},[29,85485,51929],{"class":51429},[29,85487,51436],{"class":309},[29,85489,85490,85492,85494],{"class":31,"line":43},[29,85491,52273],{"class":309},[29,85493,51942],{"class":51429},[29,85495,51436],{"class":309},[29,85497,85498],{"class":31,"line":51},[29,85499,85500],{"class":309},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[29,85502,85503],{"class":31,"line":59},[29,85504,85505],{"class":309},"    function Star() {\n",[29,85507,85508],{"class":31,"line":67},[29,85509,2362],{"class":309},[29,85511,85512],{"class":31,"line":75},[29,85513,85514],{"class":309},"    const ldh = new Star()\n",[29,85516,85517],{"class":31,"line":83},[29,85518,85519],{"class":309},"    console.log(Star.prototype)\n",[29,85521,85522],{"class":31,"line":158},[29,85523,85524],{"class":309},"    console.log(Star.prototype.constructor === Star)\n",[29,85526,85527,85529,85531],{"class":31,"line":166},[29,85528,52546],{"class":309},[29,85530,51942],{"class":51429},[29,85532,51436],{"class":309},[29,85534,85535,85537,85539],{"class":31,"line":1505},[29,85536,51914],{"class":309},[29,85538,51929],{"class":51429},[29,85540,51436],{"class":309},[171,85542,85543],{},[1638,85544],{"alt":24,"src":85545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[171,85547,85548],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[19,85550,85552],{"className":53196,"code":85551,"language":53198,"meta":24,"style":24},"  \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",[26,85553,85554,85562,85566,85570,85574,85579,85584,85589,85593,85598,85603,85608,85613,85618,85623,85627,85631,85636,85641,85646,85650,85655,85660,85664,85668,85672],{"__ignoreMap":24},[29,85555,85556,85558,85560],{"class":31,"line":32},[29,85557,52273],{"class":309},[29,85559,51942],{"class":51429},[29,85561,51436],{"class":309},[29,85563,85564],{"class":31,"line":43},[29,85565,85500],{"class":309},[29,85567,85568],{"class":31,"line":51},[29,85569,85505],{"class":309},[29,85571,85572],{"class":31,"line":59},[29,85573,2362],{"class":309},[29,85575,85576],{"class":31,"line":67},[29,85577,85578],{"class":309},"    \u002F\u002F const ldh = new Star()\n",[29,85580,85581],{"class":31,"line":75},[29,85582,85583],{"class":309},"    \u002F\u002F console.log(Star.prototype)\n",[29,85585,85586],{"class":31,"line":83},[29,85587,85588],{"class":309},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[29,85590,85591],{"class":31,"line":158},[29,85592,2575],{"emptyLinePlaceholder":233},[29,85594,85595],{"class":31,"line":166},[29,85596,85597],{"class":309},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[29,85599,85600],{"class":31,"line":1505},[29,85601,85602],{"class":309},"    \u002F\u002F Star.prototype.sing = function () {\n",[29,85604,85605],{"class":31,"line":1788},[29,85606,85607],{"class":309},"    \u002F\u002F   console.log('唱歌')\n",[29,85609,85610],{"class":31,"line":1793},[29,85611,85612],{"class":309},"    \u002F\u002F }\n",[29,85614,85615],{"class":31,"line":1799},[29,85616,85617],{"class":309},"    \u002F\u002F Star.prototype.dance = function () {\n",[29,85619,85620],{"class":31,"line":1804},[29,85621,85622],{"class":309},"    \u002F\u002F   console.log('跳舞')\n",[29,85624,85625],{"class":31,"line":1818},[29,85626,85612],{"class":309},[29,85628,85629],{"class":31,"line":1823},[29,85630,85519],{"class":309},[29,85632,85633],{"class":31,"line":1829},[29,85634,85635],{"class":309},"    Star.prototype = {\n",[29,85637,85638],{"class":31,"line":1850},[29,85639,85640],{"class":309},"      sing: function () {\n",[29,85642,85643],{"class":31,"line":1855},[29,85644,85645],{"class":309},"        console.log('唱歌')\n",[29,85647,85648],{"class":31,"line":1869},[29,85649,78021],{"class":309},[29,85651,85652],{"class":31,"line":1874},[29,85653,85654],{"class":309},"      dance: function () {\n",[29,85656,85657],{"class":31,"line":1903},[29,85658,85659],{"class":309},"        console.log('跳舞')\n",[29,85661,85662],{"class":31,"line":1908},[29,85663,52527],{"class":309},[29,85665,85666],{"class":31,"line":1925},[29,85667,2362],{"class":309},[29,85669,85670],{"class":31,"line":1930},[29,85671,85519],{"class":309},[29,85673,85674,85676,85678],{"class":31,"line":1935},[29,85675,52546],{"class":309},[29,85677,51942],{"class":51429},[29,85679,51436],{"class":309},[171,85681,85682],{},"进行输出结果后会发现：",[171,85684,85685],{},[1638,85686],{"alt":24,"src":85687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[171,85689,85690],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[171,85692,85693],{},"所以，要重新指回创造这个原型对象的构造函数",[19,85695,85697],{"className":71342,"code":85696,"language":71344,"meta":24,"style":24},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[26,85698,85699,85713,85718,85723,85734,85747,85752,85763,85777,85781],{"__ignoreMap":24},[29,85700,85701,85704,85706,85709,85711],{"class":31,"line":32},[29,85702,85703],{"class":39},"Star",[29,85705,866],{"class":309},[29,85707,85708],{"class":39},"prototype",[29,85710,13739],{"class":305},[29,85712,15747],{"class":309},[29,85714,85715],{"class":31,"line":43},[29,85716,85717],{"class":367},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[29,85719,85720],{"class":31,"line":51},[29,85721,85722],{"class":309},"  constructor: Star,\n",[29,85724,85725,85728,85730,85732],{"class":31,"line":59},[29,85726,85727],{"class":35},"  sing",[29,85729,51566],{"class":309},[29,85731,54578],{"class":305},[29,85733,54581],{"class":309},[29,85735,85736,85738,85740,85742,85745],{"class":31,"line":67},[29,85737,73882],{"class":309},[29,85739,58376],{"class":35},[29,85741,310],{"class":309},[29,85743,85744],{"class":103},"'唱歌'",[29,85746,316],{"class":309},[29,85748,85749],{"class":31,"line":75},[29,85750,85751],{"class":309},"   },\n",[29,85753,85754,85757,85759,85761],{"class":31,"line":83},[29,85755,85756],{"class":35},"   dance",[29,85758,51566],{"class":309},[29,85760,54578],{"class":305},[29,85762,54581],{"class":309},[29,85764,85765,85768,85770,85772,85775],{"class":31,"line":158},[29,85766,85767],{"class":309},"     console.",[29,85769,58376],{"class":35},[29,85771,310],{"class":309},[29,85773,85774],{"class":103},"'跳舞'",[29,85776,316],{"class":309},[29,85778,85779],{"class":31,"line":166},[29,85780,4484],{"class":309},[29,85782,85783],{"class":31,"line":1505},[29,85784,1741],{"class":309},[171,85786,85787],{},[1638,85788],{"alt":24,"src":85789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[171,85791,85792],{},"总结1：",[171,85794,85795],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[171,85797,85798],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[171,85800,85801],{},"constructor指的是他的来源",[171,85803,85804],{},[1638,85805],{"alt":24,"src":85806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[171,85808,85809],{},[1638,85810],{"alt":24,"src":85811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[171,85813,85814],{},"总结2：",[171,85816,85817],{},[1638,85818],{"alt":24,"src":85819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[171,85821,85822],{},[1638,85823],{"alt":24,"src":85824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[171,85826,85827],{},[1638,85828],{"alt":24,"src":85829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[275,85831,85833],{"id":85832},"_4134-对象原型","4.13.4 对象原型",[171,85835,85836],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[171,85838,85839],{},"对象原型就是__proto__这个属性",[171,85841,85842],{},[1638,85843],{"alt":24,"src":85844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[171,85846,85847],{},[1638,85848],{"alt":24,"src":85849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[171,85851,85852],{},[1638,85853],{"alt":24,"src":85854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[171,85856,85857],{},[1638,85858],{"alt":24,"src":85859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[19,85861,85863],{"className":53196,"code":85862,"language":53198,"meta":24,"style":24},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[26,85864,85865,85873,85881,85885,85889,85893,85898,85906],{"__ignoreMap":24},[29,85866,85867,85869,85871],{"class":31,"line":32},[29,85868,1218],{"class":309},[29,85870,51929],{"class":51429},[29,85872,51436],{"class":309},[29,85874,85875,85877,85879],{"class":31,"line":43},[29,85876,52273],{"class":309},[29,85878,51942],{"class":51429},[29,85880,51436],{"class":309},[29,85882,85883],{"class":31,"line":51},[29,85884,85505],{"class":309},[29,85886,85887],{"class":31,"line":59},[29,85888,2362],{"class":309},[29,85890,85891],{"class":31,"line":67},[29,85892,85514],{"class":309},[29,85894,85895],{"class":31,"line":75},[29,85896,85897],{"class":309},"    console.log(ldh)\n",[29,85899,85900,85902,85904],{"class":31,"line":83},[29,85901,52546],{"class":309},[29,85903,51942],{"class":51429},[29,85905,51436],{"class":309},[29,85907,85908,85910,85912],{"class":31,"line":158},[29,85909,51914],{"class":309},[29,85911,51929],{"class":51429},[29,85913,51436],{"class":309},[171,85915,85916],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[171,85918,85919],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[171,85921,85922],{},[1638,85923],{"alt":24,"src":85924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[171,85926,85927],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[171,85929,85930],{},"对象原型指向原型对象",[171,85932,85933],{},[1638,85934],{"alt":24,"src":85935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[171,85937,85938],{},[1638,85939],{"alt":24,"src":85940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[171,85942,85943],{},[1638,85944],{"alt":24,"src":85945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[275,85947,85949],{"id":85948},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[171,85951,85952],{},[1638,85953],{"alt":24,"src":85954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[259,85956,85957,85960,85963,85966],{},[178,85958,85959],{},"构造函数通过new的形式实例化得到实例对象",[178,85961,85962],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[178,85964,85965],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[178,85967,85968],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[171,85970,85971],{},[1638,85972],{"alt":24,"src":85973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[171,85975,85976],{},"题目梳理：",[171,85978,85979],{},[1638,85980],{"alt":24,"src":85981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[275,85983,85985],{"id":85984},"_4136-原型继承","4.13.6 原型继承",[171,85987,85988],{},[1638,85989],{"alt":24,"src":85990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[171,85992,85993],{},[1638,85994],{"alt":24,"src":85995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[171,85997,85998],{},[1638,85999],{"alt":24,"src":86000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[171,86002,86003],{},[1638,86004],{"alt":24,"src":86005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[171,86007,86008],{},[1638,86009],{"alt":24,"src":86010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[171,86012,86013],{},[1638,86014],{"alt":24,"src":86015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[171,86017,86018],{},[1638,86019],{"alt":24,"src":86020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[171,86022,86023],{},[1638,86024],{"alt":24,"src":86025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[171,86027,86028],{},"回顾：构造函数每次new得到对象都是不同的",[275,86030,86032],{"id":86031},"_4137-原型链","4.13.7 原型链",[171,86034,86035],{},[1638,86036],{"alt":24,"src":86037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[171,86039,86040],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[171,86042,86043],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[171,86045,86046],{},"大哥是Object",[171,86048,86049],{},[1638,86050],{"alt":24,"src":86051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[171,86053,86054],{},[1638,86055],{"alt":24,"src":86056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[171,86058,86059],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[171,86061,86062],{},"万物皆对象",[275,86064,86066],{"id":86065},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[171,86068,86069],{},"模态框",[171,86071,86072],{},"以后遇见这个效果直接使用这个就行",[171,86074,86075],{},[1638,86076],{"alt":24,"src":86077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[171,86079,86080],{},[1638,86081],{"alt":24,"src":86082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[171,86084,86085],{},[1638,86086],{"alt":24,"src":86087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[171,86089,86090],{},[1638,86091],{"alt":24,"src":86092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[171,86094,86095],{},"补充知识点：",[259,86097,86098],{},[178,86099,86100],{},"append()",[171,86102,86103],{},[1638,86104],{"alt":24,"src":86105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[19,86107,86109],{"className":50762,"code":86108,"language":50764,"meta":24,"style":24},"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",[26,86110,86111,86116,86121,86126,86130,86134,86138,86143,86148,86153,86157],{"__ignoreMap":24},[29,86112,86113],{"class":31,"line":32},[29,86114,86115],{"class":309},"append(param1)\n",[29,86117,86118],{"class":31,"line":43},[29,86119,86120],{"class":309},"append(param1, param2)\n",[29,86122,86123],{"class":31,"line":51},[29,86124,86125],{"class":309},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[29,86127,86128],{"class":31,"line":59},[29,86129,2575],{"emptyLinePlaceholder":233},[29,86131,86132],{"class":31,"line":67},[29,86133,2575],{"emptyLinePlaceholder":233},[29,86135,86136],{"class":31,"line":75},[29,86137,2575],{"emptyLinePlaceholder":233},[29,86139,86140],{"class":31,"line":83},[29,86141,86142],{"class":309},"let div = document.createElement(\"div\");\n",[29,86144,86145],{"class":31,"line":158},[29,86146,86147],{"class":309},"let p = document.createElement(\"p\");\n",[29,86149,86150],{"class":31,"line":166},[29,86151,86152],{"class":309},"div.append(p);\n",[29,86154,86155],{"class":31,"line":1505},[29,86156,2575],{"emptyLinePlaceholder":233},[29,86158,86159,86162,86164],{"class":31,"line":1788},[29,86160,86161],{"class":309},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[29,86163,171],{"class":51429},[29,86165,86166],{"class":309},"> ]\n",[259,86168,86169],{"start":43},[178,86170,86171],{},"remove()",[171,86173,86174],{},"自己删自己",[171,86176,86177],{},[1638,86178],{"alt":24,"src":86179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[19,86181,86183],{"className":50762,"code":86182,"language":50764,"meta":24,"style":24},"\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",[26,86184,86185,86195,86209,86213,86221,86235,86255,86267,86275,86282,86294,86307,86342,86354,86365,86377,86389,86401,86428,86438,86442,86446,86455,86467,86481,86491,86503,86507,86511,86521,86532,86542,86552,86565,86578,86588,86592,86596,86605,86615,86627,86631,86635,86644,86654,86664,86676,86680,86684,86694,86710,86721,86731,86741,86753,86765,86777,86781,86785,86798,86809,86813,86821,86829,86833,86841,86861,86881,86889,86894,86920,86925,86930,86949,86954,86966,86971,86982,86992,87002,87007,87012,87016,87021,87026,87031,87051,87056,87076,87081,87095,87100,87105,87110,87126,87130,87135,87164,87169,87174,87179,87190,87194,87198,87202,87207,87232,87237,87262,87267,87276,87280,87285,87310,87314,87339,87343,87352,87356,87361,87379,87389,87393,87401,87409,87413],{"__ignoreMap":24},[29,86186,86187,86189,86191,86193],{"class":31,"line":32},[29,86188,51426],{"class":309},[29,86190,51430],{"class":51429},[29,86192,51433],{"class":35},[29,86194,51436],{"class":309},[29,86196,86197,86199,86201,86203,86205,86207],{"class":31,"line":43},[29,86198,1218],{"class":309},[29,86200,50764],{"class":51429},[29,86202,51445],{"class":35},[29,86204,355],{"class":309},[29,86206,51450],{"class":103},[29,86208,51436],{"class":309},[29,86210,86211],{"class":31,"line":51},[29,86212,2575],{"emptyLinePlaceholder":233},[29,86214,86215,86217,86219],{"class":31,"line":59},[29,86216,1218],{"class":309},[29,86218,51463],{"class":51429},[29,86220,51436],{"class":309},[29,86222,86223,86225,86227,86229,86231,86233],{"class":31,"line":67},[29,86224,52273],{"class":309},[29,86226,51473],{"class":51429},[29,86228,51476],{"class":35},[29,86230,355],{"class":309},[29,86232,51481],{"class":103},[29,86234,51436],{"class":309},[29,86236,86237,86239,86241,86243,86245,86247,86249,86251,86253],{"class":31,"line":75},[29,86238,52273],{"class":309},[29,86240,51473],{"class":51429},[29,86242,15095],{"class":35},[29,86244,355],{"class":309},[29,86246,51520],{"class":103},[29,86248,51500],{"class":35},[29,86250,355],{"class":309},[29,86252,51527],{"class":103},[29,86254,51436],{"class":309},[29,86256,86257,86259,86261,86263,86265],{"class":31,"line":83},[29,86258,52273],{"class":309},[29,86260,51536],{"class":51429},[29,86262,51539],{"class":309},[29,86264,51536],{"class":51429},[29,86266,51436],{"class":309},[29,86268,86269,86271,86273],{"class":31,"line":158},[29,86270,52273],{"class":309},[29,86272,223],{"class":51429},[29,86274,51436],{"class":309},[29,86276,86277,86280],{"class":31,"line":166},[29,86278,86279],{"class":35},"    .modal",[29,86281,15747],{"class":309},[29,86283,86284,86286,86288,86290,86292],{"class":31,"line":1505},[29,86285,54900],{"class":39},[29,86287,51566],{"class":309},[29,86289,4148],{"class":39},[29,86291,51621],{"class":305},[29,86293,1468],{"class":309},[29,86295,86296,86299,86301,86303,86305],{"class":31,"line":1788},[29,86297,86298],{"class":39},"      min-height",[29,86300,51566],{"class":309},[29,86302,619],{"class":39},[29,86304,51621],{"class":305},[29,86306,1468],{"class":309},[29,86308,86309,86311,86313,86315,86317,86319,86321,86323,86325,86327,86329,86331,86333,86335,86337,86340],{"class":31,"line":1793},[29,86310,78879],{"class":39},[29,86312,51566],{"class":309},[29,86314,499],{"class":39},[29,86316,4268],{"class":39},[29,86318,2213],{"class":39},[29,86320,51621],{"class":305},[29,86322,78896],{"class":39},[29,86324,310],{"class":309},[29,86326,499],{"class":39},[29,86328,12610],{"class":309},[29,86330,499],{"class":39},[29,86332,12610],{"class":309},[29,86334,499],{"class":39},[29,86336,12610],{"class":309},[29,86338,86339],{"class":39},"0.1",[29,86341,2894],{"class":309},[29,86343,86344,86346,86348,86350,86352],{"class":31,"line":1799},[29,86345,55263],{"class":39},[29,86347,51566],{"class":309},[29,86349,601],{"class":39},[29,86351,51621],{"class":305},[29,86353,1468],{"class":309},[29,86355,86356,86358,86360,86363],{"class":31,"line":1804},[29,86357,54888],{"class":39},[29,86359,51566],{"class":309},[29,86361,86362],{"class":39},"fixed",[29,86364,1468],{"class":309},[29,86366,86367,86370,86372,86375],{"class":31,"line":1818},[29,86368,86369],{"class":39},"      z-index",[29,86371,51566],{"class":309},[29,86373,86374],{"class":39},"999",[29,86376,1468],{"class":309},[29,86378,86379,86381,86383,86385,86387],{"class":31,"line":1823},[29,86380,54967],{"class":39},[29,86382,51566],{"class":309},[29,86384,964],{"class":39},[29,86386,636],{"class":305},[29,86388,1468],{"class":309},[29,86390,86391,86393,86395,86397,86399],{"class":31,"line":1829},[29,86392,55076],{"class":39},[29,86394,51566],{"class":309},[29,86396,964],{"class":39},[29,86398,636],{"class":305},[29,86400,1468],{"class":309},[29,86402,86403,86405,86407,86409,86411,86414,86416,86418,86420,86422,86424,86426],{"class":31,"line":1850},[29,86404,78920],{"class":39},[29,86406,51566],{"class":309},[29,86408,78925],{"class":39},[29,86410,310],{"class":309},[29,86412,86413],{"class":39},"-50",[29,86415,636],{"class":305},[29,86417,12610],{"class":309},[29,86419,86413],{"class":39},[29,86421,636],{"class":305},[29,86423,12610],{"class":309},[29,86425,499],{"class":39},[29,86427,2894],{"class":309},[29,86429,86430,86432,86434,86436],{"class":31,"line":1855},[29,86431,55013],{"class":39},[29,86433,51566],{"class":309},[29,86435,60971],{"class":39},[29,86437,1468],{"class":309},[29,86439,86440],{"class":31,"line":1869},[29,86441,2362],{"class":309},[29,86443,86444],{"class":31,"line":1874},[29,86445,2575],{"emptyLinePlaceholder":233},[29,86447,86448,86450,86453],{"class":31,"line":1903},[29,86449,86279],{"class":35},[29,86451,86452],{"class":35}," .header",[29,86454,15747],{"class":309},[29,86456,86457,86459,86461,86463,86465],{"class":31,"line":1908},[29,86458,57488],{"class":39},[29,86460,51566],{"class":309},[29,86462,709],{"class":39},[29,86464,51621],{"class":305},[29,86466,1468],{"class":309},[29,86468,86469,86471,86473,86475,86477,86479],{"class":31,"line":1925},[29,86470,54824],{"class":39},[29,86472,51566],{"class":309},[29,86474,499],{"class":39},[29,86476,2213],{"class":39},[29,86478,51621],{"class":305},[29,86480,1468],{"class":309},[29,86482,86483,86485,86487,86489],{"class":31,"line":1930},[29,86484,54888],{"class":39},[29,86486,51566],{"class":309},[29,86488,54893],{"class":39},[29,86490,1468],{"class":309},[29,86492,86493,86495,86497,86499,86501],{"class":31,"line":1935},[29,86494,55051],{"class":39},[29,86496,51566],{"class":309},[29,86498,1008],{"class":39},[29,86500,51621],{"class":305},[29,86502,1468],{"class":309},[29,86504,86505],{"class":31,"line":1940},[29,86506,2362],{"class":309},[29,86508,86509],{"class":31,"line":1954},[29,86510,2575],{"emptyLinePlaceholder":233},[29,86512,86513,86515,86517,86519],{"class":31,"line":1959},[29,86514,86279],{"class":35},[29,86516,86452],{"class":35},[29,86518,3207],{"class":51429},[29,86520,15747],{"class":309},[29,86522,86523,86526,86528,86530],{"class":31,"line":2752},[29,86524,86525],{"class":39},"      font-style",[29,86527,51566],{"class":309},[29,86529,63970],{"class":39},[29,86531,1468],{"class":309},[29,86533,86534,86536,86538,86540],{"class":31,"line":2766},[29,86535,57545],{"class":39},[29,86537,51566],{"class":309},[29,86539,62199],{"class":39},[29,86541,1468],{"class":309},[29,86543,86544,86546,86548,86550],{"class":31,"line":2774},[29,86545,54888],{"class":39},[29,86547,51566],{"class":309},[29,86549,54960],{"class":39},[29,86551,1468],{"class":309},[29,86553,86554,86557,86559,86561,86563],{"class":31,"line":2779},[29,86555,86556],{"class":39},"      right",[29,86558,51566],{"class":309},[29,86560,883],{"class":39},[29,86562,51621],{"class":305},[29,86564,1468],{"class":309},[29,86566,86567,86569,86571,86574,86576],{"class":31,"line":2785},[29,86568,55076],{"class":39},[29,86570,51566],{"class":309},[29,86572,86573],{"class":39},"-2",[29,86575,51621],{"class":305},[29,86577,1468],{"class":309},[29,86579,86580,86582,86584,86586],{"class":31,"line":2791},[29,86581,62154],{"class":39},[29,86583,51566],{"class":309},[29,86585,62159],{"class":39},[29,86587,1468],{"class":309},[29,86589,86590],{"class":31,"line":2796},[29,86591,2362],{"class":309},[29,86593,86594],{"class":31,"line":8123},[29,86595,2575],{"emptyLinePlaceholder":233},[29,86597,86598,86600,86603],{"class":31,"line":8147},[29,86599,86279],{"class":35},[29,86601,86602],{"class":35}," .body",[29,86604,15747],{"class":309},[29,86606,86607,86609,86611,86613],{"class":31,"line":8152},[29,86608,57415],{"class":39},[29,86610,51566],{"class":309},[29,86612,51721],{"class":39},[29,86614,1468],{"class":309},[29,86616,86617,86619,86621,86623,86625],{"class":31,"line":8158},[29,86618,54824],{"class":39},[29,86620,51566],{"class":309},[29,86622,754],{"class":39},[29,86624,51621],{"class":305},[29,86626,1468],{"class":309},[29,86628,86629],{"class":31,"line":8185},[29,86630,2362],{"class":309},[29,86632,86633],{"class":31,"line":8190},[29,86634,2575],{"emptyLinePlaceholder":233},[29,86636,86637,86639,86642],{"class":31,"line":8196},[29,86638,86279],{"class":35},[29,86640,86641],{"class":35}," .footer",[29,86643,15747],{"class":309},[29,86645,86646,86648,86650,86652],{"class":31,"line":8208},[29,86647,55138],{"class":39},[29,86649,51566],{"class":309},[29,86651,51606],{"class":39},[29,86653,1468],{"class":309},[29,86655,86656,86658,86660,86662],{"class":31,"line":8220},[29,86657,55149],{"class":39},[29,86659,51566],{"class":309},[29,86661,51709],{"class":39},[29,86663,1468],{"class":309},[29,86665,86666,86668,86670,86672,86674],{"class":31,"line":8232},[29,86667,54824],{"class":39},[29,86669,51566],{"class":309},[29,86671,754],{"class":39},[29,86673,51621],{"class":305},[29,86675,1468],{"class":309},[29,86677,86678],{"class":31,"line":9891},[29,86679,2362],{"class":309},[29,86681,86682],{"class":31,"line":9916},[29,86683,2575],{"emptyLinePlaceholder":233},[29,86685,86686,86688,86690,86692],{"class":31,"line":9939},[29,86687,86279],{"class":35},[29,86689,86641],{"class":35},[29,86691,1574],{"class":51429},[29,86693,15747],{"class":309},[29,86695,86696,86698,86700,86702,86704,86706,86708],{"class":31,"line":9963},[29,86697,54824],{"class":39},[29,86699,51566],{"class":309},[29,86701,380],{"class":39},[29,86703,51621],{"class":305},[29,86705,2258],{"class":39},[29,86707,51621],{"class":305},[29,86709,1468],{"class":309},[29,86711,86712,86714,86716,86719],{"class":31,"line":9968},[29,86713,61850],{"class":39},[29,86715,51566],{"class":309},[29,86717,86718],{"class":39},"#ccc",[29,86720,1468],{"class":309},[29,86722,86723,86725,86727,86729],{"class":31,"line":9973},[29,86724,64099],{"class":39},[29,86726,51566],{"class":309},[29,86728,54866],{"class":39},[29,86730,1468],{"class":309},[29,86732,86733,86735,86737,86739],{"class":31,"line":9978},[29,86734,57545],{"class":39},[29,86736,51566],{"class":309},[29,86738,60971],{"class":39},[29,86740,1468],{"class":309},[29,86742,86743,86745,86747,86749,86751],{"class":31,"line":9987},[29,86744,55263],{"class":39},[29,86746,51566],{"class":309},[29,86748,386],{"class":39},[29,86750,51621],{"class":305},[29,86752,1468],{"class":309},[29,86754,86755,86757,86759,86761,86763],{"class":31,"line":9992},[29,86756,61879],{"class":39},[29,86758,51566],{"class":309},[29,86760,754],{"class":39},[29,86762,51621],{"class":305},[29,86764,1468],{"class":309},[29,86766,86767,86769,86771,86773,86775],{"class":31,"line":9998},[29,86768,55051],{"class":39},[29,86770,51566],{"class":309},[29,86772,857],{"class":39},[29,86774,51621],{"class":305},[29,86776,1468],{"class":309},[29,86778,86779],{"class":31,"line":10019},[29,86780,2362],{"class":309},[29,86782,86783],{"class":31,"line":10025},[29,86784,2575],{"emptyLinePlaceholder":233},[29,86786,86787,86789,86791,86793,86796],{"class":31,"line":10039},[29,86788,86279],{"class":35},[29,86790,86641],{"class":35},[29,86792,1574],{"class":51429},[29,86794,86795],{"class":35},".submit",[29,86797,15747],{"class":309},[29,86799,86800,86802,86804,86807],{"class":31,"line":10045},[29,86801,55013],{"class":39},[29,86803,51566],{"class":309},[29,86805,86806],{"class":39},"#369",[29,86808,1468],{"class":309},[29,86810,86811],{"class":31,"line":10072},[29,86812,2362],{"class":309},[29,86814,86815,86817,86819],{"class":31,"line":10081},[29,86816,52546],{"class":309},[29,86818,223],{"class":51429},[29,86820,51436],{"class":309},[29,86822,86823,86825,86827],{"class":31,"line":10087},[29,86824,51914],{"class":309},[29,86826,51463],{"class":51429},[29,86828,51436],{"class":309},[29,86830,86831],{"class":31,"line":10095},[29,86832,2575],{"emptyLinePlaceholder":233},[29,86834,86835,86837,86839],{"class":31,"line":10100},[29,86836,1218],{"class":309},[29,86838,51929],{"class":51429},[29,86840,51436],{"class":309},[29,86842,86843,86845,86847,86849,86851,86854,86857,86859],{"class":31,"line":16779},[29,86844,52273],{"class":309},[29,86846,54016],{"class":51429},[29,86848,15134],{"class":35},[29,86850,355],{"class":309},[29,86852,86853],{"class":103},"\"delete\"",[29,86855,86856],{"class":309},">删除\u003C\u002F",[29,86858,54016],{"class":51429},[29,86860,51436],{"class":309},[29,86862,86863,86865,86867,86869,86871,86874,86877,86879],{"class":31,"line":16785},[29,86864,52273],{"class":309},[29,86866,54016],{"class":51429},[29,86868,15134],{"class":35},[29,86870,355],{"class":309},[29,86872,86873],{"class":103},"\"login\"",[29,86875,86876],{"class":309},">登录\u003C\u002F",[29,86878,54016],{"class":51429},[29,86880,51436],{"class":309},[29,86882,86883,86885,86887],{"class":31,"line":16808},[29,86884,52273],{"class":309},[29,86886,51942],{"class":51429},[29,86888,51436],{"class":309},[29,86890,86891],{"class":31,"line":16814},[29,86892,86893],{"class":367},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[29,86895,86896,86898,86901,86903,86905,86907,86909,86911,86914,86916,86918],{"class":31,"line":16837},[29,86897,70213],{"class":305},[29,86899,86900],{"class":35}," Modal",[29,86902,310],{"class":309},[29,86904,51536],{"class":5391},[29,86906,13739],{"class":305},[29,86908,70059],{"class":103},[29,86910,12610],{"class":309},[29,86912,86913],{"class":5391},"message",[29,86915,13739],{"class":305},[29,86917,70059],{"class":103},[29,86919,12617],{"class":309},[29,86921,86922],{"class":31,"line":16851},[29,86923,86924],{"class":367},"      \u002F\u002F 创建Model 模态框盒子\n",[29,86926,86927],{"class":31,"line":16871},[29,86928,86929],{"class":367},"      \u002F\u002F 1.1 创建div标签\n",[29,86931,86932,86934,86937,86939,86941,86943,86945,86947],{"class":31,"line":16877},[29,86933,70180],{"class":39},[29,86935,86936],{"class":309},".modalBox ",[29,86938,355],{"class":305},[29,86940,54525],{"class":309},[29,86942,70280],{"class":35},[29,86944,310],{"class":309},[29,86946,82060],{"class":103},[29,86948,316],{"class":309},[29,86950,86951],{"class":31,"line":16888},[29,86952,86953],{"class":367},"      \u002F\u002F 1.2 给div 添加类名为model\n",[29,86955,86956,86958,86961,86963],{"class":31,"line":16911},[29,86957,70180],{"class":39},[29,86959,86960],{"class":309},".modalBox.className ",[29,86962,355],{"class":305},[29,86964,86965],{"class":103}," 'modal'\n",[29,86967,86968],{"class":31,"line":16933},[29,86969,86970],{"class":367},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[29,86972,86973,86975,86978,86980],{"class":31,"line":16938},[29,86974,70180],{"class":39},[29,86976,86977],{"class":309},".modalBox.innerHTML ",[29,86979,355],{"class":305},[29,86981,70297],{"class":103},[29,86983,86984,86987,86989],{"class":31,"line":16944},[29,86985,86986],{"class":103},"        \u003Cdiv class=\"header\">${",[29,86988,51536],{"class":309},[29,86990,86991],{"class":103},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[29,86993,86994,86997,86999],{"class":31,"line":16958},[29,86995,86996],{"class":103},"        \u003Cdiv class=\"body\">${",[29,86998,86913],{"class":309},[29,87000,87001],{"class":103},"}\u003C\u002Fdiv>\n",[29,87003,87004],{"class":31,"line":16971},[29,87005,87006],{"class":103},"      `\n",[29,87008,87009],{"class":31,"line":16976},[29,87010,87011],{"class":367},"      \u002F\u002F console.log(this.modalBox)\n",[29,87013,87014],{"class":31,"line":16990},[29,87015,2362],{"class":309},[29,87017,87018],{"class":31,"line":16995},[29,87019,87020],{"class":367},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[29,87022,87023],{"class":31,"line":17001},[29,87024,87025],{"class":367},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[29,87027,87028],{"class":31,"line":17006},[29,87029,87030],{"class":367},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[29,87032,87033,87036,87038,87040,87042,87045,87047,87049],{"class":31,"line":17020},[29,87034,87035],{"class":39},"    Modal",[29,87037,866],{"class":309},[29,87039,85708],{"class":39},[29,87041,866],{"class":309},[29,87043,87044],{"class":35},"open",[29,87046,13739],{"class":305},[29,87048,59047],{"class":305},[29,87050,54581],{"class":309},[29,87052,87053],{"class":31,"line":17025},[29,87054,87055],{"class":367},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[29,87057,87058,87060,87063,87065,87067,87069,87071,87074],{"class":31,"line":17030},[29,87059,58357],{"class":305},[29,87061,87062],{"class":39}," box",[29,87064,13739],{"class":305},[29,87066,54525],{"class":309},[29,87068,54528],{"class":35},[29,87070,310],{"class":309},[29,87072,87073],{"class":103},"'.modal'",[29,87075,316],{"class":309},[29,87077,87078],{"class":31,"line":17044},[29,87079,87080],{"class":367},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[29,87082,87083,87086,87088,87091,87093],{"class":31,"line":17056},[29,87084,87085],{"class":309},"      box ",[29,87087,1891],{"class":305},[29,87089,87090],{"class":309}," box.",[29,87092,57135],{"class":35},[29,87094,2151],{"class":309},[29,87096,87097],{"class":31,"line":17061},[29,87098,87099],{"class":367},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[29,87101,87102],{"class":31,"line":17074},[29,87103,87104],{"class":367},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[29,87106,87107],{"class":31,"line":17079},[29,87108,87109],{"class":367},"      \u002F\u002F append可以增加对象\n",[29,87111,87112,87115,87118,87120,87123],{"class":31,"line":17084},[29,87113,87114],{"class":309},"      document.body.",[29,87116,87117],{"class":35},"append",[29,87119,310],{"class":309},[29,87121,87122],{"class":39},"this",[29,87124,87125],{"class":309},".modalBox)\n",[29,87127,87128],{"class":31,"line":17089},[29,87129,2575],{"emptyLinePlaceholder":233},[29,87131,87132],{"class":31,"line":17102},[29,87133,87134],{"class":367},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[29,87136,87137,87139,87142,87144,87146,87149,87151,87153,87155,87157,87160,87162],{"class":31,"line":17107},[29,87138,70180],{"class":39},[29,87140,87141],{"class":309},".modalBox.",[29,87143,54528],{"class":35},[29,87145,310],{"class":309},[29,87147,87148],{"class":103},"'i'",[29,87150,30955],{"class":309},[29,87152,57942],{"class":35},[29,87154,310],{"class":309},[29,87156,57947],{"class":103},[29,87158,87159],{"class":309},", () ",[29,87161,84851],{"class":305},[29,87163,15747],{"class":309},[29,87165,87166],{"class":31,"line":32762},[29,87167,87168],{"class":367},"        \u002F\u002F 这个地方需要用到箭头函数\n",[29,87170,87171],{"class":31,"line":32768},[29,87172,87173],{"class":367},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[29,87175,87176],{"class":31,"line":32774},[29,87177,87178],{"class":367},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[29,87180,87181,87183,87185,87188],{"class":31,"line":32780},[29,87182,64855],{"class":39},[29,87184,866],{"class":309},[29,87186,87187],{"class":35},"close",[29,87189,2151],{"class":309},[29,87191,87192],{"class":31,"line":32786},[29,87193,64944],{"class":309},[29,87195,87196],{"class":31,"line":32797},[29,87197,2362],{"class":309},[29,87199,87200],{"class":31,"line":32803},[29,87201,2575],{"emptyLinePlaceholder":233},[29,87203,87204],{"class":31,"line":32823},[29,87205,87206],{"class":367},"    \u002F\u002F 测试一下 点击 删除按钮\n",[29,87208,87209,87211,87213,87215,87218,87220,87222,87224,87226,87228,87230],{"class":31,"line":32829},[29,87210,52536],{"class":309},[29,87212,54528],{"class":35},[29,87214,310],{"class":309},[29,87216,87217],{"class":103},"'#delete'",[29,87219,30955],{"class":309},[29,87221,57942],{"class":35},[29,87223,310],{"class":309},[29,87225,57947],{"class":103},[29,87227,87159],{"class":309},[29,87229,84851],{"class":305},[29,87231,15747],{"class":309},[29,87233,87234],{"class":31,"line":32840},[29,87235,87236],{"class":367},"      \u002F\u002F 先调用Model构造函数\n",[29,87238,87239,87241,87244,87246,87248,87250,87252,87255,87257,87260],{"class":31,"line":32846},[29,87240,58357],{"class":305},[29,87242,87243],{"class":39}," del",[29,87245,13739],{"class":305},[29,87247,11753],{"class":305},[29,87249,86900],{"class":35},[29,87251,310],{"class":309},[29,87253,87254],{"class":103},"'温馨的提示'",[29,87256,12610],{"class":309},[29,87258,87259],{"class":103},"'您没有删除权限操作'",[29,87261,316],{"class":309},[29,87263,87264],{"class":31,"line":32852},[29,87265,87266],{"class":367},"      \u002F\u002F 实例对象调用open方法\n",[29,87268,87269,87272,87274],{"class":31,"line":32858},[29,87270,87271],{"class":309},"      del.",[29,87273,87044],{"class":35},[29,87275,2151],{"class":309},[29,87277,87278],{"class":31,"line":32864},[29,87279,33590],{"class":309},[29,87281,87282],{"class":31,"line":32870},[29,87283,87284],{"class":367},"    \u002F\u002F 测试一下 点击 登录按钮\n",[29,87286,87287,87289,87291,87293,87296,87298,87300,87302,87304,87306,87308],{"class":31,"line":32876},[29,87288,52536],{"class":309},[29,87290,54528],{"class":35},[29,87292,310],{"class":309},[29,87294,87295],{"class":103},"'#login'",[29,87297,30955],{"class":309},[29,87299,57942],{"class":35},[29,87301,310],{"class":309},[29,87303,57947],{"class":103},[29,87305,87159],{"class":309},[29,87307,84851],{"class":305},[29,87309,15747],{"class":309},[29,87311,87312],{"class":31,"line":32882},[29,87313,87236],{"class":367},[29,87315,87316,87318,87321,87323,87325,87327,87329,87332,87334,87337],{"class":31,"line":32902},[29,87317,58357],{"class":305},[29,87319,87320],{"class":39}," log",[29,87322,13739],{"class":305},[29,87324,11753],{"class":305},[29,87326,86900],{"class":35},[29,87328,310],{"class":309},[29,87330,87331],{"class":103},"'友情提示'",[29,87333,12610],{"class":309},[29,87335,87336],{"class":103},"'您还没有登录呢'",[29,87338,316],{"class":309},[29,87340,87341],{"class":31,"line":32908},[29,87342,87266],{"class":367},[29,87344,87345,87348,87350],{"class":31,"line":32924},[29,87346,87347],{"class":309},"      log.",[29,87349,87044],{"class":35},[29,87351,2151],{"class":309},[29,87353,87354],{"class":31,"line":32930},[29,87355,33590],{"class":309},[29,87357,87358],{"class":31,"line":32944},[29,87359,87360],{"class":367},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[29,87362,87363,87365,87367,87369,87371,87373,87375,87377],{"class":31,"line":32950},[29,87364,87035],{"class":39},[29,87366,866],{"class":309},[29,87368,85708],{"class":39},[29,87370,866],{"class":309},[29,87372,87187],{"class":35},[29,87374,13739],{"class":305},[29,87376,59047],{"class":305},[29,87378,54581],{"class":309},[29,87380,87381,87383,87385,87387],{"class":31,"line":32965},[29,87382,70180],{"class":39},[29,87384,87141],{"class":309},[29,87386,57135],{"class":35},[29,87388,2151],{"class":309},[29,87390,87391],{"class":31,"line":32971},[29,87392,2362],{"class":309},[29,87394,87395,87397,87399],{"class":31,"line":32980},[29,87396,52546],{"class":309},[29,87398,51942],{"class":51429},[29,87400,51436],{"class":309},[29,87402,87403,87405,87407],{"class":31,"line":32986},[29,87404,51914],{"class":309},[29,87406,51929],{"class":51429},[29,87408,51436],{"class":309},[29,87410,87411],{"class":31,"line":32995},[29,87412,2575],{"emptyLinePlaceholder":233},[29,87414,87415,87417,87419],{"class":31,"line":33001},[29,87416,51914],{"class":309},[29,87418,50764],{"class":51429},[29,87420,51436],{"class":309},[171,87422,87423],{},[1638,87424],{"alt":24,"src":87425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87427,87429],{"id":87428},"_414-深浅拷贝","4.14 深浅拷贝",[275,87431,87433],{"id":87432},"_4141-浅拷贝","4.14.1 浅拷贝",[171,87435,87436],{},[1638,87437],{"alt":24,"src":87438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[171,87440,87441],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[171,87443,87444],{},[1638,87445],{"alt":24,"src":87446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[171,87448,87449],{},[1638,87450],{"alt":24,"src":87451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[171,87453,87454],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[171,87456,87457],{},[1638,87458],{"alt":24,"src":87459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[171,87461,11507],{},[171,87463,87464],{},[1638,87465],{"alt":24,"src":87466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[275,87468,87470],{"id":87469},"_4142-深拷贝","4.14.2 深拷贝",[171,87472,87473],{},"深拷贝：拷贝的是对象，不是地址",[171,87475,87476],{},"常用的三种方法：",[259,87478,87479,87482,87485],{},[178,87480,87481],{},"通过递归实现深拷贝",[178,87483,87484],{},"lodash\u002FcloneDeep",[178,87486,87487],{},"通过JSON.stringify()实现",[22173,87489,87491],{"id":87490},"_41421-递归函数","4.14.2.1 递归函数",[171,87493,87494],{},[1638,87495],{"alt":24,"src":87496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[259,87498,87499],{},[178,87500,87501],{},"死递归占溢出：",[19,87503,87505],{"className":53196,"code":87504,"language":53198,"meta":24,"style":24},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[26,87506,87507,87515,87523,87527,87532,87536,87541,87549],{"__ignoreMap":24},[29,87508,87509,87511,87513],{"class":31,"line":32},[29,87510,1218],{"class":309},[29,87512,51929],{"class":51429},[29,87514,51436],{"class":309},[29,87516,87517,87519,87521],{"class":31,"line":43},[29,87518,52273],{"class":309},[29,87520,51942],{"class":51429},[29,87522,51436],{"class":309},[29,87524,87525],{"class":31,"line":51},[29,87526,77272],{"class":309},[29,87528,87529],{"class":31,"line":59},[29,87530,87531],{"class":309},"      fn()\n",[29,87533,87534],{"class":31,"line":67},[29,87535,2362],{"class":309},[29,87537,87538],{"class":31,"line":75},[29,87539,87540],{"class":309},"    fn()\n",[29,87542,87543,87545,87547],{"class":31,"line":83},[29,87544,52546],{"class":309},[29,87546,51942],{"class":51429},[29,87548,51436],{"class":309},[29,87550,87551,87553,87555],{"class":31,"line":158},[29,87552,51914],{"class":309},[29,87554,51929],{"class":51429},[29,87556,51436],{"class":309},[259,87558,87559],{"start":43},[178,87560,87561],{},"递归函数要加判断条件：",[171,87563,87564],{},[1638,87565],{"alt":24,"src":87566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[259,87568,87569],{"start":51},[178,87570,87571],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[19,87573,87575],{"className":50762,"code":87574,"language":50764,"meta":24,"style":24},"\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",[26,87576,87577,87587,87601,87605,87613,87627,87647,87659,87667,87671,87679,87691,87699,87707,87732,87744,87748,87755,87763,87771,87775],{"__ignoreMap":24},[29,87578,87579,87581,87583,87585],{"class":31,"line":32},[29,87580,51426],{"class":309},[29,87582,51430],{"class":51429},[29,87584,51433],{"class":35},[29,87586,51436],{"class":309},[29,87588,87589,87591,87593,87595,87597,87599],{"class":31,"line":43},[29,87590,1218],{"class":309},[29,87592,50764],{"class":51429},[29,87594,51445],{"class":35},[29,87596,355],{"class":309},[29,87598,51450],{"class":103},[29,87600,51436],{"class":309},[29,87602,87603],{"class":31,"line":51},[29,87604,2575],{"emptyLinePlaceholder":233},[29,87606,87607,87609,87611],{"class":31,"line":59},[29,87608,1218],{"class":309},[29,87610,51463],{"class":51429},[29,87612,51436],{"class":309},[29,87614,87615,87617,87619,87621,87623,87625],{"class":31,"line":67},[29,87616,52273],{"class":309},[29,87618,51473],{"class":51429},[29,87620,51476],{"class":35},[29,87622,355],{"class":309},[29,87624,51481],{"class":103},[29,87626,51436],{"class":309},[29,87628,87629,87631,87633,87635,87637,87639,87641,87643,87645],{"class":31,"line":75},[29,87630,52273],{"class":309},[29,87632,51473],{"class":51429},[29,87634,15095],{"class":35},[29,87636,355],{"class":309},[29,87638,51520],{"class":103},[29,87640,51500],{"class":35},[29,87642,355],{"class":309},[29,87644,51527],{"class":103},[29,87646,51436],{"class":309},[29,87648,87649,87651,87653,87655,87657],{"class":31,"line":83},[29,87650,52273],{"class":309},[29,87652,51536],{"class":51429},[29,87654,51539],{"class":309},[29,87656,51536],{"class":51429},[29,87658,51436],{"class":309},[29,87660,87661,87663,87665],{"class":31,"line":158},[29,87662,51914],{"class":309},[29,87664,51463],{"class":51429},[29,87666,51436],{"class":309},[29,87668,87669],{"class":31,"line":166},[29,87670,2575],{"emptyLinePlaceholder":233},[29,87672,87673,87675,87677],{"class":31,"line":1505},[29,87674,1218],{"class":309},[29,87676,51929],{"class":51429},[29,87678,51436],{"class":309},[29,87680,87681,87683,87685,87687,87689],{"class":31,"line":1788},[29,87682,52273],{"class":309},[29,87684,51740],{"class":51429},[29,87686,55443],{"class":309},[29,87688,51740],{"class":51429},[29,87690,51436],{"class":309},[29,87692,87693,87695,87697],{"class":31,"line":1793},[29,87694,52273],{"class":309},[29,87696,51942],{"class":51429},[29,87698,51436],{"class":309},[29,87700,87701,87703,87705],{"class":31,"line":1799},[29,87702,70213],{"class":305},[29,87704,73902],{"class":35},[29,87706,11028],{"class":309},[29,87708,87709,87711,87713,87715,87717,87719,87721,87723,87725,87727,87730],{"class":31,"line":1804},[29,87710,55900],{"class":309},[29,87712,54528],{"class":35},[29,87714,310],{"class":309},[29,87716,82060],{"class":103},[29,87718,74378],{"class":309},[29,87720,355],{"class":305},[29,87722,11753],{"class":305},[29,87724,73918],{"class":35},[29,87726,17436],{"class":309},[29,87728,87729],{"class":35},"toLocaleString",[29,87731,2151],{"class":309},[29,87733,87734,87737,87740,87742],{"class":31,"line":1818},[29,87735,87736],{"class":35},"      setTimeout",[29,87738,87739],{"class":309},"(getTime, ",[29,87741,6585],{"class":39},[29,87743,316],{"class":309},[29,87745,87746],{"class":31,"line":1823},[29,87747,2362],{"class":309},[29,87749,87750,87753],{"class":31,"line":1829},[29,87751,87752],{"class":35},"    getTime",[29,87754,2151],{"class":309},[29,87756,87757,87759,87761],{"class":31,"line":1850},[29,87758,52546],{"class":309},[29,87760,51942],{"class":51429},[29,87762,51436],{"class":309},[29,87764,87765,87767,87769],{"class":31,"line":1855},[29,87766,51914],{"class":309},[29,87768,51929],{"class":51429},[29,87770,51436],{"class":309},[29,87772,87773],{"class":31,"line":1869},[29,87774,2575],{"emptyLinePlaceholder":233},[29,87776,87777,87779,87781],{"class":31,"line":1874},[29,87778,51914],{"class":309},[29,87780,50764],{"class":51429},[29,87782,51436],{"class":309},[171,87784,87785],{},[1638,87786],{"alt":24,"src":87787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[259,87789,87790],{"start":59},[178,87791,87481],{},[171,87793,87794],{},[1638,87795],{"alt":24,"src":87796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[171,87798,87799],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[171,87801,39318],{},[171,87803,87804],{},"这个是简易版的递归函数深拷贝",[171,87806,87807],{},"一定要注意先数组再对象，因为万物皆可对象",[19,87809,87811],{"className":50762,"code":87810,"language":50764,"meta":24,"style":24},"\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",[26,87812,87813,87823,87837,87841,87849,87863,87883,87895,87903,87907,87915,87923,87933,87942,87950,87966,87970,87978,87982,87986,87998,88003,88022,88038,88043,88048,88053,88068,88073,88078,88087,88095,88112,88120,88126,88134,88139,88144,88153,88157,88161,88165,88176,88185,88195,88209,88219,88227,88235,88243,88247],{"__ignoreMap":24},[29,87814,87815,87817,87819,87821],{"class":31,"line":32},[29,87816,51426],{"class":309},[29,87818,51430],{"class":51429},[29,87820,51433],{"class":35},[29,87822,51436],{"class":309},[29,87824,87825,87827,87829,87831,87833,87835],{"class":31,"line":43},[29,87826,1218],{"class":309},[29,87828,50764],{"class":51429},[29,87830,51445],{"class":35},[29,87832,355],{"class":309},[29,87834,51450],{"class":103},[29,87836,51436],{"class":309},[29,87838,87839],{"class":31,"line":51},[29,87840,2575],{"emptyLinePlaceholder":233},[29,87842,87843,87845,87847],{"class":31,"line":59},[29,87844,1218],{"class":309},[29,87846,51463],{"class":51429},[29,87848,51436],{"class":309},[29,87850,87851,87853,87855,87857,87859,87861],{"class":31,"line":67},[29,87852,52273],{"class":309},[29,87854,51473],{"class":51429},[29,87856,51476],{"class":35},[29,87858,355],{"class":309},[29,87860,51481],{"class":103},[29,87862,51436],{"class":309},[29,87864,87865,87867,87869,87871,87873,87875,87877,87879,87881],{"class":31,"line":75},[29,87866,52273],{"class":309},[29,87868,51473],{"class":51429},[29,87870,15095],{"class":35},[29,87872,355],{"class":309},[29,87874,51520],{"class":103},[29,87876,51500],{"class":35},[29,87878,355],{"class":309},[29,87880,51527],{"class":103},[29,87882,51436],{"class":309},[29,87884,87885,87887,87889,87891,87893],{"class":31,"line":83},[29,87886,52273],{"class":309},[29,87888,51536],{"class":51429},[29,87890,51539],{"class":309},[29,87892,51536],{"class":51429},[29,87894,51436],{"class":309},[29,87896,87897,87899,87901],{"class":31,"line":158},[29,87898,51914],{"class":309},[29,87900,51463],{"class":51429},[29,87902,51436],{"class":309},[29,87904,87905],{"class":31,"line":166},[29,87906,2575],{"emptyLinePlaceholder":233},[29,87908,87909,87911,87913],{"class":31,"line":1505},[29,87910,1218],{"class":309},[29,87912,51929],{"class":51429},[29,87914,51436],{"class":309},[29,87916,87917,87919,87921],{"class":31,"line":1788},[29,87918,52273],{"class":309},[29,87920,51942],{"class":51429},[29,87922,51436],{"class":309},[29,87924,87925,87927,87929,87931],{"class":31,"line":1793},[29,87926,11396],{"class":305},[29,87928,70100],{"class":39},[29,87930,13739],{"class":305},[29,87932,15747],{"class":309},[29,87934,87935,87937,87940],{"class":31,"line":1799},[29,87936,71745],{"class":309},[29,87938,87939],{"class":103},"'pink'",[29,87941,31595],{"class":309},[29,87943,87944,87946,87948],{"class":31,"line":1804},[29,87945,71755],{"class":309},[29,87947,958],{"class":39},[29,87949,31595],{"class":309},[29,87951,87952,87955,87958,87960,87963],{"class":31,"line":1818},[29,87953,87954],{"class":309},"      hobby: [",[29,87956,87957],{"class":103},"'乒乓球'",[29,87959,12610],{"class":309},[29,87961,87962],{"class":103},"'足球'",[29,87964,87965],{"class":309},"],\n",[29,87967,87968],{"class":31,"line":1823},[29,87969,78001],{"class":309},[29,87971,87972,87975],{"class":31,"line":1829},[29,87973,87974],{"class":309},"        baby: ",[29,87976,87977],{"class":103},"'小pink'\n",[29,87979,87980],{"class":31,"line":1850},[29,87981,52527],{"class":309},[29,87983,87984],{"class":31,"line":1855},[29,87985,2362],{"class":309},[29,87987,87988,87990,87993,87995],{"class":31,"line":1869},[29,87989,11396],{"class":305},[29,87991,87992],{"class":39}," o",[29,87994,13739],{"class":305},[29,87996,87997],{"class":309}," {}\n",[29,87999,88000],{"class":31,"line":1874},[29,88001,88002],{"class":367},"    \u002F\u002F 拷贝函数\n",[29,88004,88005,88007,88010,88012,88015,88017,88020],{"class":31,"line":1903},[29,88006,70213],{"class":305},[29,88008,88009],{"class":35}," deepCopy",[29,88011,310],{"class":309},[29,88013,88014],{"class":5391},"newObj",[29,88016,12610],{"class":309},[29,88018,88019],{"class":5391},"oldObj",[29,88021,12617],{"class":309},[29,88023,88024,88026,88028,88030,88033,88035],{"class":31,"line":1908},[29,88025,52413],{"class":305},[29,88027,1834],{"class":309},[29,88029,51976],{"class":305},[29,88031,88032],{"class":309}," k ",[29,88034,26172],{"class":305},[29,88036,88037],{"class":309}," oldObj) {\n",[29,88039,88040],{"class":31,"line":1925},[29,88041,88042],{"class":367},"        \u002F\u002F 处理数组的问题\n",[29,88044,88045],{"class":31,"line":1930},[29,88046,88047],{"class":367},"        \u002F\u002F 判断是否属于数组\n",[29,88049,88050],{"class":31,"line":1935},[29,88051,88052],{"class":367},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[29,88054,88055,88057,88060,88063,88066],{"class":31,"line":1940},[29,88056,2672],{"class":305},[29,88058,88059],{"class":309}," (oldObj[k] ",[29,88061,88062],{"class":305},"instanceof",[29,88064,88065],{"class":35}," Array",[29,88067,12617],{"class":309},[29,88069,88070],{"class":31,"line":1954},[29,88071,88072],{"class":367},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[29,88074,88075],{"class":31,"line":1959},[29,88076,88077],{"class":367},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[29,88079,88080,88083,88085],{"class":31,"line":2752},[29,88081,88082],{"class":309},"          newObj[k] ",[29,88084,355],{"class":305},[29,88086,51967],{"class":309},[29,88088,88089,88092],{"class":31,"line":2766},[29,88090,88091],{"class":35},"          deepCopy",[29,88093,88094],{"class":309},"(newObj[k], oldObj[k])\n",[29,88096,88097,88099,88101,88103,88105,88107,88110],{"class":31,"line":2774},[29,88098,80209],{"class":309},[29,88100,1877],{"class":305},[29,88102,1880],{"class":305},[29,88104,88059],{"class":309},[29,88106,88062],{"class":305},[29,88108,88109],{"class":35}," Object",[29,88111,12617],{"class":309},[29,88113,88114,88116,88118],{"class":31,"line":2779},[29,88115,88082],{"class":309},[29,88117,355],{"class":305},[29,88119,87997],{"class":309},[29,88121,88122,88124],{"class":31,"line":2785},[29,88123,88091],{"class":35},[29,88125,88094],{"class":309},[29,88127,88128,88130,88132],{"class":31,"line":2791},[29,88129,80209],{"class":309},[29,88131,1877],{"class":305},[29,88133,15747],{"class":309},[29,88135,88136],{"class":31,"line":2796},[29,88137,88138],{"class":367},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[29,88140,88141],{"class":31,"line":8123},[29,88142,88143],{"class":367},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[29,88145,88146,88148,88150],{"class":31,"line":8147},[29,88147,88082],{"class":309},[29,88149,355],{"class":305},[29,88151,88152],{"class":309}," oldObj[k]\n",[29,88154,88155],{"class":31,"line":8152},[29,88156,2704],{"class":309},[29,88158,88159],{"class":31,"line":8158},[29,88160,52527],{"class":309},[29,88162,88163],{"class":31,"line":8185},[29,88164,2362],{"class":309},[29,88166,88167,88170,88173],{"class":31,"line":8190},[29,88168,88169],{"class":35},"    deepCopy",[29,88171,88172],{"class":309},"(o, obj) ",[29,88174,88175],{"class":367},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[29,88177,88178,88180,88182],{"class":31,"line":8196},[29,88179,73882],{"class":309},[29,88181,58376],{"class":35},[29,88183,88184],{"class":309},"(o)\n",[29,88186,88187,88190,88192],{"class":31,"line":8208},[29,88188,88189],{"class":309},"    o.age ",[29,88191,355],{"class":305},[29,88193,88194],{"class":39}," 20\n",[29,88196,88197,88200,88202,88204,88206],{"class":31,"line":8220},[29,88198,88199],{"class":309},"    o.hobby[",[29,88201,499],{"class":39},[29,88203,4618],{"class":309},[29,88205,355],{"class":305},[29,88207,88208],{"class":103}," '篮球'\n",[29,88210,88211,88214,88216],{"class":31,"line":8232},[29,88212,88213],{"class":309},"    o.family ",[29,88215,355],{"class":305},[29,88217,88218],{"class":103}," '老pink'\n",[29,88220,88221,88223,88225],{"class":31,"line":9891},[29,88222,73882],{"class":309},[29,88224,58376],{"class":35},[29,88226,70165],{"class":309},[29,88228,88229,88231,88233],{"class":31,"line":9916},[29,88230,52546],{"class":309},[29,88232,51942],{"class":51429},[29,88234,51436],{"class":309},[29,88236,88237,88239,88241],{"class":31,"line":9939},[29,88238,51914],{"class":309},[29,88240,51929],{"class":51429},[29,88242,51436],{"class":309},[29,88244,88245],{"class":31,"line":9963},[29,88246,2575],{"emptyLinePlaceholder":233},[29,88248,88249,88251,88253],{"class":31,"line":9968},[29,88250,51914],{"class":309},[29,88252,50764],{"class":51429},[29,88254,51436],{"class":309},[171,88256,88257],{},[1638,88258],{"alt":24,"src":88259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22173,88261,88263,88264],{"id":88262},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[457,88265,88266],{},"js库lodash里面cloneDeep内部实现了深拷贝",[171,88268,88269],{},[546,88270,88271],{"href":88271,"rel":88272},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24038],[171,88274,88275],{},"lodash里边的方法都要加上一个下划线_",[171,88277,88278],{},"_.cloneDeep()",[19,88280,88282],{"className":50762,"code":88281,"language":50764,"meta":24,"style":24},"\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",[26,88283,88284,88294,88308,88312,88320,88334,88354,88366,88374,88378,88386,88391,88410,88418,88428,88436,88444,88456,88460,88466,88470,88474,88490,88498,88507,88515,88523,88531,88535],{"__ignoreMap":24},[29,88285,88286,88288,88290,88292],{"class":31,"line":32},[29,88287,51426],{"class":309},[29,88289,51430],{"class":51429},[29,88291,51433],{"class":35},[29,88293,51436],{"class":309},[29,88295,88296,88298,88300,88302,88304,88306],{"class":31,"line":43},[29,88297,1218],{"class":309},[29,88299,50764],{"class":51429},[29,88301,51445],{"class":35},[29,88303,355],{"class":309},[29,88305,51450],{"class":103},[29,88307,51436],{"class":309},[29,88309,88310],{"class":31,"line":51},[29,88311,2575],{"emptyLinePlaceholder":233},[29,88313,88314,88316,88318],{"class":31,"line":59},[29,88315,1218],{"class":309},[29,88317,51463],{"class":51429},[29,88319,51436],{"class":309},[29,88321,88322,88324,88326,88328,88330,88332],{"class":31,"line":67},[29,88323,52273],{"class":309},[29,88325,51473],{"class":51429},[29,88327,51476],{"class":35},[29,88329,355],{"class":309},[29,88331,51481],{"class":103},[29,88333,51436],{"class":309},[29,88335,88336,88338,88340,88342,88344,88346,88348,88350,88352],{"class":31,"line":75},[29,88337,52273],{"class":309},[29,88339,51473],{"class":51429},[29,88341,15095],{"class":35},[29,88343,355],{"class":309},[29,88345,51520],{"class":103},[29,88347,51500],{"class":35},[29,88349,355],{"class":309},[29,88351,51527],{"class":103},[29,88353,51436],{"class":309},[29,88355,88356,88358,88360,88362,88364],{"class":31,"line":83},[29,88357,52273],{"class":309},[29,88359,51536],{"class":51429},[29,88361,51539],{"class":309},[29,88363,51536],{"class":51429},[29,88365,51436],{"class":309},[29,88367,88368,88370,88372],{"class":31,"line":158},[29,88369,51914],{"class":309},[29,88371,51463],{"class":51429},[29,88373,51436],{"class":309},[29,88375,88376],{"class":31,"line":166},[29,88377,2575],{"emptyLinePlaceholder":233},[29,88379,88380,88382,88384],{"class":31,"line":1505},[29,88381,1218],{"class":309},[29,88383,51929],{"class":51429},[29,88385,51436],{"class":309},[29,88387,88388],{"class":31,"line":1788},[29,88389,88390],{"class":367},"  \u003C!-- 先引用这个库 -->\n",[29,88392,88393,88395,88397,88399,88401,88404,88406,88408],{"class":31,"line":1793},[29,88394,52273],{"class":309},[29,88396,51942],{"class":51429},[29,88398,55368],{"class":35},[29,88400,355],{"class":309},[29,88402,88403],{"class":103},"\"lodash.min.js\"",[29,88405,55443],{"class":309},[29,88407,51942],{"class":51429},[29,88409,51436],{"class":309},[29,88411,88412,88414,88416],{"class":31,"line":1799},[29,88413,52273],{"class":309},[29,88415,51942],{"class":51429},[29,88417,51436],{"class":309},[29,88419,88420,88422,88424,88426],{"class":31,"line":1804},[29,88421,11396],{"class":305},[29,88423,70100],{"class":39},[29,88425,13739],{"class":305},[29,88427,15747],{"class":309},[29,88429,88430,88432,88434],{"class":31,"line":1818},[29,88431,71745],{"class":309},[29,88433,87939],{"class":103},[29,88435,31595],{"class":309},[29,88437,88438,88440,88442],{"class":31,"line":1823},[29,88439,71755],{"class":309},[29,88441,958],{"class":39},[29,88443,31595],{"class":309},[29,88445,88446,88448,88450,88452,88454],{"class":31,"line":1829},[29,88447,87954],{"class":309},[29,88449,87957],{"class":103},[29,88451,12610],{"class":309},[29,88453,87962],{"class":103},[29,88455,87965],{"class":309},[29,88457,88458],{"class":31,"line":1850},[29,88459,78001],{"class":309},[29,88461,88462,88464],{"class":31,"line":1855},[29,88463,87974],{"class":309},[29,88465,87977],{"class":103},[29,88467,88468],{"class":31,"line":1869},[29,88469,52527],{"class":309},[29,88471,88472],{"class":31,"line":1874},[29,88473,2362],{"class":309},[29,88475,88476,88478,88480,88482,88485,88488],{"class":31,"line":1903},[29,88477,11396],{"class":305},[29,88479,87992],{"class":39},[29,88481,13739],{"class":305},[29,88483,88484],{"class":309}," _.",[29,88486,88487],{"class":35},"cloneDeep",[29,88489,70165],{"class":309},[29,88491,88492,88494,88496],{"class":31,"line":1908},[29,88493,73882],{"class":309},[29,88495,58376],{"class":35},[29,88497,88184],{"class":309},[29,88499,88500,88503,88505],{"class":31,"line":1925},[29,88501,88502],{"class":309},"    o.family.baby ",[29,88504,355],{"class":305},[29,88506,88218],{"class":103},[29,88508,88509,88511,88513],{"class":31,"line":1930},[29,88510,73882],{"class":309},[29,88512,58376],{"class":35},[29,88514,70165],{"class":309},[29,88516,88517,88519,88521],{"class":31,"line":1935},[29,88518,52546],{"class":309},[29,88520,51942],{"class":51429},[29,88522,51436],{"class":309},[29,88524,88525,88527,88529],{"class":31,"line":1940},[29,88526,51914],{"class":309},[29,88528,51929],{"class":51429},[29,88530,51436],{"class":309},[29,88532,88533],{"class":31,"line":1954},[29,88534,2575],{"emptyLinePlaceholder":233},[29,88536,88537,88539,88541],{"class":31,"line":1959},[29,88538,51914],{"class":309},[29,88540,50764],{"class":51429},[29,88542,51436],{"class":309},[171,88544,88545],{},[1638,88546],{"alt":24,"src":88547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22173,88549,88551],{"id":88550},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[19,88553,88555],{"className":50762,"code":88554,"language":50764,"meta":24,"style":24},"\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",[26,88556,88557,88567,88581,88585,88593,88607,88627,88639,88647,88651,88659,88667,88677,88685,88693,88705,88709,88715,88719,88723,88728,88733,88738,88764,88772,88781,88789,88797,88805,88809],{"__ignoreMap":24},[29,88558,88559,88561,88563,88565],{"class":31,"line":32},[29,88560,51426],{"class":309},[29,88562,51430],{"class":51429},[29,88564,51433],{"class":35},[29,88566,51436],{"class":309},[29,88568,88569,88571,88573,88575,88577,88579],{"class":31,"line":43},[29,88570,1218],{"class":309},[29,88572,50764],{"class":51429},[29,88574,51445],{"class":35},[29,88576,355],{"class":309},[29,88578,51450],{"class":103},[29,88580,51436],{"class":309},[29,88582,88583],{"class":31,"line":51},[29,88584,2575],{"emptyLinePlaceholder":233},[29,88586,88587,88589,88591],{"class":31,"line":59},[29,88588,1218],{"class":309},[29,88590,51463],{"class":51429},[29,88592,51436],{"class":309},[29,88594,88595,88597,88599,88601,88603,88605],{"class":31,"line":67},[29,88596,52273],{"class":309},[29,88598,51473],{"class":51429},[29,88600,51476],{"class":35},[29,88602,355],{"class":309},[29,88604,51481],{"class":103},[29,88606,51436],{"class":309},[29,88608,88609,88611,88613,88615,88617,88619,88621,88623,88625],{"class":31,"line":75},[29,88610,52273],{"class":309},[29,88612,51473],{"class":51429},[29,88614,15095],{"class":35},[29,88616,355],{"class":309},[29,88618,51520],{"class":103},[29,88620,51500],{"class":35},[29,88622,355],{"class":309},[29,88624,51527],{"class":103},[29,88626,51436],{"class":309},[29,88628,88629,88631,88633,88635,88637],{"class":31,"line":83},[29,88630,52273],{"class":309},[29,88632,51536],{"class":51429},[29,88634,51539],{"class":309},[29,88636,51536],{"class":51429},[29,88638,51436],{"class":309},[29,88640,88641,88643,88645],{"class":31,"line":158},[29,88642,51914],{"class":309},[29,88644,51463],{"class":51429},[29,88646,51436],{"class":309},[29,88648,88649],{"class":31,"line":166},[29,88650,2575],{"emptyLinePlaceholder":233},[29,88652,88653,88655,88657],{"class":31,"line":1505},[29,88654,1218],{"class":309},[29,88656,51929],{"class":51429},[29,88658,51436],{"class":309},[29,88660,88661,88663,88665],{"class":31,"line":1788},[29,88662,52273],{"class":309},[29,88664,51942],{"class":51429},[29,88666,51436],{"class":309},[29,88668,88669,88671,88673,88675],{"class":31,"line":1793},[29,88670,11396],{"class":305},[29,88672,70100],{"class":39},[29,88674,13739],{"class":305},[29,88676,15747],{"class":309},[29,88678,88679,88681,88683],{"class":31,"line":1799},[29,88680,71745],{"class":309},[29,88682,87939],{"class":103},[29,88684,31595],{"class":309},[29,88686,88687,88689,88691],{"class":31,"line":1804},[29,88688,71755],{"class":309},[29,88690,958],{"class":39},[29,88692,31595],{"class":309},[29,88694,88695,88697,88699,88701,88703],{"class":31,"line":1818},[29,88696,87954],{"class":309},[29,88698,87957],{"class":103},[29,88700,12610],{"class":309},[29,88702,87962],{"class":103},[29,88704,87965],{"class":309},[29,88706,88707],{"class":31,"line":1823},[29,88708,78001],{"class":309},[29,88710,88711,88713],{"class":31,"line":1829},[29,88712,87974],{"class":309},[29,88714,87977],{"class":103},[29,88716,88717],{"class":31,"line":1850},[29,88718,52527],{"class":309},[29,88720,88721],{"class":31,"line":1855},[29,88722,2362],{"class":309},[29,88724,88725],{"class":31,"line":1869},[29,88726,88727],{"class":367},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[29,88729,88730],{"class":31,"line":1874},[29,88731,88732],{"class":367},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[29,88734,88735],{"class":31,"line":1903},[29,88736,88737],{"class":367},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[29,88739,88740,88742,88744,88746,88749,88751,88754,88756,88758,88760,88762],{"class":31,"line":1908},[29,88741,11396],{"class":305},[29,88743,87992],{"class":39},[29,88745,13739],{"class":305},[29,88747,88748],{"class":39}," JSON",[29,88750,866],{"class":309},[29,88752,88753],{"class":35},"parse",[29,88755,310],{"class":309},[29,88757,71793],{"class":39},[29,88759,866],{"class":309},[29,88761,71798],{"class":35},[29,88763,71801],{"class":309},[29,88765,88766,88768,88770],{"class":31,"line":1925},[29,88767,73882],{"class":309},[29,88769,58376],{"class":35},[29,88771,88184],{"class":309},[29,88773,88774,88776,88778],{"class":31,"line":1930},[29,88775,88502],{"class":309},[29,88777,355],{"class":305},[29,88779,88780],{"class":103}," '123'\n",[29,88782,88783,88785,88787],{"class":31,"line":1935},[29,88784,73882],{"class":309},[29,88786,58376],{"class":35},[29,88788,70165],{"class":309},[29,88790,88791,88793,88795],{"class":31,"line":1940},[29,88792,52546],{"class":309},[29,88794,51942],{"class":51429},[29,88796,51436],{"class":309},[29,88798,88799,88801,88803],{"class":31,"line":1954},[29,88800,51914],{"class":309},[29,88802,51929],{"class":51429},[29,88804,51436],{"class":309},[29,88806,88807],{"class":31,"line":1959},[29,88808,2575],{"emptyLinePlaceholder":233},[29,88810,88811,88813,88815],{"class":31,"line":2752},[29,88812,51914],{"class":309},[29,88814,50764],{"class":51429},[29,88816,51436],{"class":309},[171,88818,88819],{},[1638,88820],{"alt":24,"src":88821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88823,88825],{"id":88824},"_415-异常处理","4.15 异常处理",[259,88827,88828],{},[178,88829,88830],{},"throw抛异常",[171,88832,88833],{},[1638,88834],{"alt":24,"src":88835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[259,88837,88838],{"start":43},[178,88839,88840],{},"try\u002Fcatch 捕获错误信息",[171,88842,88843],{},[1638,88844],{"alt":24,"src":88845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[19,88847,88849],{"className":50762,"code":88848,"language":50764,"meta":24,"style":24},"\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",[26,88850,88851,88861,88875,88879,88887,88901,88921,88933,88941,88945,88953,88965,88973,88982,88989,88994,89013,89022,89033,89038,89048,89053,89058,89063,89080,89084,89089,89096,89108,89112,89124,89128,89132,89137,89142,89149,89157,89165,89169],{"__ignoreMap":24},[29,88852,88853,88855,88857,88859],{"class":31,"line":32},[29,88854,51426],{"class":309},[29,88856,51430],{"class":51429},[29,88858,51433],{"class":35},[29,88860,51436],{"class":309},[29,88862,88863,88865,88867,88869,88871,88873],{"class":31,"line":43},[29,88864,1218],{"class":309},[29,88866,50764],{"class":51429},[29,88868,51445],{"class":35},[29,88870,355],{"class":309},[29,88872,51450],{"class":103},[29,88874,51436],{"class":309},[29,88876,88877],{"class":31,"line":51},[29,88878,2575],{"emptyLinePlaceholder":233},[29,88880,88881,88883,88885],{"class":31,"line":59},[29,88882,1218],{"class":309},[29,88884,51463],{"class":51429},[29,88886,51436],{"class":309},[29,88888,88889,88891,88893,88895,88897,88899],{"class":31,"line":67},[29,88890,52273],{"class":309},[29,88892,51473],{"class":51429},[29,88894,51476],{"class":35},[29,88896,355],{"class":309},[29,88898,51481],{"class":103},[29,88900,51436],{"class":309},[29,88902,88903,88905,88907,88909,88911,88913,88915,88917,88919],{"class":31,"line":75},[29,88904,52273],{"class":309},[29,88906,51473],{"class":51429},[29,88908,15095],{"class":35},[29,88910,355],{"class":309},[29,88912,51520],{"class":103},[29,88914,51500],{"class":35},[29,88916,355],{"class":309},[29,88918,51527],{"class":103},[29,88920,51436],{"class":309},[29,88922,88923,88925,88927,88929,88931],{"class":31,"line":83},[29,88924,52273],{"class":309},[29,88926,51536],{"class":51429},[29,88928,51539],{"class":309},[29,88930,51536],{"class":51429},[29,88932,51436],{"class":309},[29,88934,88935,88937,88939],{"class":31,"line":158},[29,88936,51914],{"class":309},[29,88938,51463],{"class":51429},[29,88940,51436],{"class":309},[29,88942,88943],{"class":31,"line":166},[29,88944,2575],{"emptyLinePlaceholder":233},[29,88946,88947,88949,88951],{"class":31,"line":1505},[29,88948,1218],{"class":309},[29,88950,51929],{"class":51429},[29,88952,51436],{"class":309},[29,88954,88955,88957,88959,88961,88963],{"class":31,"line":1788},[29,88956,52273],{"class":309},[29,88958,171],{"class":51429},[29,88960,53623],{"class":309},[29,88962,171],{"class":51429},[29,88964,51436],{"class":309},[29,88966,88967,88969,88971],{"class":31,"line":1793},[29,88968,52273],{"class":309},[29,88970,51942],{"class":51429},[29,88972,51436],{"class":309},[29,88974,88975,88977,88980],{"class":31,"line":1799},[29,88976,70213],{"class":305},[29,88978,88979],{"class":35}," fn",[29,88981,11028],{"class":309},[29,88983,88984,88987],{"class":31,"line":1804},[29,88985,88986],{"class":305},"      try",[29,88988,15747],{"class":309},[29,88990,88991],{"class":31,"line":1818},[29,88992,88993],{"class":367},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[29,88995,88996,88998,89000,89002,89004,89006,89008,89011],{"class":31,"line":1823},[29,88997,61399],{"class":305},[29,88999,7000],{"class":39},[29,89001,13739],{"class":305},[29,89003,54525],{"class":309},[29,89005,54528],{"class":35},[29,89007,310],{"class":309},[29,89009,89010],{"class":103},"'.p'",[29,89012,316],{"class":309},[29,89014,89015,89018,89020],{"class":31,"line":1829},[29,89016,89017],{"class":309},"        p.style.color ",[29,89019,355],{"class":305},[29,89021,67180],{"class":103},[29,89023,89024,89027,89030],{"class":31,"line":1850},[29,89025,89026],{"class":309},"      } ",[29,89028,89029],{"class":305},"catch",[29,89031,89032],{"class":309}," (err) {\n",[29,89034,89035],{"class":31,"line":1855},[29,89036,89037],{"class":367},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[29,89039,89040,89043,89045],{"class":31,"line":1869},[29,89041,89042],{"class":309},"        console.",[29,89044,58376],{"class":35},[29,89046,89047],{"class":309},"(err.message)\n",[29,89049,89050],{"class":31,"line":1874},[29,89051,89052],{"class":367},"        \u002F\u002F 想要中断程序，需要加return\n",[29,89054,89055],{"class":31,"line":1903},[29,89056,89057],{"class":367},"        \u002F\u002F return\n",[29,89059,89060],{"class":31,"line":1908},[29,89061,89062],{"class":367},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[29,89064,89065,89068,89070,89073,89075,89078],{"class":31,"line":1925},[29,89066,89067],{"class":305},"        throw",[29,89069,11753],{"class":305},[29,89071,89072],{"class":35}," Error",[29,89074,310],{"class":309},[29,89076,89077],{"class":103},"'你看看，选择器错误了吧'",[29,89079,316],{"class":309},[29,89081,89082],{"class":31,"line":1930},[29,89083,52527],{"class":309},[29,89085,89086],{"class":31,"line":1935},[29,89087,89088],{"class":367},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[29,89090,89091,89094],{"class":31,"line":1940},[29,89092,89093],{"class":305},"      finally",[29,89095,15747],{"class":309},[29,89097,89098,89101,89103,89106],{"class":31,"line":1954},[29,89099,89100],{"class":35},"        alert",[29,89102,310],{"class":309},[29,89104,89105],{"class":103},"'弹出对话框'",[29,89107,316],{"class":309},[29,89109,89110],{"class":31,"line":1959},[29,89111,52527],{"class":309},[29,89113,89114,89116,89118,89120,89122],{"class":31,"line":2752},[29,89115,58373],{"class":309},[29,89117,58376],{"class":35},[29,89119,310],{"class":309},[29,89121,780],{"class":39},[29,89123,316],{"class":309},[29,89125,89126],{"class":31,"line":2766},[29,89127,2575],{"emptyLinePlaceholder":233},[29,89129,89130],{"class":31,"line":2774},[29,89131,2362],{"class":309},[29,89133,89134],{"class":31,"line":2779},[29,89135,89136],{"class":367},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[29,89138,89139],{"class":31,"line":2785},[29,89140,89141],{"class":367},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[29,89143,89144,89147],{"class":31,"line":2791},[29,89145,89146],{"class":35},"    fn",[29,89148,2151],{"class":309},[29,89150,89151,89153,89155],{"class":31,"line":2796},[29,89152,52546],{"class":309},[29,89154,51942],{"class":51429},[29,89156,51436],{"class":309},[29,89158,89159,89161,89163],{"class":31,"line":8123},[29,89160,51914],{"class":309},[29,89162,51929],{"class":51429},[29,89164,51436],{"class":309},[29,89166,89167],{"class":31,"line":8147},[29,89168,2575],{"emptyLinePlaceholder":233},[29,89170,89171,89173,89175],{"class":31,"line":8152},[29,89172,51914],{"class":309},[29,89174,50764],{"class":51429},[29,89176,51436],{"class":309},[171,89178,89179],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[259,89181,89182],{"start":51},[178,89183,89184],{},"debugger",[171,89186,89187],{},[1638,89188],{"alt":24,"src":89189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[171,89191,89192],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89194,89196],{"id":89195},"_416-处理this","4.16 处理this",[275,89198,89200],{"id":89199},"_4161-this的指向","4.16.1 this的指向",[259,89202,89203],{},[178,89204,89205],{},"普通函数的this",[171,89207,89208],{},[1638,89209],{"alt":24,"src":89210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[259,89212,89213],{"start":43},[178,89214,89215],{},"箭头函数的this",[171,89217,89218],{},[1638,89219],{"alt":24,"src":89220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[171,89222,89223],{},[1638,89224],{"alt":24,"src":89225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[171,89227,89228],{},[1638,89229],{"alt":24,"src":89230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[275,89232,89234],{"id":89233},"_4162-this的改变","4.16.2 this的改变",[171,89236,89237],{},"call() apply() bind()",[259,89239,89240],{},[178,89241,89242],{},"call()",[171,89244,89245],{},[1638,89246],{"alt":24,"src":89247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[171,89249,89250],{},"两个作用：①调用函数；②改变this指向",[19,89252,89254],{"className":53196,"code":89253,"language":53198,"meta":24,"style":24},"\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",[26,89255,89256,89264,89272,89276,89281,89285,89290,89295,89300,89304,89309,89317],{"__ignoreMap":24},[29,89257,89258,89260,89262],{"class":31,"line":32},[29,89259,1218],{"class":309},[29,89261,51929],{"class":51429},[29,89263,51436],{"class":309},[29,89265,89266,89268,89270],{"class":31,"line":43},[29,89267,52273],{"class":309},[29,89269,51942],{"class":51429},[29,89271,51436],{"class":309},[29,89273,89274],{"class":31,"line":51},[29,89275,71652],{"class":309},[29,89277,89278],{"class":31,"line":59},[29,89279,89280],{"class":309},"      uname: 'pink'\n",[29,89282,89283],{"class":31,"line":67},[29,89284,2362],{"class":309},[29,89286,89287],{"class":31,"line":75},[29,89288,89289],{"class":309},"    function fn(x, y) {\n",[29,89291,89292],{"class":31,"line":83},[29,89293,89294],{"class":309},"      console.log(this)  \u002F\u002Fwindow\n",[29,89296,89297],{"class":31,"line":158},[29,89298,89299],{"class":309},"      console.log(x + y)\n",[29,89301,89302],{"class":31,"line":166},[29,89303,2362],{"class":309},[29,89305,89306],{"class":31,"line":1505},[29,89307,89308],{"class":309},"    fn.call(obj, 1, 2)\n",[29,89310,89311,89313,89315],{"class":31,"line":1788},[29,89312,52546],{"class":309},[29,89314,51942],{"class":51429},[29,89316,51436],{"class":309},[29,89318,89319,89321,89323],{"class":31,"line":1793},[29,89320,51914],{"class":309},[29,89322,51929],{"class":51429},[29,89324,51436],{"class":309},[171,89326,89327],{},[1638,89328],{"alt":24,"src":89329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[259,89331,89332],{"start":43},[178,89333,89334],{},"apply()",[171,89336,89337],{},[1638,89338],{"alt":24,"src":89339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[171,89341,89250],{},[171,89343,89344],{},"call传递的是普通参数，而apply必须传递的是数组",[19,89346,89348],{"className":50762,"code":89347,"language":50764,"meta":24,"style":24},"\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",[26,89349,89350,89360,89374,89378,89386,89400,89420,89432,89440,89444,89452,89460,89470,89477,89481,89486,89502,89514,89528,89532,89537,89556,89561,89565,89570,89575,89583,89588,89610,89615,89631,89647,89659,89663,89668,89687,89695,89703,89707],{"__ignoreMap":24},[29,89351,89352,89354,89356,89358],{"class":31,"line":32},[29,89353,51426],{"class":309},[29,89355,51430],{"class":51429},[29,89357,51433],{"class":35},[29,89359,51436],{"class":309},[29,89361,89362,89364,89366,89368,89370,89372],{"class":31,"line":43},[29,89363,1218],{"class":309},[29,89365,50764],{"class":51429},[29,89367,51445],{"class":35},[29,89369,355],{"class":309},[29,89371,51450],{"class":103},[29,89373,51436],{"class":309},[29,89375,89376],{"class":31,"line":51},[29,89377,2575],{"emptyLinePlaceholder":233},[29,89379,89380,89382,89384],{"class":31,"line":59},[29,89381,1218],{"class":309},[29,89383,51463],{"class":51429},[29,89385,51436],{"class":309},[29,89387,89388,89390,89392,89394,89396,89398],{"class":31,"line":67},[29,89389,52273],{"class":309},[29,89391,51473],{"class":51429},[29,89393,51476],{"class":35},[29,89395,355],{"class":309},[29,89397,51481],{"class":103},[29,89399,51436],{"class":309},[29,89401,89402,89404,89406,89408,89410,89412,89414,89416,89418],{"class":31,"line":75},[29,89403,52273],{"class":309},[29,89405,51473],{"class":51429},[29,89407,15095],{"class":35},[29,89409,355],{"class":309},[29,89411,51520],{"class":103},[29,89413,51500],{"class":35},[29,89415,355],{"class":309},[29,89417,51527],{"class":103},[29,89419,51436],{"class":309},[29,89421,89422,89424,89426,89428,89430],{"class":31,"line":83},[29,89423,52273],{"class":309},[29,89425,51536],{"class":51429},[29,89427,51539],{"class":309},[29,89429,51536],{"class":51429},[29,89431,51436],{"class":309},[29,89433,89434,89436,89438],{"class":31,"line":158},[29,89435,51914],{"class":309},[29,89437,51463],{"class":51429},[29,89439,51436],{"class":309},[29,89441,89442],{"class":31,"line":166},[29,89443,2575],{"emptyLinePlaceholder":233},[29,89445,89446,89448,89450],{"class":31,"line":1505},[29,89447,1218],{"class":309},[29,89449,51929],{"class":51429},[29,89451,51436],{"class":309},[29,89453,89454,89456,89458],{"class":31,"line":1788},[29,89455,52273],{"class":309},[29,89457,51942],{"class":51429},[29,89459,51436],{"class":309},[29,89461,89462,89464,89466,89468],{"class":31,"line":1793},[29,89463,11396],{"class":305},[29,89465,70100],{"class":39},[29,89467,13739],{"class":305},[29,89469,15747],{"class":309},[29,89471,89472,89474],{"class":31,"line":1799},[29,89473,71755],{"class":309},[29,89475,89476],{"class":39},"18\n",[29,89478,89479],{"class":31,"line":1804},[29,89480,2362],{"class":309},[29,89482,89483],{"class":31,"line":1818},[29,89484,89485],{"class":367},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[29,89487,89488,89490,89492,89494,89496,89498,89500],{"class":31,"line":1823},[29,89489,70213],{"class":305},[29,89491,88979],{"class":35},[29,89493,310],{"class":309},[29,89495,1128],{"class":5391},[29,89497,12610],{"class":309},[29,89499,1153],{"class":5391},[29,89501,12617],{"class":309},[29,89503,89504,89506,89508,89510,89512],{"class":31,"line":1829},[29,89505,58373],{"class":309},[29,89507,58376],{"class":35},[29,89509,310],{"class":309},[29,89511,87122],{"class":39},[29,89513,316],{"class":309},[29,89515,89516,89518,89520,89523,89525],{"class":31,"line":1850},[29,89517,58373],{"class":309},[29,89519,58376],{"class":35},[29,89521,89522],{"class":309},"(x ",[29,89524,789],{"class":305},[29,89526,89527],{"class":309}," y)\n",[29,89529,89530],{"class":31,"line":1855},[29,89531,2362],{"class":309},[29,89533,89534],{"class":31,"line":1869},[29,89535,89536],{"class":367},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[29,89538,89539,89542,89545,89548,89550,89552,89554],{"class":31,"line":1874},[29,89540,89541],{"class":309},"    fn.",[29,89543,89544],{"class":35},"apply",[29,89546,89547],{"class":309},"(obj, [",[29,89549,525],{"class":39},[29,89551,12610],{"class":309},[29,89553,386],{"class":39},[29,89555,4832],{"class":309},[29,89557,89558],{"class":31,"line":1903},[29,89559,89560],{"class":367},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[29,89562,89563],{"class":31,"line":1908},[29,89564,2575],{"emptyLinePlaceholder":233},[29,89566,89567],{"class":31,"line":1925},[29,89568,89569],{"class":367},"    \u002F\u002F 使用场景：求数组最大值\n",[29,89571,89572],{"class":31,"line":1930},[29,89573,89574],{"class":367},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[29,89576,89577,89580],{"class":31,"line":1935},[29,89578,89579],{"class":367},"    \u002F\u002F console.log(max)",[29,89581,89582],{"class":367},"   \u002F\u002F3\n",[29,89584,89585],{"class":31,"line":1940},[29,89586,89587],{"class":367},"    \u002F\u002F 指向空或者Math都是可以的\n",[29,89589,89590,89592,89594,89596,89598,89600,89602,89604,89606,89608],{"class":31,"line":1954},[29,89591,11396],{"class":305},[29,89593,57824],{"class":39},[29,89595,13739],{"class":305},[29,89597,52355],{"class":309},[29,89599,619],{"class":39},[29,89601,12610],{"class":309},[29,89603,812],{"class":39},[29,89605,12610],{"class":309},[29,89607,843],{"class":39},[29,89609,33375],{"class":309},[29,89611,89612],{"class":31,"line":1959},[29,89613,89614],{"class":367},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[29,89616,89617,89619,89621,89623,89626,89628],{"class":31,"line":2752},[29,89618,11396],{"class":305},[29,89620,6126],{"class":39},[29,89622,13739],{"class":305},[29,89624,89625],{"class":309}," Math.max.",[29,89627,89544],{"class":35},[29,89629,89630],{"class":309},"(Math, arr)\n",[29,89632,89633,89635,89638,89640,89643,89645],{"class":31,"line":2766},[29,89634,11396],{"class":305},[29,89636,89637],{"class":39}," min",[29,89639,13739],{"class":305},[29,89641,89642],{"class":309}," Math.min.",[29,89644,89544],{"class":35},[29,89646,89630],{"class":309},[29,89648,89649,89651,89653,89656],{"class":31,"line":2774},[29,89650,73882],{"class":309},[29,89652,58376],{"class":35},[29,89654,89655],{"class":309},"(max, min)     ",[29,89657,89658],{"class":367},"\u002F\u002F100,4\n",[29,89660,89661],{"class":31,"line":2779},[29,89662,2575],{"emptyLinePlaceholder":233},[29,89664,89665],{"class":31,"line":2785},[29,89666,89667],{"class":367},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[29,89669,89670,89672,89674,89677,89679,89681,89684],{"class":31,"line":2791},[29,89671,73882],{"class":309},[29,89673,58376],{"class":35},[29,89675,89676],{"class":309},"(Max.",[29,89678,6190],{"class":35},[29,89680,310],{"class":309},[29,89682,89683],{"class":305},"...",[29,89685,89686],{"class":309},"arr))\n",[29,89688,89689,89691,89693],{"class":31,"line":2796},[29,89690,52546],{"class":309},[29,89692,51942],{"class":51429},[29,89694,51436],{"class":309},[29,89696,89697,89699,89701],{"class":31,"line":8123},[29,89698,51914],{"class":309},[29,89700,51929],{"class":51429},[29,89702,51436],{"class":309},[29,89704,89705],{"class":31,"line":8147},[29,89706,2575],{"emptyLinePlaceholder":233},[29,89708,89709,89711,89713],{"class":31,"line":8152},[29,89710,51914],{"class":309},[29,89712,50764],{"class":51429},[29,89714,51436],{"class":309},[171,89716,89717],{},[1638,89718],{"alt":24,"src":89719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[259,89721,89722],{"start":51},[178,89723,89724],{},"bind()",[171,89726,89727],{},[1638,89728],{"alt":24,"src":89729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[171,89731,89732],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[171,89734,89735],{},"bind的语法跟call很相似",[19,89737,89739],{"className":53196,"code":89738,"language":53198,"meta":24,"style":24},"\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",[26,89740,89741,89749,89757,89761,89766,89770,89774,89779,89783,89788,89793,89798,89803,89808,89813,89818,89822,89830],{"__ignoreMap":24},[29,89742,89743,89745,89747],{"class":31,"line":32},[29,89744,1218],{"class":309},[29,89746,51929],{"class":51429},[29,89748,51436],{"class":309},[29,89750,89751,89753,89755],{"class":31,"line":43},[29,89752,52273],{"class":309},[29,89754,51942],{"class":51429},[29,89756,51436],{"class":309},[29,89758,89759],{"class":31,"line":51},[29,89760,71652],{"class":309},[29,89762,89763],{"class":31,"line":59},[29,89764,89765],{"class":309},"      age: 18\n",[29,89767,89768],{"class":31,"line":67},[29,89769,2362],{"class":309},[29,89771,89772],{"class":31,"line":75},[29,89773,77272],{"class":309},[29,89775,89776],{"class":31,"line":83},[29,89777,89778],{"class":309},"      console.log(this)\n",[29,89780,89781],{"class":31,"line":158},[29,89782,2362],{"class":309},[29,89784,89785],{"class":31,"line":166},[29,89786,89787],{"class":309},"    \u002F\u002F 1.bind 不会调用函数\n",[29,89789,89790],{"class":31,"line":1505},[29,89791,89792],{"class":309},"    \u002F\u002F 2.bind能改变this的指向\n",[29,89794,89795],{"class":31,"line":1788},[29,89796,89797],{"class":309},"    fn.bind()\n",[29,89799,89800],{"class":31,"line":1793},[29,89801,89802],{"class":309},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[29,89804,89805],{"class":31,"line":1799},[29,89806,89807],{"class":309},"    const fun = fn.bind(obj)\n",[29,89809,89810],{"class":31,"line":1804},[29,89811,89812],{"class":309},"    \u002F\u002F console.log(fun)\n",[29,89814,89815],{"class":31,"line":1818},[29,89816,89817],{"class":309},"    \u002F\u002F 调用,查看this的指向\n",[29,89819,89820],{"class":31,"line":1823},[29,89821,52780],{"class":309},[29,89823,89824,89826,89828],{"class":31,"line":1829},[29,89825,52546],{"class":309},[29,89827,51942],{"class":51429},[29,89829,51436],{"class":309},[29,89831,89832,89834,89836],{"class":31,"line":1850},[29,89833,51914],{"class":309},[29,89835,51929],{"class":51429},[29,89837,51436],{"class":309},[171,89839,89840],{},[1638,89841],{"alt":24,"src":89842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[259,89844,89845],{"start":59},[178,89846,89847],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[19,89849,89851],{"className":53196,"code":89850,"language":53198,"meta":24,"style":24},"\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",[26,89852,89853,89861,89874,89882,89887,89891,89896,89901,89906,89911,89916,89921,89926,89931,89935,89943],{"__ignoreMap":24},[29,89854,89855,89857,89859],{"class":31,"line":32},[29,89856,1218],{"class":309},[29,89858,51929],{"class":51429},[29,89860,51436],{"class":309},[29,89862,89863,89865,89867,89870,89872],{"class":31,"line":43},[29,89864,52273],{"class":309},[29,89866,54016],{"class":51429},[29,89868,89869],{"class":309},">禁用\u003C\u002F",[29,89871,54016],{"class":51429},[29,89873,51436],{"class":309},[29,89875,89876,89878,89880],{"class":31,"line":51},[29,89877,52273],{"class":309},[29,89879,51942],{"class":51429},[29,89881,51436],{"class":309},[29,89883,89884],{"class":31,"line":59},[29,89885,89886],{"class":309},"    const btn = document.querySelector('button')\n",[29,89888,89889],{"class":31,"line":67},[29,89890,59145],{"class":309},[29,89892,89893],{"class":31,"line":75},[29,89894,89895],{"class":309},"      this.disabled = true\n",[29,89897,89898],{"class":31,"line":83},[29,89899,89900],{"class":309},"      \u002F\u002F 定时器是window进行调用的\n",[29,89902,89903],{"class":31,"line":158},[29,89904,89905],{"class":309},"      setTimeout(function () {\n",[29,89907,89908],{"class":31,"line":166},[29,89909,89910],{"class":309},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[29,89912,89913],{"class":31,"line":1505},[29,89914,89915],{"class":309},"        this.disabled = false\n",[29,89917,89918],{"class":31,"line":1788},[29,89919,89920],{"class":309},"      }.bind(this), 2000)\n",[29,89922,89923],{"class":31,"line":1793},[29,89924,89925],{"class":309},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[29,89927,89928],{"class":31,"line":1799},[29,89929,89930],{"class":309},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[29,89932,89933],{"class":31,"line":1804},[29,89934,33590],{"class":309},[29,89936,89937,89939,89941],{"class":31,"line":1818},[29,89938,52546],{"class":309},[29,89940,51942],{"class":51429},[29,89942,51436],{"class":309},[29,89944,89945,89947,89949],{"class":31,"line":1823},[29,89946,51914],{"class":309},[29,89948,51929],{"class":51429},[29,89950,51436],{"class":309},[259,89952,89953],{"start":67},[178,89954,22128],{},[171,89956,89957],{},[1638,89958],{"alt":24,"src":89959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,89961,89963],{"id":89962},"_417-性能优化","4.17 性能优化",[275,89965,89967],{"id":89966},"_4171-防抖","4.17.1 防抖",[171,89969,89970],{},[1638,89971],{"alt":24,"src":89972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[171,89974,89975],{},[457,89976,89977],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[171,89979,89980],{},"防抖实现方式：",[175,89982,89983],{},[178,89984,89985],{},"lodash 提供了防抖处理",[171,89987,89988],{},"_.debounce(func,[wait=0],[options={}])",[171,89990,89991],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[19,89993,89995],{"className":50762,"code":89994,"language":50764,"meta":24,"style":24},"\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",[26,89996,89997,90007,90021,90025,90033,90047,90067,90079,90087,90093,90103,90115,90127,90138,90150,90160,90170,90183,90187,90195,90203,90207,90215,90233,90251,90259,90278,90288,90297,90308,90313,90317,90322,90327,90332,90357,90365,90373,90377],{"__ignoreMap":24},[29,89998,89999,90001,90003,90005],{"class":31,"line":32},[29,90000,51426],{"class":309},[29,90002,51430],{"class":51429},[29,90004,51433],{"class":35},[29,90006,51436],{"class":309},[29,90008,90009,90011,90013,90015,90017,90019],{"class":31,"line":43},[29,90010,1218],{"class":309},[29,90012,50764],{"class":51429},[29,90014,51445],{"class":35},[29,90016,355],{"class":309},[29,90018,51450],{"class":103},[29,90020,51436],{"class":309},[29,90022,90023],{"class":31,"line":51},[29,90024,2575],{"emptyLinePlaceholder":233},[29,90026,90027,90029,90031],{"class":31,"line":59},[29,90028,1218],{"class":309},[29,90030,51463],{"class":51429},[29,90032,51436],{"class":309},[29,90034,90035,90037,90039,90041,90043,90045],{"class":31,"line":67},[29,90036,52273],{"class":309},[29,90038,51473],{"class":51429},[29,90040,51476],{"class":35},[29,90042,355],{"class":309},[29,90044,51481],{"class":103},[29,90046,51436],{"class":309},[29,90048,90049,90051,90053,90055,90057,90059,90061,90063,90065],{"class":31,"line":75},[29,90050,52273],{"class":309},[29,90052,51473],{"class":51429},[29,90054,15095],{"class":35},[29,90056,355],{"class":309},[29,90058,51520],{"class":103},[29,90060,51500],{"class":35},[29,90062,355],{"class":309},[29,90064,51527],{"class":103},[29,90066,51436],{"class":309},[29,90068,90069,90071,90073,90075,90077],{"class":31,"line":83},[29,90070,52273],{"class":309},[29,90072,51536],{"class":51429},[29,90074,51539],{"class":309},[29,90076,51536],{"class":51429},[29,90078,51436],{"class":309},[29,90080,90081,90083,90085],{"class":31,"line":158},[29,90082,52273],{"class":309},[29,90084,223],{"class":51429},[29,90086,51436],{"class":309},[29,90088,90089,90091],{"class":31,"line":166},[29,90090,54881],{"class":35},[29,90092,15747],{"class":309},[29,90094,90095,90097,90099,90101],{"class":31,"line":1505},[29,90096,72725],{"class":39},[29,90098,51566],{"class":309},[29,90100,60634],{"class":39},[29,90102,1468],{"class":309},[29,90104,90105,90107,90109,90111,90113],{"class":31,"line":1788},[29,90106,54900],{"class":39},[29,90108,51566],{"class":309},[29,90110,1898],{"class":39},[29,90112,51621],{"class":305},[29,90114,1468],{"class":309},[29,90116,90117,90119,90121,90123,90125],{"class":31,"line":1793},[29,90118,54914],{"class":39},[29,90120,51566],{"class":309},[29,90122,1898],{"class":39},[29,90124,51621],{"class":305},[29,90126,1468],{"class":309},[29,90128,90129,90131,90133,90136],{"class":31,"line":1799},[29,90130,55013],{"class":39},[29,90132,51566],{"class":309},[29,90134,90135],{"class":39},"gray",[29,90137,1468],{"class":309},[29,90139,90140,90142,90144,90146,90148],{"class":31,"line":1804},[29,90141,55051],{"class":39},[29,90143,51566],{"class":309},[29,90145,1133],{"class":39},[29,90147,51621],{"class":305},[29,90149,1468],{"class":309},[29,90151,90152,90154,90156,90158],{"class":31,"line":1818},[29,90153,57545],{"class":39},[29,90155,51566],{"class":309},[29,90157,60971],{"class":39},[29,90159,1468],{"class":309},[29,90161,90162,90164,90166,90168],{"class":31,"line":1823},[29,90163,57415],{"class":39},[29,90165,51566],{"class":309},[29,90167,51721],{"class":39},[29,90169,1468],{"class":309},[29,90171,90172,90175,90177,90179,90181],{"class":31,"line":1829},[29,90173,90174],{"class":39},"      padding-top",[29,90176,51566],{"class":309},[29,90178,627],{"class":39},[29,90180,51621],{"class":305},[29,90182,1468],{"class":309},[29,90184,90185],{"class":31,"line":1850},[29,90186,2362],{"class":309},[29,90188,90189,90191,90193],{"class":31,"line":1855},[29,90190,52546],{"class":309},[29,90192,223],{"class":51429},[29,90194,51436],{"class":309},[29,90196,90197,90199,90201],{"class":31,"line":1869},[29,90198,51914],{"class":309},[29,90200,51463],{"class":51429},[29,90202,51436],{"class":309},[29,90204,90205],{"class":31,"line":1874},[29,90206,2575],{"emptyLinePlaceholder":233},[29,90208,90209,90211,90213],{"class":31,"line":1903},[29,90210,1218],{"class":309},[29,90212,51929],{"class":51429},[29,90214,51436],{"class":309},[29,90216,90217,90219,90221,90223,90225,90227,90229,90231],{"class":31,"line":1908},[29,90218,52273],{"class":309},[29,90220,51740],{"class":51429},[29,90222,53615],{"class":35},[29,90224,355],{"class":309},[29,90226,53620],{"class":103},[29,90228,55443],{"class":309},[29,90230,51740],{"class":51429},[29,90232,51436],{"class":309},[29,90234,90235,90237,90239,90241,90243,90245,90247,90249],{"class":31,"line":1925},[29,90236,52273],{"class":309},[29,90238,51942],{"class":51429},[29,90240,55368],{"class":35},[29,90242,355],{"class":309},[29,90244,88403],{"class":103},[29,90246,55443],{"class":309},[29,90248,51942],{"class":51429},[29,90250,51436],{"class":309},[29,90252,90253,90255,90257],{"class":31,"line":1930},[29,90254,52273],{"class":309},[29,90256,51942],{"class":51429},[29,90258,51436],{"class":309},[29,90260,90261,90263,90265,90267,90269,90271,90273,90276],{"class":31,"line":1935},[29,90262,11396],{"class":305},[29,90264,87062],{"class":39},[29,90266,13739],{"class":305},[29,90268,54525],{"class":309},[29,90270,54528],{"class":35},[29,90272,310],{"class":309},[29,90274,90275],{"class":103},"'.box'",[29,90277,316],{"class":309},[29,90279,90280,90282,90284,90286],{"class":31,"line":1940},[29,90281,52348],{"class":305},[29,90283,9613],{"class":309},[29,90285,355],{"class":305},[29,90287,47462],{"class":39},[29,90289,90290,90292,90295],{"class":31,"line":1954},[29,90291,70213],{"class":305},[29,90293,90294],{"class":35}," mouseMove",[29,90296,11028],{"class":309},[29,90298,90299,90302,90304,90306],{"class":31,"line":1959},[29,90300,90301],{"class":309},"      box.innerHTML ",[29,90303,355],{"class":305},[29,90305,3207],{"class":309},[29,90307,2877],{"class":305},[29,90309,90310],{"class":31,"line":2752},[29,90311,90312],{"class":367},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[29,90314,90315],{"class":31,"line":2766},[29,90316,2362],{"class":309},[29,90318,90319],{"class":31,"line":2774},[29,90320,90321],{"class":367},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[29,90323,90324],{"class":31,"line":2779},[29,90325,90326],{"class":367},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[29,90328,90329],{"class":31,"line":2785},[29,90330,90331],{"class":367},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[29,90333,90334,90337,90339,90341,90344,90347,90350,90353,90355],{"class":31,"line":2791},[29,90335,90336],{"class":309},"    box.",[29,90338,57942],{"class":35},[29,90340,310],{"class":309},[29,90342,90343],{"class":103},"'mousemove'",[29,90345,90346],{"class":309},", _.",[29,90348,90349],{"class":35},"debounce",[29,90351,90352],{"class":309},"(mouseMove, ",[29,90354,65203],{"class":39},[29,90356,30626],{"class":309},[29,90358,90359,90361,90363],{"class":31,"line":2796},[29,90360,52546],{"class":309},[29,90362,51942],{"class":51429},[29,90364,51436],{"class":309},[29,90366,90367,90369,90371],{"class":31,"line":8123},[29,90368,51914],{"class":309},[29,90370,51929],{"class":51429},[29,90372,51436],{"class":309},[29,90374,90375],{"class":31,"line":8147},[29,90376,2575],{"emptyLinePlaceholder":233},[29,90378,90379,90381,90383],{"class":31,"line":8152},[29,90380,51914],{"class":309},[29,90382,50764],{"class":51429},[29,90384,51436],{"class":309},[175,90386,90387],{},[178,90388,90389],{},"手写一个防抖函数来处理",[171,90391,90392],{},"防抖的核心就是利用定时器来实现的：",[171,90394,90395],{},"①声明一个定时器变量",[171,90397,90398],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[171,90400,90401],{},"③如果没有定时器则开启定时器，记得存到变量里面",[19,90403,90405],{"className":50762,"code":90404,"language":50764,"meta":24,"style":24},"\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",[26,90406,90407,90417,90431,90435,90443,90457,90477,90489,90497,90503,90513,90525,90537,90547,90559,90569,90579,90591,90595,90603,90611,90615,90623,90641,90659,90667,90685,90695,90703,90713,90717,90721,90725,90730,90735,90740,90745,90750,90755,90773,90780,90785,90793,90798,90811,90827,90837,90842,90846,90850,90870,90874,90879,90884,90889,90894,90902,90910,90914],{"__ignoreMap":24},[29,90408,90409,90411,90413,90415],{"class":31,"line":32},[29,90410,51426],{"class":309},[29,90412,51430],{"class":51429},[29,90414,51433],{"class":35},[29,90416,51436],{"class":309},[29,90418,90419,90421,90423,90425,90427,90429],{"class":31,"line":43},[29,90420,1218],{"class":309},[29,90422,50764],{"class":51429},[29,90424,51445],{"class":35},[29,90426,355],{"class":309},[29,90428,51450],{"class":103},[29,90430,51436],{"class":309},[29,90432,90433],{"class":31,"line":51},[29,90434,2575],{"emptyLinePlaceholder":233},[29,90436,90437,90439,90441],{"class":31,"line":59},[29,90438,1218],{"class":309},[29,90440,51463],{"class":51429},[29,90442,51436],{"class":309},[29,90444,90445,90447,90449,90451,90453,90455],{"class":31,"line":67},[29,90446,52273],{"class":309},[29,90448,51473],{"class":51429},[29,90450,51476],{"class":35},[29,90452,355],{"class":309},[29,90454,51481],{"class":103},[29,90456,51436],{"class":309},[29,90458,90459,90461,90463,90465,90467,90469,90471,90473,90475],{"class":31,"line":75},[29,90460,52273],{"class":309},[29,90462,51473],{"class":51429},[29,90464,15095],{"class":35},[29,90466,355],{"class":309},[29,90468,51520],{"class":103},[29,90470,51500],{"class":35},[29,90472,355],{"class":309},[29,90474,51527],{"class":103},[29,90476,51436],{"class":309},[29,90478,90479,90481,90483,90485,90487],{"class":31,"line":83},[29,90480,52273],{"class":309},[29,90482,51536],{"class":51429},[29,90484,51539],{"class":309},[29,90486,51536],{"class":51429},[29,90488,51436],{"class":309},[29,90490,90491,90493,90495],{"class":31,"line":158},[29,90492,52273],{"class":309},[29,90494,223],{"class":51429},[29,90496,51436],{"class":309},[29,90498,90499,90501],{"class":31,"line":166},[29,90500,54881],{"class":35},[29,90502,15747],{"class":309},[29,90504,90505,90507,90509,90511],{"class":31,"line":1505},[29,90506,72725],{"class":39},[29,90508,51566],{"class":309},[29,90510,60634],{"class":39},[29,90512,1468],{"class":309},[29,90514,90515,90517,90519,90521,90523],{"class":31,"line":1788},[29,90516,54900],{"class":39},[29,90518,51566],{"class":309},[29,90520,1898],{"class":39},[29,90522,51621],{"class":305},[29,90524,1468],{"class":309},[29,90526,90527,90529,90531,90533,90535],{"class":31,"line":1793},[29,90528,54914],{"class":39},[29,90530,51566],{"class":309},[29,90532,1898],{"class":39},[29,90534,51621],{"class":305},[29,90536,1468],{"class":309},[29,90538,90539,90541,90543,90545],{"class":31,"line":1799},[29,90540,55013],{"class":39},[29,90542,51566],{"class":309},[29,90544,90135],{"class":39},[29,90546,1468],{"class":309},[29,90548,90549,90551,90553,90555,90557],{"class":31,"line":1804},[29,90550,55051],{"class":39},[29,90552,51566],{"class":309},[29,90554,1133],{"class":39},[29,90556,51621],{"class":305},[29,90558,1468],{"class":309},[29,90560,90561,90563,90565,90567],{"class":31,"line":1818},[29,90562,57545],{"class":39},[29,90564,51566],{"class":309},[29,90566,60971],{"class":39},[29,90568,1468],{"class":309},[29,90570,90571,90573,90575,90577],{"class":31,"line":1823},[29,90572,57415],{"class":39},[29,90574,51566],{"class":309},[29,90576,51721],{"class":39},[29,90578,1468],{"class":309},[29,90580,90581,90583,90585,90587,90589],{"class":31,"line":1829},[29,90582,90174],{"class":39},[29,90584,51566],{"class":309},[29,90586,627],{"class":39},[29,90588,51621],{"class":305},[29,90590,1468],{"class":309},[29,90592,90593],{"class":31,"line":1850},[29,90594,2362],{"class":309},[29,90596,90597,90599,90601],{"class":31,"line":1855},[29,90598,52546],{"class":309},[29,90600,223],{"class":51429},[29,90602,51436],{"class":309},[29,90604,90605,90607,90609],{"class":31,"line":1869},[29,90606,51914],{"class":309},[29,90608,51463],{"class":51429},[29,90610,51436],{"class":309},[29,90612,90613],{"class":31,"line":1874},[29,90614,2575],{"emptyLinePlaceholder":233},[29,90616,90617,90619,90621],{"class":31,"line":1903},[29,90618,1218],{"class":309},[29,90620,51929],{"class":51429},[29,90622,51436],{"class":309},[29,90624,90625,90627,90629,90631,90633,90635,90637,90639],{"class":31,"line":1908},[29,90626,52273],{"class":309},[29,90628,51740],{"class":51429},[29,90630,53615],{"class":35},[29,90632,355],{"class":309},[29,90634,53620],{"class":103},[29,90636,55443],{"class":309},[29,90638,51740],{"class":51429},[29,90640,51436],{"class":309},[29,90642,90643,90645,90647,90649,90651,90653,90655,90657],{"class":31,"line":1925},[29,90644,52273],{"class":309},[29,90646,51942],{"class":51429},[29,90648,55368],{"class":35},[29,90650,355],{"class":309},[29,90652,88403],{"class":103},[29,90654,55443],{"class":309},[29,90656,51942],{"class":51429},[29,90658,51436],{"class":309},[29,90660,90661,90663,90665],{"class":31,"line":1930},[29,90662,52273],{"class":309},[29,90664,51942],{"class":51429},[29,90666,51436],{"class":309},[29,90668,90669,90671,90673,90675,90677,90679,90681,90683],{"class":31,"line":1935},[29,90670,11396],{"class":305},[29,90672,87062],{"class":39},[29,90674,13739],{"class":305},[29,90676,54525],{"class":309},[29,90678,54528],{"class":35},[29,90680,310],{"class":309},[29,90682,90275],{"class":103},[29,90684,316],{"class":309},[29,90686,90687,90689,90691,90693],{"class":31,"line":1940},[29,90688,52348],{"class":305},[29,90690,9613],{"class":309},[29,90692,355],{"class":305},[29,90694,47462],{"class":39},[29,90696,90697,90699,90701],{"class":31,"line":1954},[29,90698,70213],{"class":305},[29,90700,90294],{"class":35},[29,90702,11028],{"class":309},[29,90704,90705,90707,90709,90711],{"class":31,"line":1959},[29,90706,90301],{"class":309},[29,90708,355],{"class":305},[29,90710,3207],{"class":309},[29,90712,2877],{"class":305},[29,90714,90715],{"class":31,"line":2752},[29,90716,90312],{"class":367},[29,90718,90719],{"class":31,"line":2766},[29,90720,2362],{"class":309},[29,90722,90723],{"class":31,"line":2774},[29,90724,90321],{"class":367},[29,90726,90727],{"class":31,"line":2779},[29,90728,90729],{"class":367},"    \u002F\u002F 手写防抖函数\n",[29,90731,90732],{"class":31,"line":2785},[29,90733,90734],{"class":367},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[29,90736,90737],{"class":31,"line":2791},[29,90738,90739],{"class":367},"    \u002F\u002F 1.声明定时器变量\n",[29,90741,90742],{"class":31,"line":2796},[29,90743,90744],{"class":367},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[29,90746,90747],{"class":31,"line":8123},[29,90748,90749],{"class":367},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[29,90751,90752],{"class":31,"line":8147},[29,90753,90754],{"class":367},"    \u002F\u002F 4.定时器里面写函数调用\n",[29,90756,90757,90759,90762,90764,90767,90769,90771],{"class":31,"line":8152},[29,90758,70213],{"class":305},[29,90760,90761],{"class":35}," debounce",[29,90763,310],{"class":309},[29,90765,90766],{"class":5391},"fn",[29,90768,12610],{"class":309},[29,90770,1028],{"class":5391},[29,90772,12617],{"class":309},[29,90774,90775,90777],{"class":31,"line":8158},[29,90776,79901],{"class":305},[29,90778,90779],{"class":309}," timer\n",[29,90781,90782],{"class":31,"line":8185},[29,90783,90784],{"class":367},"      \u002F\u002F return 返回一个匿名函数\n",[29,90786,90787,90789,90791],{"class":31,"line":8190},[29,90788,74111],{"class":305},[29,90790,59047],{"class":305},[29,90792,54581],{"class":309},[29,90794,90795],{"class":31,"line":8196},[29,90796,90797],{"class":367},"        \u002F\u002F 这里边写第二三四步\n",[29,90799,90800,90802,90805,90808],{"class":31,"line":8208},[29,90801,2672],{"class":305},[29,90803,90804],{"class":309}," (timer) ",[29,90806,90807],{"class":35},"clearTimeout",[29,90809,90810],{"class":309},"(timer)\n",[29,90812,90813,90816,90818,90821,90823,90825],{"class":31,"line":8220},[29,90814,90815],{"class":309},"        timer ",[29,90817,355],{"class":305},[29,90819,90820],{"class":35}," setTimeout",[29,90822,310],{"class":309},[29,90824,54578],{"class":305},[29,90826,54581],{"class":309},[29,90828,90829,90832,90834],{"class":31,"line":8232},[29,90830,90831],{"class":35},"          fn",[29,90833,13225],{"class":309},[29,90835,90836],{"class":367},"\u002F\u002F加小括号调用fn }, t)\n",[29,90838,90839],{"class":31,"line":9891},[29,90840,90841],{"class":309},"        }, t)\n",[29,90843,90844],{"class":31,"line":9916},[29,90845,52527],{"class":309},[29,90847,90848],{"class":31,"line":9939},[29,90849,2362],{"class":309},[29,90851,90852,90854,90856,90858,90860,90862,90864,90866,90868],{"class":31,"line":9963},[29,90853,90336],{"class":309},[29,90855,57942],{"class":35},[29,90857,310],{"class":309},[29,90859,90343],{"class":103},[29,90861,12610],{"class":309},[29,90863,90349],{"class":35},[29,90865,90352],{"class":309},[29,90867,65203],{"class":39},[29,90869,30626],{"class":309},[29,90871,90872],{"class":31,"line":9968},[29,90873,2575],{"emptyLinePlaceholder":233},[29,90875,90876],{"class":31,"line":9973},[29,90877,90878],{"class":367},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[29,90880,90881],{"class":31,"line":9978},[29,90882,90883],{"class":367},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[29,90885,90886],{"class":31,"line":9987},[29,90887,90888],{"class":367},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[29,90890,90891],{"class":31,"line":9992},[29,90892,90893],{"class":367},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[29,90895,90896,90898,90900],{"class":31,"line":9998},[29,90897,52546],{"class":309},[29,90899,51942],{"class":51429},[29,90901,51436],{"class":309},[29,90903,90904,90906,90908],{"class":31,"line":10019},[29,90905,51914],{"class":309},[29,90907,51929],{"class":51429},[29,90909,51436],{"class":309},[29,90911,90912],{"class":31,"line":10025},[29,90913,2575],{"emptyLinePlaceholder":233},[29,90915,90916,90918,90920],{"class":31,"line":10039},[29,90917,51914],{"class":309},[29,90919,50764],{"class":51429},[29,90921,51436],{"class":309},[275,90923,90925],{"id":90924},"_4172-节流","4.17.2 节流",[171,90927,90928],{},[1638,90929],{"alt":24,"src":90930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[171,90932,90933],{},[1638,90934],{"alt":24,"src":90935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[171,90937,90938],{},[457,90939,90940],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[171,90942,90943],{},"实现方式：",[175,90945,90946],{},[178,90947,90948],{},"lodash 提供的节流函数来处理",[171,90950,90951],{},"_.throttle(func,[wait=0],[options=])",[171,90953,90954],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[19,90956,90958],{"className":50762,"code":90957,"language":50764,"meta":24,"style":24},"\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",[26,90959,90960,90970,90984,90988,90996,91010,91030,91042,91050,91056,91066,91078,91090,91100,91112,91122,91132,91144,91148,91156,91164,91168,91176,91194,91212,91220,91238,91248,91256,91266,91270,91274,91278,91283,91288,91309,91317,91325,91329],{"__ignoreMap":24},[29,90961,90962,90964,90966,90968],{"class":31,"line":32},[29,90963,51426],{"class":309},[29,90965,51430],{"class":51429},[29,90967,51433],{"class":35},[29,90969,51436],{"class":309},[29,90971,90972,90974,90976,90978,90980,90982],{"class":31,"line":43},[29,90973,1218],{"class":309},[29,90975,50764],{"class":51429},[29,90977,51445],{"class":35},[29,90979,355],{"class":309},[29,90981,51450],{"class":103},[29,90983,51436],{"class":309},[29,90985,90986],{"class":31,"line":51},[29,90987,2575],{"emptyLinePlaceholder":233},[29,90989,90990,90992,90994],{"class":31,"line":59},[29,90991,1218],{"class":309},[29,90993,51463],{"class":51429},[29,90995,51436],{"class":309},[29,90997,90998,91000,91002,91004,91006,91008],{"class":31,"line":67},[29,90999,52273],{"class":309},[29,91001,51473],{"class":51429},[29,91003,51476],{"class":35},[29,91005,355],{"class":309},[29,91007,51481],{"class":103},[29,91009,51436],{"class":309},[29,91011,91012,91014,91016,91018,91020,91022,91024,91026,91028],{"class":31,"line":75},[29,91013,52273],{"class":309},[29,91015,51473],{"class":51429},[29,91017,15095],{"class":35},[29,91019,355],{"class":309},[29,91021,51520],{"class":103},[29,91023,51500],{"class":35},[29,91025,355],{"class":309},[29,91027,51527],{"class":103},[29,91029,51436],{"class":309},[29,91031,91032,91034,91036,91038,91040],{"class":31,"line":83},[29,91033,52273],{"class":309},[29,91035,51536],{"class":51429},[29,91037,51539],{"class":309},[29,91039,51536],{"class":51429},[29,91041,51436],{"class":309},[29,91043,91044,91046,91048],{"class":31,"line":158},[29,91045,52273],{"class":309},[29,91047,223],{"class":51429},[29,91049,51436],{"class":309},[29,91051,91052,91054],{"class":31,"line":166},[29,91053,54881],{"class":35},[29,91055,15747],{"class":309},[29,91057,91058,91060,91062,91064],{"class":31,"line":1505},[29,91059,72725],{"class":39},[29,91061,51566],{"class":309},[29,91063,60634],{"class":39},[29,91065,1468],{"class":309},[29,91067,91068,91070,91072,91074,91076],{"class":31,"line":1788},[29,91069,54900],{"class":39},[29,91071,51566],{"class":309},[29,91073,1898],{"class":39},[29,91075,51621],{"class":305},[29,91077,1468],{"class":309},[29,91079,91080,91082,91084,91086,91088],{"class":31,"line":1793},[29,91081,54914],{"class":39},[29,91083,51566],{"class":309},[29,91085,1898],{"class":39},[29,91087,51621],{"class":305},[29,91089,1468],{"class":309},[29,91091,91092,91094,91096,91098],{"class":31,"line":1799},[29,91093,55013],{"class":39},[29,91095,51566],{"class":309},[29,91097,90135],{"class":39},[29,91099,1468],{"class":309},[29,91101,91102,91104,91106,91108,91110],{"class":31,"line":1804},[29,91103,55051],{"class":39},[29,91105,51566],{"class":309},[29,91107,1133],{"class":39},[29,91109,51621],{"class":305},[29,91111,1468],{"class":309},[29,91113,91114,91116,91118,91120],{"class":31,"line":1818},[29,91115,57545],{"class":39},[29,91117,51566],{"class":309},[29,91119,60971],{"class":39},[29,91121,1468],{"class":309},[29,91123,91124,91126,91128,91130],{"class":31,"line":1823},[29,91125,57415],{"class":39},[29,91127,51566],{"class":309},[29,91129,51721],{"class":39},[29,91131,1468],{"class":309},[29,91133,91134,91136,91138,91140,91142],{"class":31,"line":1829},[29,91135,90174],{"class":39},[29,91137,51566],{"class":309},[29,91139,627],{"class":39},[29,91141,51621],{"class":305},[29,91143,1468],{"class":309},[29,91145,91146],{"class":31,"line":1850},[29,91147,2362],{"class":309},[29,91149,91150,91152,91154],{"class":31,"line":1855},[29,91151,52546],{"class":309},[29,91153,223],{"class":51429},[29,91155,51436],{"class":309},[29,91157,91158,91160,91162],{"class":31,"line":1869},[29,91159,51914],{"class":309},[29,91161,51463],{"class":51429},[29,91163,51436],{"class":309},[29,91165,91166],{"class":31,"line":1874},[29,91167,2575],{"emptyLinePlaceholder":233},[29,91169,91170,91172,91174],{"class":31,"line":1903},[29,91171,1218],{"class":309},[29,91173,51929],{"class":51429},[29,91175,51436],{"class":309},[29,91177,91178,91180,91182,91184,91186,91188,91190,91192],{"class":31,"line":1908},[29,91179,52273],{"class":309},[29,91181,51740],{"class":51429},[29,91183,53615],{"class":35},[29,91185,355],{"class":309},[29,91187,53620],{"class":103},[29,91189,55443],{"class":309},[29,91191,51740],{"class":51429},[29,91193,51436],{"class":309},[29,91195,91196,91198,91200,91202,91204,91206,91208,91210],{"class":31,"line":1925},[29,91197,52273],{"class":309},[29,91199,51942],{"class":51429},[29,91201,55368],{"class":35},[29,91203,355],{"class":309},[29,91205,88403],{"class":103},[29,91207,55443],{"class":309},[29,91209,51942],{"class":51429},[29,91211,51436],{"class":309},[29,91213,91214,91216,91218],{"class":31,"line":1930},[29,91215,52273],{"class":309},[29,91217,51942],{"class":51429},[29,91219,51436],{"class":309},[29,91221,91222,91224,91226,91228,91230,91232,91234,91236],{"class":31,"line":1935},[29,91223,11396],{"class":305},[29,91225,87062],{"class":39},[29,91227,13739],{"class":305},[29,91229,54525],{"class":309},[29,91231,54528],{"class":35},[29,91233,310],{"class":309},[29,91235,90275],{"class":103},[29,91237,316],{"class":309},[29,91239,91240,91242,91244,91246],{"class":31,"line":1940},[29,91241,52348],{"class":305},[29,91243,9613],{"class":309},[29,91245,355],{"class":305},[29,91247,47462],{"class":39},[29,91249,91250,91252,91254],{"class":31,"line":1954},[29,91251,70213],{"class":305},[29,91253,90294],{"class":35},[29,91255,11028],{"class":309},[29,91257,91258,91260,91262,91264],{"class":31,"line":1959},[29,91259,90301],{"class":309},[29,91261,355],{"class":305},[29,91263,3207],{"class":309},[29,91265,2877],{"class":305},[29,91267,91268],{"class":31,"line":2752},[29,91269,90312],{"class":367},[29,91271,91272],{"class":31,"line":2766},[29,91273,2362],{"class":309},[29,91275,91276],{"class":31,"line":2774},[29,91277,90321],{"class":367},[29,91279,91280],{"class":31,"line":2779},[29,91281,91282],{"class":367},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[29,91284,91285],{"class":31,"line":2785},[29,91286,91287],{"class":367},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[29,91289,91290,91292,91294,91296,91298,91300,91303,91305,91307],{"class":31,"line":2791},[29,91291,90336],{"class":309},[29,91293,57942],{"class":35},[29,91295,310],{"class":309},[29,91297,90343],{"class":103},[29,91299,90346],{"class":309},[29,91301,91302],{"class":35},"throttle",[29,91304,90352],{"class":309},[29,91306,65203],{"class":39},[29,91308,30626],{"class":309},[29,91310,91311,91313,91315],{"class":31,"line":2796},[29,91312,52546],{"class":309},[29,91314,51942],{"class":51429},[29,91316,51436],{"class":309},[29,91318,91319,91321,91323],{"class":31,"line":8123},[29,91320,51914],{"class":309},[29,91322,51929],{"class":51429},[29,91324,51436],{"class":309},[29,91326,91327],{"class":31,"line":8147},[29,91328,2575],{"emptyLinePlaceholder":233},[29,91330,91331,91333,91335],{"class":31,"line":8152},[29,91332,51914],{"class":309},[29,91334,50764],{"class":51429},[29,91336,51436],{"class":309},[175,91338,91339],{},[178,91340,91341],{},"手写一个节流函数来处理",[171,91343,71081],{},[171,91345,90395],{},[171,91347,91348],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[171,91350,91351],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[19,91353,91355],{"className":50762,"code":91354,"language":50764,"meta":24,"style":24},"\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",[26,91356,91357,91367,91381,91385,91393,91407,91427,91439,91447,91453,91463,91475,91487,91497,91509,91519,91529,91541,91545,91553,91561,91565,91573,91591,91609,91617,91635,91645,91653,91663,91667,91671,91675,91680,91685,91690,91695,91700,91705,91722,91728,91736,91747,91762,91769,91774,91779,91789,91794,91799,91804,91808,91812,91816,91836,91844,91852,91856],{"__ignoreMap":24},[29,91358,91359,91361,91363,91365],{"class":31,"line":32},[29,91360,51426],{"class":309},[29,91362,51430],{"class":51429},[29,91364,51433],{"class":35},[29,91366,51436],{"class":309},[29,91368,91369,91371,91373,91375,91377,91379],{"class":31,"line":43},[29,91370,1218],{"class":309},[29,91372,50764],{"class":51429},[29,91374,51445],{"class":35},[29,91376,355],{"class":309},[29,91378,51450],{"class":103},[29,91380,51436],{"class":309},[29,91382,91383],{"class":31,"line":51},[29,91384,2575],{"emptyLinePlaceholder":233},[29,91386,91387,91389,91391],{"class":31,"line":59},[29,91388,1218],{"class":309},[29,91390,51463],{"class":51429},[29,91392,51436],{"class":309},[29,91394,91395,91397,91399,91401,91403,91405],{"class":31,"line":67},[29,91396,52273],{"class":309},[29,91398,51473],{"class":51429},[29,91400,51476],{"class":35},[29,91402,355],{"class":309},[29,91404,51481],{"class":103},[29,91406,51436],{"class":309},[29,91408,91409,91411,91413,91415,91417,91419,91421,91423,91425],{"class":31,"line":75},[29,91410,52273],{"class":309},[29,91412,51473],{"class":51429},[29,91414,15095],{"class":35},[29,91416,355],{"class":309},[29,91418,51520],{"class":103},[29,91420,51500],{"class":35},[29,91422,355],{"class":309},[29,91424,51527],{"class":103},[29,91426,51436],{"class":309},[29,91428,91429,91431,91433,91435,91437],{"class":31,"line":83},[29,91430,52273],{"class":309},[29,91432,51536],{"class":51429},[29,91434,51539],{"class":309},[29,91436,51536],{"class":51429},[29,91438,51436],{"class":309},[29,91440,91441,91443,91445],{"class":31,"line":158},[29,91442,52273],{"class":309},[29,91444,223],{"class":51429},[29,91446,51436],{"class":309},[29,91448,91449,91451],{"class":31,"line":166},[29,91450,54881],{"class":35},[29,91452,15747],{"class":309},[29,91454,91455,91457,91459,91461],{"class":31,"line":1505},[29,91456,72725],{"class":39},[29,91458,51566],{"class":309},[29,91460,60634],{"class":39},[29,91462,1468],{"class":309},[29,91464,91465,91467,91469,91471,91473],{"class":31,"line":1788},[29,91466,54900],{"class":39},[29,91468,51566],{"class":309},[29,91470,1898],{"class":39},[29,91472,51621],{"class":305},[29,91474,1468],{"class":309},[29,91476,91477,91479,91481,91483,91485],{"class":31,"line":1793},[29,91478,54914],{"class":39},[29,91480,51566],{"class":309},[29,91482,1898],{"class":39},[29,91484,51621],{"class":305},[29,91486,1468],{"class":309},[29,91488,91489,91491,91493,91495],{"class":31,"line":1799},[29,91490,55013],{"class":39},[29,91492,51566],{"class":309},[29,91494,90135],{"class":39},[29,91496,1468],{"class":309},[29,91498,91499,91501,91503,91505,91507],{"class":31,"line":1804},[29,91500,55051],{"class":39},[29,91502,51566],{"class":309},[29,91504,1133],{"class":39},[29,91506,51621],{"class":305},[29,91508,1468],{"class":309},[29,91510,91511,91513,91515,91517],{"class":31,"line":1818},[29,91512,57545],{"class":39},[29,91514,51566],{"class":309},[29,91516,60971],{"class":39},[29,91518,1468],{"class":309},[29,91520,91521,91523,91525,91527],{"class":31,"line":1823},[29,91522,57415],{"class":39},[29,91524,51566],{"class":309},[29,91526,51721],{"class":39},[29,91528,1468],{"class":309},[29,91530,91531,91533,91535,91537,91539],{"class":31,"line":1829},[29,91532,90174],{"class":39},[29,91534,51566],{"class":309},[29,91536,627],{"class":39},[29,91538,51621],{"class":305},[29,91540,1468],{"class":309},[29,91542,91543],{"class":31,"line":1850},[29,91544,2362],{"class":309},[29,91546,91547,91549,91551],{"class":31,"line":1855},[29,91548,52546],{"class":309},[29,91550,223],{"class":51429},[29,91552,51436],{"class":309},[29,91554,91555,91557,91559],{"class":31,"line":1869},[29,91556,51914],{"class":309},[29,91558,51463],{"class":51429},[29,91560,51436],{"class":309},[29,91562,91563],{"class":31,"line":1874},[29,91564,2575],{"emptyLinePlaceholder":233},[29,91566,91567,91569,91571],{"class":31,"line":1903},[29,91568,1218],{"class":309},[29,91570,51929],{"class":51429},[29,91572,51436],{"class":309},[29,91574,91575,91577,91579,91581,91583,91585,91587,91589],{"class":31,"line":1908},[29,91576,52273],{"class":309},[29,91578,51740],{"class":51429},[29,91580,53615],{"class":35},[29,91582,355],{"class":309},[29,91584,53620],{"class":103},[29,91586,55443],{"class":309},[29,91588,51740],{"class":51429},[29,91590,51436],{"class":309},[29,91592,91593,91595,91597,91599,91601,91603,91605,91607],{"class":31,"line":1925},[29,91594,52273],{"class":309},[29,91596,51942],{"class":51429},[29,91598,55368],{"class":35},[29,91600,355],{"class":309},[29,91602,88403],{"class":103},[29,91604,55443],{"class":309},[29,91606,51942],{"class":51429},[29,91608,51436],{"class":309},[29,91610,91611,91613,91615],{"class":31,"line":1930},[29,91612,52273],{"class":309},[29,91614,51942],{"class":51429},[29,91616,51436],{"class":309},[29,91618,91619,91621,91623,91625,91627,91629,91631,91633],{"class":31,"line":1935},[29,91620,11396],{"class":305},[29,91622,87062],{"class":39},[29,91624,13739],{"class":305},[29,91626,54525],{"class":309},[29,91628,54528],{"class":35},[29,91630,310],{"class":309},[29,91632,90275],{"class":103},[29,91634,316],{"class":309},[29,91636,91637,91639,91641,91643],{"class":31,"line":1940},[29,91638,52348],{"class":305},[29,91640,9613],{"class":309},[29,91642,355],{"class":305},[29,91644,47462],{"class":39},[29,91646,91647,91649,91651],{"class":31,"line":1954},[29,91648,70213],{"class":305},[29,91650,90294],{"class":35},[29,91652,11028],{"class":309},[29,91654,91655,91657,91659,91661],{"class":31,"line":1959},[29,91656,90301],{"class":309},[29,91658,355],{"class":305},[29,91660,3207],{"class":309},[29,91662,2877],{"class":305},[29,91664,91665],{"class":31,"line":2752},[29,91666,90312],{"class":367},[29,91668,91669],{"class":31,"line":2766},[29,91670,2362],{"class":309},[29,91672,91673],{"class":31,"line":2774},[29,91674,90321],{"class":367},[29,91676,91677],{"class":31,"line":2779},[29,91678,91679],{"class":367},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[29,91681,91682],{"class":31,"line":2785},[29,91683,91684],{"class":367},"    \u002F\u002F 1.声明一个定时器变量\n",[29,91686,91687],{"class":31,"line":2791},[29,91688,91689],{"class":367},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[29,91691,91692],{"class":31,"line":2796},[29,91693,91694],{"class":367},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[29,91696,91697],{"class":31,"line":8123},[29,91698,91699],{"class":367},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[29,91701,91702],{"class":31,"line":8147},[29,91703,91704],{"class":367},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[29,91706,91707,91709,91712,91714,91716,91718,91720],{"class":31,"line":8152},[29,91708,70213],{"class":305},[29,91710,91711],{"class":35}," throttle",[29,91713,310],{"class":309},[29,91715,90766],{"class":5391},[29,91717,12610],{"class":309},[29,91719,1028],{"class":5391},[29,91721,12617],{"class":309},[29,91723,91724,91726],{"class":31,"line":8158},[29,91725,79901],{"class":305},[29,91727,90779],{"class":309},[29,91729,91730,91732,91734],{"class":31,"line":8185},[29,91731,74111],{"class":305},[29,91733,59047],{"class":305},[29,91735,54581],{"class":309},[29,91737,91738,91740,91742,91744],{"class":31,"line":8190},[29,91739,2672],{"class":305},[29,91741,1834],{"class":309},[29,91743,534],{"class":305},[29,91745,91746],{"class":309},"timer) {\n",[29,91748,91749,91752,91754,91756,91758,91760],{"class":31,"line":8196},[29,91750,91751],{"class":309},"          timer ",[29,91753,355],{"class":305},[29,91755,90820],{"class":35},[29,91757,310],{"class":309},[29,91759,54578],{"class":305},[29,91761,54581],{"class":309},[29,91763,91764,91767],{"class":31,"line":8208},[29,91765,91766],{"class":35},"            fn",[29,91768,2151],{"class":309},[29,91770,91771],{"class":31,"line":8220},[29,91772,91773],{"class":367},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[29,91775,91776],{"class":31,"line":8232},[29,91777,91778],{"class":367},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[29,91780,91781,91784,91786],{"class":31,"line":9891},[29,91782,91783],{"class":309},"            timer ",[29,91785,355],{"class":305},[29,91787,91788],{"class":39}," null\n",[29,91790,91791],{"class":31,"line":9916},[29,91792,91793],{"class":367},"            \u002F\u002F 不能用clearTimeout(timer)\n",[29,91795,91796],{"class":31,"line":9939},[29,91797,91798],{"class":367},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[29,91800,91801],{"class":31,"line":9963},[29,91802,91803],{"class":309},"          }, t)\n",[29,91805,91806],{"class":31,"line":9968},[29,91807,2704],{"class":309},[29,91809,91810],{"class":31,"line":9973},[29,91811,52527],{"class":309},[29,91813,91814],{"class":31,"line":9978},[29,91815,2362],{"class":309},[29,91817,91818,91820,91822,91824,91826,91828,91830,91832,91834],{"class":31,"line":9987},[29,91819,90336],{"class":309},[29,91821,57942],{"class":35},[29,91823,310],{"class":309},[29,91825,90343],{"class":103},[29,91827,12610],{"class":309},[29,91829,91302],{"class":35},[29,91831,90352],{"class":309},[29,91833,65203],{"class":39},[29,91835,30626],{"class":309},[29,91837,91838,91840,91842],{"class":31,"line":9992},[29,91839,52546],{"class":309},[29,91841,51942],{"class":51429},[29,91843,51436],{"class":309},[29,91845,91846,91848,91850],{"class":31,"line":9998},[29,91847,51914],{"class":309},[29,91849,51929],{"class":51429},[29,91851,51436],{"class":309},[29,91853,91854],{"class":31,"line":10019},[29,91855,2575],{"emptyLinePlaceholder":233},[29,91857,91858,91860,91862],{"class":31,"line":10025},[29,91859,51914],{"class":309},[29,91861,50764],{"class":51429},[29,91863,51436],{"class":309},[275,91865,91867],{"id":91866},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[19,91869,91871],{"className":53196,"code":91870,"language":53198,"meta":24,"style":24},"\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",[26,91872,91873,91881,91889,91894,91899,91904,91909,91913,91921],{"__ignoreMap":24},[29,91874,91875,91877,91879],{"class":31,"line":32},[29,91876,1218],{"class":309},[29,91878,51929],{"class":51429},[29,91880,51436],{"class":309},[29,91882,91883,91885,91887],{"class":31,"line":43},[29,91884,52273],{"class":309},[29,91886,51942],{"class":51429},[29,91888,51436],{"class":309},[29,91890,91891],{"class":31,"line":51},[29,91892,91893],{"class":309},"    let timer = null\n",[29,91895,91896],{"class":31,"line":59},[29,91897,91898],{"class":309},"    timer = setTimeout(() => {\n",[29,91900,91901],{"class":31,"line":67},[29,91902,91903],{"class":309},"      clearTimeout(timer)\n",[29,91905,91906],{"class":31,"line":75},[29,91907,91908],{"class":309},"      console.log(timer)\n",[29,91910,91911],{"class":31,"line":83},[29,91912,60354],{"class":309},[29,91914,91915,91917,91919],{"class":31,"line":158},[29,91916,52546],{"class":309},[29,91918,51942],{"class":51429},[29,91920,51436],{"class":309},[29,91922,91923,91925,91927],{"class":31,"line":166},[29,91924,51914],{"class":309},[29,91926,51929],{"class":51429},[29,91928,51436],{"class":309},[171,91930,91931],{},"输出为1",[171,91933,91934],{},"在开启的定时器里边写清除定时器",[171,91936,91937],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[275,91939,91941],{"id":91940},"_4174-节流综合案例","4.17.4 节流综合案例",[171,91943,91944],{},"页面打开，可以记录上一次的视频播放位置",[171,91946,91947],{},[1638,91948],{"alt":24,"src":91949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[171,91951,91952],{},[1638,91953],{"alt":24,"src":91954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[19,91956,91958],{"className":50762,"code":91957,"language":50764,"meta":24,"style":24},"\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",[26,91959,91960,91970,91984,91988,91996,92010,92030,92050,92072,92085,92093,92099,92109,92119,92129,92133,92137,92144,92157,92169,92173,92177,92187,92199,92213,92217,92221,92228,92238,92251,92263,92273,92283,92299,92311,92315,92319,92327,92337,92349,92359,92369,92379,92383,92387,92397,92408,92412,92420,92428,92432,92440,92455,92470,92485,92506,92514,92522,92537,92559,92567,92582,92608,92634,92660,92668,92676,92695,92703,92708,92727,92732,92750,92755,92760,92768,92773,92787,92795,92800,92817,92821,92826,92848,92852,92860,92868,92872],{"__ignoreMap":24},[29,91961,91962,91964,91966,91968],{"class":31,"line":32},[29,91963,51426],{"class":309},[29,91965,51430],{"class":51429},[29,91967,51433],{"class":35},[29,91969,51436],{"class":309},[29,91971,91972,91974,91976,91978,91980,91982],{"class":31,"line":43},[29,91973,1218],{"class":309},[29,91975,50764],{"class":51429},[29,91977,51445],{"class":35},[29,91979,355],{"class":309},[29,91981,51450],{"class":103},[29,91983,51436],{"class":309},[29,91985,91986],{"class":31,"line":51},[29,91987,2575],{"emptyLinePlaceholder":233},[29,91989,91990,91992,91994],{"class":31,"line":59},[29,91991,1218],{"class":309},[29,91993,51463],{"class":51429},[29,91995,51436],{"class":309},[29,91997,91998,92000,92002,92004,92006,92008],{"class":31,"line":67},[29,91999,52273],{"class":309},[29,92001,51473],{"class":51429},[29,92003,51476],{"class":35},[29,92005,355],{"class":309},[29,92007,51481],{"class":103},[29,92009,59256],{"class":309},[29,92011,92012,92014,92016,92018,92020,92022,92024,92026,92028],{"class":31,"line":75},[29,92013,52273],{"class":309},[29,92015,51473],{"class":51429},[29,92017,51492],{"class":35},[29,92019,355],{"class":309},[29,92021,51497],{"class":103},[29,92023,51500],{"class":35},[29,92025,355],{"class":309},[29,92027,51505],{"class":103},[29,92029,59256],{"class":309},[29,92031,92032,92034,92036,92038,92040,92042,92044,92046,92048],{"class":31,"line":83},[29,92033,52273],{"class":309},[29,92035,51473],{"class":51429},[29,92037,15095],{"class":35},[29,92039,355],{"class":309},[29,92041,51520],{"class":103},[29,92043,51500],{"class":35},[29,92045,355],{"class":309},[29,92047,51527],{"class":103},[29,92049,59256],{"class":309},[29,92051,92052,92054,92056,92058,92060,92063,92065,92067,92070],{"class":31,"line":158},[29,92053,52273],{"class":309},[29,92055,51473],{"class":51429},[29,92057,15095],{"class":35},[29,92059,355],{"class":309},[29,92061,92062],{"class":103},"\"referrer\"",[29,92064,51500],{"class":35},[29,92066,355],{"class":309},[29,92068,92069],{"class":103},"\"never\"",[29,92071,59256],{"class":309},[29,92073,92074,92076,92078,92081,92083],{"class":31,"line":166},[29,92075,52273],{"class":309},[29,92077,51536],{"class":51429},[29,92079,92080],{"class":309},">综合案例\u003C\u002F",[29,92082,51536],{"class":51429},[29,92084,51436],{"class":309},[29,92086,92087,92089,92091],{"class":31,"line":1505},[29,92088,52273],{"class":309},[29,92090,223],{"class":51429},[29,92092,51436],{"class":309},[29,92094,92095,92097],{"class":31,"line":1788},[29,92096,6578],{"class":51429},[29,92098,15747],{"class":309},[29,92100,92101,92103,92105,92107],{"class":31,"line":1793},[29,92102,54824],{"class":39},[29,92104,51566],{"class":309},[29,92106,499],{"class":39},[29,92108,1468],{"class":309},[29,92110,92111,92113,92115,92117],{"class":31,"line":1799},[29,92112,54835],{"class":39},[29,92114,51566],{"class":309},[29,92116,499],{"class":39},[29,92118,1468],{"class":309},[29,92120,92121,92123,92125,92127],{"class":31,"line":1804},[29,92122,72725],{"class":39},[29,92124,51566],{"class":309},[29,92126,60634],{"class":39},[29,92128,1468],{"class":309},[29,92130,92131],{"class":31,"line":1818},[29,92132,2362],{"class":309},[29,92134,92135],{"class":31,"line":1823},[29,92136,2575],{"emptyLinePlaceholder":233},[29,92138,92139,92142],{"class":31,"line":1829},[29,92140,92141],{"class":35},"    .container",[29,92143,15747],{"class":309},[29,92145,92146,92148,92150,92153,92155],{"class":31,"line":1850},[29,92147,54900],{"class":39},[29,92149,51566],{"class":309},[29,92151,92152],{"class":39},"1200",[29,92154,51621],{"class":305},[29,92156,1468],{"class":309},[29,92158,92159,92161,92163,92165,92167],{"class":31,"line":1855},[29,92160,54835],{"class":39},[29,92162,51566],{"class":309},[29,92164,499],{"class":39},[29,92166,51685],{"class":39},[29,92168,1468],{"class":309},[29,92170,92171],{"class":31,"line":1869},[29,92172,2362],{"class":309},[29,92174,92175],{"class":31,"line":1874},[29,92176,2575],{"emptyLinePlaceholder":233},[29,92178,92179,92182,92185],{"class":31,"line":1903},[29,92180,92181],{"class":35},"    .video",[29,92183,92184],{"class":51429}," video",[29,92186,15747],{"class":309},[29,92188,92189,92191,92193,92195,92197],{"class":31,"line":1908},[29,92190,54900],{"class":39},[29,92192,51566],{"class":309},[29,92194,619],{"class":39},[29,92196,636],{"class":305},[29,92198,1468],{"class":309},[29,92200,92201,92203,92205,92207,92209,92211],{"class":31,"line":1925},[29,92202,54824],{"class":39},[29,92204,51566],{"class":309},[29,92206,1008],{"class":39},[29,92208,51621],{"class":305},[29,92210,4268],{"class":39},[29,92212,1468],{"class":309},[29,92214,92215],{"class":31,"line":1930},[29,92216,2362],{"class":309},[29,92218,92219],{"class":31,"line":1935},[29,92220,2575],{"emptyLinePlaceholder":233},[29,92222,92223,92226],{"class":31,"line":1940},[29,92224,92225],{"class":35},"    .elevator",[29,92227,15747],{"class":309},[29,92229,92230,92232,92234,92236],{"class":31,"line":1954},[29,92231,54888],{"class":39},[29,92233,51566],{"class":309},[29,92235,86362],{"class":39},[29,92237,1468],{"class":309},[29,92239,92240,92242,92244,92247,92249],{"class":31,"line":1959},[29,92241,55076],{"class":39},[29,92243,51566],{"class":309},[29,92245,92246],{"class":39},"280",[29,92248,51621],{"class":305},[29,92250,1468],{"class":309},[29,92252,92253,92255,92257,92259,92261],{"class":31,"line":2752},[29,92254,86556],{"class":39},[29,92256,51566],{"class":309},[29,92258,1008],{"class":39},[29,92260,51621],{"class":305},[29,92262,1468],{"class":309},[29,92264,92265,92267,92269,92271],{"class":31,"line":2766},[29,92266,86369],{"class":39},[29,92268,51566],{"class":309},[29,92270,86374],{"class":39},[29,92272,1468],{"class":309},[29,92274,92275,92277,92279,92281],{"class":31,"line":2774},[29,92276,61850],{"class":39},[29,92278,51566],{"class":309},[29,92280,60971],{"class":39},[29,92282,1468],{"class":309},[29,92284,92285,92287,92289,92291,92293,92295,92297],{"class":31,"line":2779},[29,92286,62106],{"class":39},[29,92288,51566],{"class":309},[29,92290,525],{"class":39},[29,92292,51621],{"class":305},[29,92294,51650],{"class":39},[29,92296,62373],{"class":39},[29,92298,1468],{"class":309},[29,92300,92301,92303,92305,92307,92309],{"class":31,"line":2785},[29,92302,54900],{"class":39},[29,92304,51566],{"class":309},[29,92306,1215],{"class":39},[29,92308,51621],{"class":305},[29,92310,1468],{"class":309},[29,92312,92313],{"class":31,"line":2791},[29,92314,2362],{"class":309},[29,92316,92317],{"class":31,"line":2796},[29,92318,2575],{"emptyLinePlaceholder":233},[29,92320,92321,92323,92325],{"class":31,"line":8123},[29,92322,92225],{"class":35},[29,92324,1574],{"class":51429},[29,92326,15747],{"class":309},[29,92328,92329,92331,92333,92335],{"class":31,"line":8147},[29,92330,55138],{"class":39},[29,92332,51566],{"class":309},[29,92334,60998],{"class":39},[29,92336,1468],{"class":309},[29,92338,92339,92341,92343,92345,92347],{"class":31,"line":8152},[29,92340,54824],{"class":39},[29,92342,51566],{"class":309},[29,92344,754],{"class":39},[29,92346,51621],{"class":305},[29,92348,1468],{"class":309},[29,92350,92351,92353,92355,92357],{"class":31,"line":8158},[29,92352,64099],{"class":39},[29,92354,51566],{"class":309},[29,92356,54866],{"class":39},[29,92358,1468],{"class":309},[29,92360,92361,92363,92365,92367],{"class":31,"line":8185},[29,92362,57415],{"class":39},[29,92364,51566],{"class":309},[29,92366,51721],{"class":39},[29,92368,1468],{"class":309},[29,92370,92371,92373,92375,92377],{"class":31,"line":8190},[29,92372,57545],{"class":39},[29,92374,51566],{"class":309},[29,92376,62199],{"class":39},[29,92378,1468],{"class":309},[29,92380,92381],{"class":31,"line":8196},[29,92382,2362],{"class":309},[29,92384,92385],{"class":31,"line":8208},[29,92386,2575],{"emptyLinePlaceholder":233},[29,92388,92389,92391,92393,92395],{"class":31,"line":8220},[29,92390,92225],{"class":35},[29,92392,1574],{"class":51429},[29,92394,64153],{"class":35},[29,92396,15747],{"class":309},[29,92398,92399,92401,92403,92406],{"class":31,"line":8232},[29,92400,57545],{"class":39},[29,92402,51566],{"class":309},[29,92404,92405],{"class":39},"#1286ff",[29,92407,1468],{"class":309},[29,92409,92410],{"class":31,"line":9891},[29,92411,2362],{"class":309},[29,92413,92414,92416,92418],{"class":31,"line":9916},[29,92415,52546],{"class":309},[29,92417,223],{"class":51429},[29,92419,51436],{"class":309},[29,92421,92422,92424,92426],{"class":31,"line":9939},[29,92423,51914],{"class":309},[29,92425,51463],{"class":51429},[29,92427,51436],{"class":309},[29,92429,92430],{"class":31,"line":9963},[29,92431,2575],{"emptyLinePlaceholder":233},[29,92433,92434,92436,92438],{"class":31,"line":9968},[29,92435,1218],{"class":309},[29,92437,51929],{"class":51429},[29,92439,51436],{"class":309},[29,92441,92442,92444,92446,92448,92450,92453],{"class":31,"line":9973},[29,92443,52273],{"class":309},[29,92445,51740],{"class":51429},[29,92447,53615],{"class":35},[29,92449,355],{"class":309},[29,92451,92452],{"class":103},"\"container\"",[29,92454,51436],{"class":309},[29,92456,92457,92459,92461,92463,92465,92468],{"class":31,"line":9978},[29,92458,51470],{"class":309},[29,92460,51740],{"class":51429},[29,92462,53615],{"class":35},[29,92464,355],{"class":309},[29,92466,92467],{"class":103},"\"header\"",[29,92469,51436],{"class":309},[29,92471,92472,92474,92476,92478,92480,92483],{"class":31,"line":9987},[29,92473,55363],{"class":309},[29,92475,546],{"class":51429},[29,92477,61186],{"class":35},[29,92479,355],{"class":309},[29,92481,92482],{"class":103},"\"http:\u002F\u002Fpip.itcast.cn\"",[29,92484,51436],{"class":309},[29,92486,92487,92489,92491,92493,92495,92498,92500,92502,92504],{"class":31,"line":9992},[29,92488,55431],{"class":309},[29,92490,1638],{"class":51429},[29,92492,55368],{"class":35},[29,92494,355],{"class":309},[29,92496,92497],{"class":103},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[29,92499,55376],{"class":35},[29,92501,355],{"class":309},[29,92503,7827],{"class":103},[29,92505,59256],{"class":309},[29,92507,92508,92510,92512],{"class":31,"line":9998},[29,92509,55536],{"class":309},[29,92511,546],{"class":51429},[29,92513,51436],{"class":309},[29,92515,92516,92518,92520],{"class":31,"line":10019},[29,92517,51905],{"class":309},[29,92519,51740],{"class":51429},[29,92521,51436],{"class":309},[29,92523,92524,92526,92528,92530,92532,92535],{"class":31,"line":10025},[29,92525,51470],{"class":309},[29,92527,51740],{"class":51429},[29,92529,53615],{"class":35},[29,92531,355],{"class":309},[29,92533,92534],{"class":103},"\"video\"",[29,92536,51436],{"class":309},[29,92538,92539,92541,92543,92545,92547,92550,92553,92555,92557],{"class":31,"line":10039},[29,92540,55363],{"class":309},[29,92542,28312],{"class":51429},[29,92544,55368],{"class":35},[29,92546,355],{"class":309},[29,92548,92549],{"class":103},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[29,92551,92552],{"class":35}," controls",[29,92554,55443],{"class":309},[29,92556,28312],{"class":51429},[29,92558,51436],{"class":309},[29,92560,92561,92563,92565],{"class":31,"line":10045},[29,92562,51905],{"class":309},[29,92564,51740],{"class":51429},[29,92566,51436],{"class":309},[29,92568,92569,92571,92573,92575,92577,92580],{"class":31,"line":10072},[29,92570,51470],{"class":309},[29,92572,51740],{"class":51429},[29,92574,53615],{"class":35},[29,92576,355],{"class":309},[29,92578,92579],{"class":103},"\"elevator\"",[29,92581,51436],{"class":309},[29,92583,92584,92586,92588,92590,92592,92594,92597,92599,92601,92604,92606],{"class":31,"line":10081},[29,92585,55363],{"class":309},[29,92587,546],{"class":51429},[29,92589,61186],{"class":35},[29,92591,355],{"class":309},[29,92593,64365],{"class":103},[29,92595,92596],{"class":35}," data-ref",[29,92598,355],{"class":309},[29,92600,92534],{"class":103},[29,92602,92603],{"class":309},">视频介绍\u003C\u002F",[29,92605,546],{"class":51429},[29,92607,51436],{"class":309},[29,92609,92610,92612,92614,92616,92618,92620,92622,92624,92627,92630,92632],{"class":31,"line":10087},[29,92611,55363],{"class":309},[29,92613,546],{"class":51429},[29,92615,61186],{"class":35},[29,92617,355],{"class":309},[29,92619,64365],{"class":103},[29,92621,92596],{"class":35},[29,92623,355],{"class":309},[29,92625,92626],{"class":103},"\"intro\"",[29,92628,92629],{"class":309},">课程简介\u003C\u002F",[29,92631,546],{"class":51429},[29,92633,51436],{"class":309},[29,92635,92636,92638,92640,92642,92644,92646,92648,92650,92653,92656,92658],{"class":31,"line":10095},[29,92637,55363],{"class":309},[29,92639,546],{"class":51429},[29,92641,61186],{"class":35},[29,92643,355],{"class":309},[29,92645,64365],{"class":103},[29,92647,92596],{"class":35},[29,92649,355],{"class":309},[29,92651,92652],{"class":103},"\"outline\"",[29,92654,92655],{"class":309},">评论列表\u003C\u002F",[29,92657,546],{"class":51429},[29,92659,51436],{"class":309},[29,92661,92662,92664,92666],{"class":31,"line":10100},[29,92663,51905],{"class":309},[29,92665,51740],{"class":51429},[29,92667,51436],{"class":309},[29,92669,92670,92672,92674],{"class":31,"line":16779},[29,92671,52546],{"class":309},[29,92673,51740],{"class":51429},[29,92675,51436],{"class":309},[29,92677,92678,92680,92682,92684,92686,92689,92691,92693],{"class":31,"line":16785},[29,92679,52273],{"class":309},[29,92681,51942],{"class":51429},[29,92683,55368],{"class":35},[29,92685,355],{"class":309},[29,92687,92688],{"class":103},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[29,92690,55443],{"class":309},[29,92692,51942],{"class":51429},[29,92694,51436],{"class":309},[29,92696,92697,92699,92701],{"class":31,"line":16808},[29,92698,52273],{"class":309},[29,92700,51942],{"class":51429},[29,92702,51436],{"class":309},[29,92704,92705],{"class":31,"line":16814},[29,92706,92707],{"class":367},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[29,92709,92710,92712,92714,92716,92718,92720,92722,92725],{"class":31,"line":16837},[29,92711,11396],{"class":305},[29,92713,92184],{"class":39},[29,92715,13739],{"class":305},[29,92717,54525],{"class":309},[29,92719,54528],{"class":35},[29,92721,310],{"class":309},[29,92723,92724],{"class":103},"'video'",[29,92726,316],{"class":309},[29,92728,92729],{"class":31,"line":16851},[29,92730,92731],{"class":367},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[29,92733,92734,92737,92739,92741,92743,92746,92748],{"class":31,"line":16871},[29,92735,92736],{"class":309},"    video.ontimeupdate ",[29,92738,355],{"class":305},[29,92740,88484],{"class":309},[29,92742,91302],{"class":35},[29,92744,92745],{"class":309},"(() ",[29,92747,84851],{"class":305},[29,92749,15747],{"class":309},[29,92751,92752],{"class":31,"line":16877},[29,92753,92754],{"class":367},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[29,92756,92757],{"class":31,"line":16888},[29,92758,92759],{"class":367},"      \u002F\u002F 控制台输出当前的时间\n",[29,92761,92762,92765],{"class":31,"line":16911},[29,92763,92764],{"class":367},"      \u002F\u002F console.log(video.currentTime)",[29,92766,92767],{"class":367},"  \u002F\u002F获得当前的视频时间\n",[29,92769,92770],{"class":31,"line":16933},[29,92771,92772],{"class":367},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[29,92774,92775,92777,92779,92781,92784],{"class":31,"line":16938},[29,92776,74812],{"class":309},[29,92778,71783],{"class":35},[29,92780,310],{"class":309},[29,92782,92783],{"class":103},"'currentTime'",[29,92785,92786],{"class":309},", video.currentTime)\n",[29,92788,92789,92791,92793],{"class":31,"line":16944},[29,92790,54664],{"class":309},[29,92792,6585],{"class":39},[29,92794,316],{"class":309},[29,92796,92797],{"class":31,"line":16958},[29,92798,92799],{"class":367},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[29,92801,92802,92805,92808,92810,92813,92815],{"class":31,"line":16971},[29,92803,92804],{"class":309},"    video.",[29,92806,92807],{"class":35},"onloadeddata",[29,92809,13739],{"class":305},[29,92811,92812],{"class":309}," () ",[29,92814,84851],{"class":305},[29,92816,15747],{"class":309},[29,92818,92819],{"class":31,"line":16976},[29,92820,60141],{"class":367},[29,92822,92823],{"class":31,"line":16990},[29,92824,92825],{"class":367},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[29,92827,92828,92831,92833,92836,92838,92840,92842,92844,92846],{"class":31,"line":16995},[29,92829,92830],{"class":309},"      video.currentTime ",[29,92832,355],{"class":305},[29,92834,92835],{"class":309}," localStorage.",[29,92837,71814],{"class":35},[29,92839,310],{"class":309},[29,92841,92783],{"class":103},[29,92843,13889],{"class":309},[29,92845,71486],{"class":305},[29,92847,47462],{"class":39},[29,92849,92850],{"class":31,"line":17001},[29,92851,2362],{"class":309},[29,92853,92854,92856,92858],{"class":31,"line":17006},[29,92855,52546],{"class":309},[29,92857,51942],{"class":51429},[29,92859,51436],{"class":309},[29,92861,92862,92864,92866],{"class":31,"line":17020},[29,92863,51914],{"class":309},[29,92865,51929],{"class":51429},[29,92867,51436],{"class":309},[29,92869,92870],{"class":31,"line":17025},[29,92871,2575],{"emptyLinePlaceholder":233},[29,92873,92874,92876,92878],{"class":31,"line":17030},[29,92875,51914],{"class":309},[29,92877,50764],{"class":51429},[29,92879,51436],{"class":309},[223,92881,92882],{},"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":24,"searchDepth":43,"depth":43,"links":92884},[92885,92890,92894,92895,92896,92901,92906,92907,92908,92909,92916,92921,92922,92932,92936,92937,92941],{"id":76820,"depth":43,"text":76821,"children":92886},[92887,92888,92889],{"id":76824,"depth":51,"text":76825},{"id":76849,"depth":51,"text":76850},{"id":76861,"depth":51,"text":76862},{"id":76873,"depth":43,"text":76874,"children":92891},[92892,92893],{"id":76877,"depth":51,"text":76878},{"id":76892,"depth":51,"text":76893},{"id":76944,"depth":43,"text":76945},{"id":76988,"depth":43,"text":76989},{"id":77005,"depth":43,"text":77006,"children":92897},[92898,92899,92900],{"id":77009,"depth":51,"text":77010},{"id":77022,"depth":51,"text":77023},{"id":77127,"depth":51,"text":77128},{"id":77416,"depth":43,"text":77417,"children":92902},[92903,92904,92905],{"id":77420,"depth":51,"text":77421},{"id":77863,"depth":51,"text":77864},{"id":78274,"depth":51,"text":78275},{"id":78337,"depth":43,"text":78338},{"id":78416,"depth":43,"text":78417},{"id":78509,"depth":43,"text":78510},{"id":80354,"depth":43,"text":80355,"children":92910},[92911,92912,92913,92914,92915],{"id":80358,"depth":51,"text":80359},{"id":80370,"depth":51,"text":80371},{"id":80589,"depth":51,"text":80590},{"id":80607,"depth":51,"text":80608},{"id":80667,"depth":51,"text":80668},{"id":84935,"depth":43,"text":84936,"children":92917},[92918,92919,92920],{"id":84939,"depth":51,"text":84940},{"id":84957,"depth":51,"text":84958},{"id":84983,"depth":51,"text":84984},{"id":84992,"depth":43,"text":84993},{"id":85014,"depth":43,"text":85015,"children":92923},[92924,92925,92926,92927,92928,92929,92930,92931],{"id":85018,"depth":51,"text":85019},{"id":85279,"depth":51,"text":85280},{"id":85465,"depth":51,"text":85466},{"id":85832,"depth":51,"text":85833},{"id":85948,"depth":51,"text":85949},{"id":85984,"depth":51,"text":85985},{"id":86031,"depth":51,"text":86032},{"id":86065,"depth":51,"text":86066},{"id":87428,"depth":43,"text":87429,"children":92933},[92934,92935],{"id":87432,"depth":51,"text":87433},{"id":87469,"depth":51,"text":87470},{"id":88824,"depth":43,"text":88825},{"id":89195,"depth":43,"text":89196,"children":92938},[92939,92940],{"id":89199,"depth":51,"text":89200},{"id":89233,"depth":51,"text":89234},{"id":89962,"depth":43,"text":89963,"children":92942},[92943,92944,92945,92946],{"id":89966,"depth":51,"text":89967},{"id":90924,"depth":51,"text":90925},{"id":91866,"depth":51,"text":91867},{"id":91940,"depth":51,"text":91941},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76809,"description":230},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92953,"title":92954,"body":92955,"description":92966,"extension":231,"meta":92967,"navigation":233,"path":92969,"seo":92970,"stem":92971,"__hash__":92972},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92956,"toc":92964},[92957],[171,92958,92959,92960],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[546,92961,92962],{"href":92962,"rel":92963},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24038],{"title":24,"searchDepth":43,"depth":43,"links":92965},[],"三件套第三套学习",{"category":92968},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92954,"description":92966},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92974,"title":92975,"body":92976,"description":230,"extension":231,"meta":93081,"navigation":233,"path":93082,"seo":93083,"stem":93084,"__hash__":93085},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92977,"toc":93076},[92978,92985,92988,92991,92994,92998,93007,93010,93013,93017,93026,93029,93033,93036,93056,93059,93073],[171,92979,92980],{},[546,92981,92984],{"href":92982,"rel":92983},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24038],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92986,92975],{"id":92987},"_1安装",[171,92989,92990],{},"numpy是科学计算基础库,底层是C语言",[171,92992,92993],{},"三种方式：",[14,92995,92997],{"id":92996},"_11-通过pip安装","1.1 通过pip安装",[19,92999,93001],{"className":30507,"code":93000,"language":30509,"meta":24,"style":24},"pip install numpy\n",[26,93002,93003],{"__ignoreMap":24},[29,93004,93005],{"class":31,"line":32},[29,93006,93000],{"class":309},[171,93008,93009],{},"首选方式，自动处理依赖项",[171,93011,93012],{},"在提示系统命令符中使用cmd",[14,93014,93016],{"id":93015},"_12-通过anaconda安装","1.2 通过Anaconda安装",[19,93018,93020],{"className":30507,"code":93019,"language":30509,"meta":24,"style":24},"conda install numpy\n",[26,93021,93022],{"__ignoreMap":24},[29,93023,93024],{"class":31,"line":32},[29,93025,93019],{"class":309},[171,93027,93028],{},"自动解决环境依赖",[14,93030,93032],{"id":93031},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[171,93034,93035],{},"对于Debian\u002FUbuntu",[19,93037,93039],{"className":30507,"code":93038,"language":30509,"meta":24,"style":24},"sudo apt-get install python3-numpy\n",[26,93040,93041],{"__ignoreMap":24},[29,93042,93043,93046,93048,93051,93053],{"class":31,"line":32},[29,93044,93045],{"class":309},"sudo apt",[29,93047,840],{"class":305},[29,93049,93050],{"class":309},"get install python3",[29,93052,840],{"class":305},[29,93054,93055],{"class":309},"numpy\n",[171,93057,93058],{},"对于Fedora:",[19,93060,93062],{"className":30507,"code":93061,"language":30509,"meta":24,"style":24},"sudo dnf install python3-numpy\n",[26,93063,93064],{"__ignoreMap":24},[29,93065,93066,93069,93071],{"class":31,"line":32},[29,93067,93068],{"class":309},"sudo dnf install python3",[29,93070,840],{"class":305},[29,93072,93055],{"class":309},[223,93074,93075],{},"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":24,"searchDepth":43,"depth":43,"links":93077},[93078,93079,93080],{"id":92996,"depth":43,"text":92997},{"id":93015,"depth":43,"text":93016},{"id":93031,"depth":43,"text":93032},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92975,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93087,"title":93088,"body":93089,"description":230,"extension":231,"meta":93202,"navigation":233,"path":93203,"seo":93204,"stem":93205,"__hash__":93206},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93090,"toc":93200},[93091,93094,93097,93100,93103,93106,93109,93112,93115,93118,93194,93197],[10,93092,93088],{"id":93093},"_10算数函数",[171,93095,93096],{},"加减乘除运算跟python基础语法没区别",[171,93098,93099],{},"除了python那种方法外还可以使用函数",[171,93101,93102],{},"加：np.add(a,b)",[171,93104,93105],{},"减：np.subtract(a,b)",[171,93107,93108],{},"乘：np.multiply(a,b)",[171,93110,93111],{},"除：np.divide(a,b) == a\u002Fb",[171,93113,93114],{},"取余：np.mod(a,b) == a%b",[171,93116,93117],{},"必须会的用法：",[19,93119,93121],{"className":30507,"code":93120,"language":30509,"meta":24,"style":24},"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",[26,93122,93123,93145,93166,93176,93189],{"__ignoreMap":24},[29,93124,93125,93127,93129,93132,93134,93137,93139,93141,93143],{"class":31,"line":32},[29,93126,546],{"class":309},[29,93128,355],{"class":305},[29,93130,93131],{"class":309},"np.arange(",[29,93133,728],{"class":39},[29,93135,93136],{"class":309},").reshape(",[29,93138,380],{"class":39},[29,93140,686],{"class":309},[29,93142,380],{"class":39},[29,93144,316],{"class":309},[29,93146,93147,93149,93151,93154,93156,93158,93160,93162,93164],{"class":31,"line":43},[29,93148,571],{"class":309},[29,93150,355],{"class":305},[29,93152,93153],{"class":309},"np.array([",[29,93155,754],{"class":39},[29,93157,686],{"class":309},[29,93159,754],{"class":39},[29,93161,686],{"class":309},[29,93163,754],{"class":39},[29,93165,4832],{"class":309},[29,93167,93168,93171,93173],{"class":31,"line":51},[29,93169,93170],{"class":309},"result",[29,93172,355],{"class":305},[29,93174,93175],{"class":309},"np.empty_like(a)\n",[29,93177,93178,93181,93184,93186],{"class":31,"line":59},[29,93179,93180],{"class":309},"np.add(a,b,",[29,93182,93183],{"class":5391},"out",[29,93185,355],{"class":305},[29,93187,93188],{"class":309},"result)\n",[29,93190,93191],{"class":31,"line":67},[29,93192,93193],{"class":309},"result\n",[171,93195,93196],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[223,93198,93199],{},"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":24,"searchDepth":43,"depth":43,"links":93201},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93088,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93208,"title":93209,"body":93210,"description":230,"extension":231,"meta":93972,"navigation":233,"path":93973,"seo":93974,"stem":93975,"__hash__":93976},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93211,"toc":93959},[93212,93215,93218,93221,93225,93264,93268,93312,93372,93376,93379,93418,93421,93466,93470,93506,93510,93579,93583,93647,93651,93654,93657,93660,93663,93699,93703,93743,93747,93819,93822,93826,93889,93893,93956],[10,93213,93209],{"id":93214},"_11统计函数",[171,93216,93217],{},"sum max min mean",[171,93219,93220],{},"这些有axis参数，可以指定方向",[14,93222,93224],{"id":93223},"_111-sum求和函数","11.1 sum()求和函数",[19,93226,93228],{"className":30507,"code":93227,"language":30509,"meta":24,"style":24},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[26,93229,93230,93235,93256],{"__ignoreMap":24},[29,93231,93232],{"class":31,"line":32},[29,93233,93234],{"class":367},"#创建一维数组\n",[29,93236,93237,93239,93241,93244,93246,93248,93250,93252,93254],{"class":31,"line":43},[29,93238,546],{"class":309},[29,93240,355],{"class":305},[29,93242,93243],{"class":309},"np.random.randint(",[29,93245,525],{"class":39},[29,93247,686],{"class":309},[29,93249,619],{"class":39},[29,93251,686],{"class":309},[29,93253,1008],{"class":39},[29,93255,316],{"class":309},[29,93257,93258,93261],{"class":31,"line":51},[29,93259,93260],{"class":309},"np.sum(a)",[29,93262,93263],{"class":367},"#求和\n",[14,93265,93267],{"id":93266},"_112-max求最大值函数","11.2 max()求最大值函数",[19,93269,93271],{"className":30507,"code":93270,"language":30509,"meta":24,"style":24},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[26,93272,93273,93277,93297,93302,93307],{"__ignoreMap":24},[29,93274,93275],{"class":31,"line":32},[29,93276,93234],{"class":367},[29,93278,93279,93281,93283,93285,93287,93289,93291,93293,93295],{"class":31,"line":43},[29,93280,546],{"class":309},[29,93282,355],{"class":305},[29,93284,93243],{"class":309},[29,93286,525],{"class":39},[29,93288,686],{"class":309},[29,93290,619],{"class":39},[29,93292,686],{"class":309},[29,93294,1008],{"class":39},[29,93296,316],{"class":309},[29,93298,93299],{"class":31,"line":51},[29,93300,93301],{"class":309},"np.max(a)\n",[29,93303,93304],{"class":31,"line":59},[29,93305,93306],{"class":367},"#最大索引(求最大元素的索引)arg\n",[29,93308,93309],{"class":31,"line":67},[29,93310,93311],{"class":309},"np.argmax(a)\n",[19,93313,93315],{"className":30507,"code":93314,"language":30509,"meta":24,"style":24},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[26,93316,93317,93338,93358,93362],{"__ignoreMap":24},[29,93318,93319,93321,93323,93326,93328,93330,93332,93334,93336],{"class":31,"line":32},[29,93320,11094],{"class":309},[29,93322,355],{"class":305},[29,93324,93325],{"class":309}," np.array([",[29,93327,525],{"class":39},[29,93329,12610],{"class":309},[29,93331,627],{"class":39},[29,93333,12610],{"class":309},[29,93335,380],{"class":39},[29,93337,4832],{"class":309},[29,93339,93340,93342,93344,93346,93348,93350,93352,93354,93356],{"class":31,"line":43},[29,93341,11120],{"class":309},[29,93343,355],{"class":305},[29,93345,93325],{"class":309},[29,93347,380],{"class":39},[29,93349,12610],{"class":309},[29,93351,386],{"class":39},[29,93353,12610],{"class":309},[29,93355,601],{"class":39},[29,93357,4832],{"class":309},[29,93359,93360],{"class":31,"line":51},[29,93361,2575],{"emptyLinePlaceholder":233},[29,93363,93364,93366,93369],{"class":31,"line":59},[29,93365,30544],{"class":39},[29,93367,93368],{"class":309},"(np.maximum(a, b))   ",[29,93370,93371],{"class":367},"# [3 5 4]，每个位置上取较大值\n",[14,93373,93375],{"id":93374},"_113-mean求平均值函数","11.3 mean()求平均值函数",[171,93377,93378],{},"①一维数组：",[19,93380,93382],{"className":30507,"code":93381,"language":30509,"meta":24,"style":24},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[26,93383,93384,93388,93408,93413],{"__ignoreMap":24},[29,93385,93386],{"class":31,"line":32},[29,93387,93234],{"class":367},[29,93389,93390,93392,93394,93396,93398,93400,93402,93404,93406],{"class":31,"line":43},[29,93391,546],{"class":309},[29,93393,355],{"class":305},[29,93395,93243],{"class":309},[29,93397,525],{"class":39},[29,93399,686],{"class":309},[29,93401,619],{"class":39},[29,93403,686],{"class":309},[29,93405,1008],{"class":39},[29,93407,316],{"class":309},[29,93409,93410],{"class":31,"line":51},[29,93411,93412],{"class":367},"#求平均值\n",[29,93414,93415],{"class":31,"line":59},[29,93416,93417],{"class":309},"np.mean(a)\n",[171,93419,93420],{},"②二维数组",[19,93422,93424],{"className":30507,"code":93423,"language":30509,"meta":24,"style":24},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[26,93425,93426,93431,93456,93461],{"__ignoreMap":24},[29,93427,93428],{"class":31,"line":32},[29,93429,93430],{"class":367},"#二维数组\n",[29,93432,93433,93436,93438,93440,93442,93444,93446,93448,93450,93452,93454],{"class":31,"line":43},[29,93434,93435],{"class":309},"aa",[29,93437,355],{"class":305},[29,93439,93131],{"class":309},[29,93441,525],{"class":39},[29,93443,686],{"class":309},[29,93445,831],{"class":39},[29,93447,93136],{"class":309},[29,93449,380],{"class":39},[29,93451,686],{"class":309},[29,93453,601],{"class":39},[29,93455,316],{"class":309},[29,93457,93458],{"class":31,"line":51},[29,93459,93460],{"class":367},"#对数组中的所有数求平均\n",[29,93462,93463],{"class":31,"line":59},[29,93464,93465],{"class":309},"np.mean(aa)\n",[14,93467,93469],{"id":93468},"_114-median求中位数函数","11.4 median()求中位数函数",[19,93471,93473],{"className":30507,"code":93472,"language":30509,"meta":24,"style":24},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[26,93474,93475,93480,93496,93501],{"__ignoreMap":24},[29,93476,93477],{"class":31,"line":32},[29,93478,93479],{"class":367},"#求中位数\n",[29,93481,93482,93484,93486,93488,93490,93492,93494],{"class":31,"line":43},[29,93483,571],{"class":309},[29,93485,355],{"class":305},[29,93487,93131],{"class":309},[29,93489,525],{"class":39},[29,93491,686],{"class":309},[29,93493,754],{"class":39},[29,93495,316],{"class":309},[29,93497,93498],{"class":31,"line":51},[29,93499,93500],{"class":309},"np.median(b)\n",[29,93502,93503],{"class":31,"line":59},[29,93504,93505],{"class":367},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93507,93509],{"id":93508},"_115-power求幂运算函数","11.5 power()求幂运算函数",[19,93511,93513],{"className":30507,"code":93512,"language":30509,"meta":24,"style":24},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[26,93514,93515,93531,93536,93541,93550,93555,93564],{"__ignoreMap":24},[29,93516,93517,93519,93521,93523,93525,93527,93529],{"class":31,"line":32},[29,93518,571],{"class":309},[29,93520,355],{"class":305},[29,93522,93131],{"class":309},[29,93524,525],{"class":39},[29,93526,686],{"class":309},[29,93528,754],{"class":39},[29,93530,316],{"class":309},[29,93532,93533],{"class":31,"line":43},[29,93534,93535],{"class":367},"#幂运算\n",[29,93537,93538],{"class":31,"line":51},[29,93539,93540],{"class":367},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[29,93542,93543,93546,93548],{"class":31,"line":59},[29,93544,93545],{"class":309},"np.power(b,",[29,93547,386],{"class":39},[29,93549,316],{"class":309},[29,93551,93552],{"class":31,"line":67},[29,93553,93554],{"class":367},"#或者以下代码，将数据存储起来\n",[29,93556,93557,93559,93561],{"class":31,"line":75},[29,93558,1153],{"class":309},[29,93560,355],{"class":305},[29,93562,93563],{"class":309},"np.empty_like(b)\n",[29,93565,93566,93568,93570,93572,93574,93576],{"class":31,"line":83},[29,93567,93545],{"class":309},[29,93569,386],{"class":39},[29,93571,686],{"class":309},[29,93573,93183],{"class":5391},[29,93575,355],{"class":305},[29,93577,93578],{"class":309},"y)\n",[14,93580,93582],{"id":93581},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[19,93584,93586],{"className":30507,"code":93585,"language":30509,"meta":24,"style":24},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[26,93587,93588,93604,93609,93614,93618,93636],{"__ignoreMap":24},[29,93589,93590,93592,93594,93596,93598,93600,93602],{"class":31,"line":32},[29,93591,571],{"class":309},[29,93593,355],{"class":305},[29,93595,93131],{"class":309},[29,93597,525],{"class":39},[29,93599,686],{"class":309},[29,93601,754],{"class":39},[29,93603,316],{"class":309},[29,93605,93606],{"class":31,"line":43},[29,93607,93608],{"class":367},"#开方\n",[29,93610,93611],{"class":31,"line":51},[29,93612,93613],{"class":309},"np.sqrt(b)\n",[29,93615,93616],{"class":31,"line":59},[29,93617,93554],{"class":367},[29,93619,93620,93622,93624,93627,93630,93632,93634],{"class":31,"line":67},[29,93621,1153],{"class":309},[29,93623,355],{"class":305},[29,93625,93626],{"class":309},"np.empty_like(b,",[29,93628,93629],{"class":5391},"dtype",[29,93631,355],{"class":305},[29,93633,349],{"class":39},[29,93635,316],{"class":309},[29,93637,93638,93641,93643,93645],{"class":31,"line":75},[29,93639,93640],{"class":309},"np.sqrt(b,",[29,93642,93183],{"class":5391},[29,93644,355],{"class":305},[29,93646,93578],{"class":309},[14,93648,93650],{"id":93649},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[171,93652,93653],{},"对数组中的元素累计求和，可指定轴",[171,93655,93656],{},"#累计求和的意思是：",[171,93658,93659],{},"a = np.array([1, 2, 3, 4])",[171,93661,93662],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[19,93664,93666],{"className":30507,"code":93665,"language":30509,"meta":24,"style":24},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[26,93667,93668,93684,93689,93694],{"__ignoreMap":24},[29,93669,93670,93672,93674,93676,93678,93680,93682],{"class":31,"line":32},[29,93671,571],{"class":309},[29,93673,355],{"class":305},[29,93675,93131],{"class":309},[29,93677,525],{"class":39},[29,93679,686],{"class":309},[29,93681,754],{"class":39},[29,93683,316],{"class":309},[29,93685,93686],{"class":31,"line":43},[29,93687,93688],{"class":309},"np.cumsum(b)\n",[29,93690,93691],{"class":31,"line":51},[29,93692,93693],{"class":367},"#结果：\n",[29,93695,93696],{"class":31,"line":59},[29,93697,93698],{"class":367},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93700,93702],{"id":93701},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[19,93704,93706],{"className":30507,"code":93705,"language":30509,"meta":24,"style":24},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[26,93707,93708,93724,93729,93734,93738],{"__ignoreMap":24},[29,93709,93710,93712,93714,93716,93718,93720,93722],{"class":31,"line":32},[29,93711,571],{"class":309},[29,93713,355],{"class":305},[29,93715,93131],{"class":309},[29,93717,525],{"class":39},[29,93719,686],{"class":309},[29,93721,754],{"class":39},[29,93723,316],{"class":309},[29,93725,93726],{"class":31,"line":43},[29,93727,93728],{"class":367},"#对数组中的元素累计求积，可指定轴\n",[29,93730,93731],{"class":31,"line":51},[29,93732,93733],{"class":309},"np.cumprod(b)\n",[29,93735,93736],{"class":31,"line":59},[29,93737,93693],{"class":367},[29,93739,93740],{"class":31,"line":67},[29,93741,93742],{"class":367},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93744,93746],{"id":93745},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[19,93748,93750],{"className":30507,"code":93749,"language":30509,"meta":24,"style":24},"#删除数组中的重复数据，并对数据进行排序\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",[26,93751,93752,93757,93805,93810,93814],{"__ignoreMap":24},[29,93753,93754],{"class":31,"line":32},[29,93755,93756],{"class":367},"#删除数组中的重复数据，并对数据进行排序\n",[29,93758,93759,93761,93763,93765,93767,93769,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799,93801,93803],{"class":31,"line":43},[29,93760,546],{"class":309},[29,93762,355],{"class":305},[29,93764,93153],{"class":309},[29,93766,525],{"class":39},[29,93768,686],{"class":309},[29,93770,386],{"class":39},[29,93772,686],{"class":309},[29,93774,380],{"class":39},[29,93776,686],{"class":309},[29,93778,806],{"class":39},[29,93780,686],{"class":309},[29,93782,380],{"class":39},[29,93784,686],{"class":309},[29,93786,754],{"class":39},[29,93788,686],{"class":309},[29,93790,505],{"class":39},[29,93792,686],{"class":309},[29,93794,499],{"class":39},[29,93796,686],{"class":309},[29,93798,1083],{"class":39},[29,93800,686],{"class":309},[29,93802,601],{"class":39},[29,93804,4832],{"class":309},[29,93806,93807],{"class":31,"line":51},[29,93808,93809],{"class":309},"np.unique(a)\n",[29,93811,93812],{"class":31,"line":59},[29,93813,93693],{"class":367},[29,93815,93816],{"class":31,"line":67},[29,93817,93818],{"class":367},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[171,93820,93821],{},"升序形式排序",[14,93823,93825],{"id":93824},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[19,93827,93829],{"className":30507,"code":93828,"language":30509,"meta":24,"style":24},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[26,93830,93831,93879,93884],{"__ignoreMap":24},[29,93832,93833,93835,93837,93839,93841,93843,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93869,93871,93873,93875,93877],{"class":31,"line":32},[29,93834,546],{"class":309},[29,93836,355],{"class":305},[29,93838,93153],{"class":309},[29,93840,525],{"class":39},[29,93842,686],{"class":309},[29,93844,386],{"class":39},[29,93846,686],{"class":309},[29,93848,380],{"class":39},[29,93850,686],{"class":309},[29,93852,806],{"class":39},[29,93854,686],{"class":309},[29,93856,380],{"class":39},[29,93858,686],{"class":309},[29,93860,754],{"class":39},[29,93862,686],{"class":309},[29,93864,505],{"class":39},[29,93866,686],{"class":309},[29,93868,499],{"class":39},[29,93870,686],{"class":309},[29,93872,1083],{"class":39},[29,93874,686],{"class":309},[29,93876,601],{"class":39},[29,93878,4832],{"class":309},[29,93880,93881],{"class":31,"line":43},[29,93882,93883],{"class":367},"#返回数组中非零元素的索引\n",[29,93885,93886],{"class":31,"line":51},[29,93887,93888],{"class":309},"np.nonzero(a)\n",[14,93890,93892],{"id":93891},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[19,93894,93896],{"className":30507,"code":93895,"language":30509,"meta":24,"style":24},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[26,93897,93898,93946,93951],{"__ignoreMap":24},[29,93899,93900,93902,93904,93906,93908,93910,93912,93914,93916,93918,93920,93922,93924,93926,93928,93930,93932,93934,93936,93938,93940,93942,93944],{"class":31,"line":32},[29,93901,546],{"class":309},[29,93903,355],{"class":305},[29,93905,93153],{"class":309},[29,93907,525],{"class":39},[29,93909,686],{"class":309},[29,93911,386],{"class":39},[29,93913,686],{"class":309},[29,93915,380],{"class":39},[29,93917,686],{"class":309},[29,93919,806],{"class":39},[29,93921,686],{"class":309},[29,93923,380],{"class":39},[29,93925,686],{"class":309},[29,93927,754],{"class":39},[29,93929,686],{"class":309},[29,93931,505],{"class":39},[29,93933,686],{"class":309},[29,93935,499],{"class":39},[29,93937,686],{"class":309},[29,93939,1083],{"class":39},[29,93941,686],{"class":309},[29,93943,601],{"class":39},[29,93945,4832],{"class":309},[29,93947,93948],{"class":31,"line":43},[29,93949,93950],{"class":367},"#计算一组数中最大值与最小值的差，可指定轴\n",[29,93952,93953],{"class":31,"line":51},[29,93954,93955],{"class":309},"np.ptp(a)\n",[223,93957,93958],{},"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":24,"searchDepth":43,"depth":43,"links":93960},[93961,93962,93963,93964,93965,93966,93967,93968,93969,93970,93971],{"id":93223,"depth":43,"text":93224},{"id":93266,"depth":43,"text":93267},{"id":93374,"depth":43,"text":93375},{"id":93468,"depth":43,"text":93469},{"id":93508,"depth":43,"text":93509},{"id":93581,"depth":43,"text":93582},{"id":93649,"depth":43,"text":93650},{"id":93701,"depth":43,"text":93702},{"id":93745,"depth":43,"text":93746},{"id":93824,"depth":43,"text":93825},{"id":93891,"depth":43,"text":93892},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93209,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93978,"title":93979,"body":93980,"description":230,"extension":231,"meta":94635,"navigation":233,"path":94636,"seo":94637,"stem":94638,"__hash__":94639},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93981,"toc":94623},[93982,93985,93989,93992,94208,94212,94215,94424,94428,94494,94499,94503,94506,94509,94547,94551,94554,94559,94563,94566,94569,94574,94578,94581,94585,94588,94591,94596,94600,94603,94606,94611,94615,94620],[10,93983,93979],{"id":93984},"_12其他常用函数",[14,93986,93988],{"id":93987},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[171,93990,93991],{},"将数组的数据按照行列复制扩展",[19,93993,93995],{"className":30507,"code":93994,"language":30509,"meta":24,"style":24},"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",[26,93996,93997,94013,94022,94026,94031,94036,94049,94053,94058,94063,94068,94072,94077,94101,94113,94117,94121,94126,94131,94136,94141,94145,94158,94162,94166,94171,94176,94181,94186,94191,94195,94199,94204],{"__ignoreMap":24},[29,93998,93999,94001,94003,94005,94007,94009,94011],{"class":31,"line":32},[29,94000,546],{"class":309},[29,94002,355],{"class":305},[29,94004,93131],{"class":309},[29,94006,525],{"class":39},[29,94008,686],{"class":309},[29,94010,627],{"class":39},[29,94012,316],{"class":309},[29,94014,94015,94018,94020],{"class":31,"line":43},[29,94016,94017],{"class":309},"np.tile(a,",[29,94019,386],{"class":39},[29,94021,316],{"class":309},[29,94023,94024],{"class":31,"line":51},[29,94025,93693],{"class":367},[29,94027,94028],{"class":31,"line":59},[29,94029,94030],{"class":367},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[29,94032,94033],{"class":31,"line":67},[29,94034,94035],{"class":367},"#行复制两次，列复制三次\n",[29,94037,94038,94041,94043,94045,94047],{"class":31,"line":75},[29,94039,94040],{"class":309},"np.tile(a,(",[29,94042,386],{"class":39},[29,94044,686],{"class":309},[29,94046,380],{"class":39},[29,94048,30626],{"class":309},[29,94050,94051],{"class":31,"line":83},[29,94052,93693],{"class":367},[29,94054,94055],{"class":31,"line":158},[29,94056,94057],{"class":103},"'''\n",[29,94059,94060],{"class":31,"line":166},[29,94061,94062],{"class":103},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[29,94064,94065],{"class":31,"line":1505},[29,94066,94067],{"class":103},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[29,94069,94070],{"class":31,"line":1788},[29,94071,94057],{"class":103},[29,94073,94074],{"class":31,"line":1793},[29,94075,94076],{"class":367},"#创建二维数组\n",[29,94078,94079,94081,94083,94085,94087,94089,94091,94093,94095,94097,94099],{"class":31,"line":1799},[29,94080,93435],{"class":309},[29,94082,355],{"class":305},[29,94084,93131],{"class":309},[29,94086,525],{"class":39},[29,94088,686],{"class":309},[29,94090,831],{"class":39},[29,94092,93136],{"class":309},[29,94094,601],{"class":39},[29,94096,686],{"class":309},[29,94098,380],{"class":39},[29,94100,316],{"class":309},[29,94102,94103,94106,94108,94110],{"class":31,"line":1804},[29,94104,94105],{"class":309},"np.tile(aa,",[29,94107,386],{"class":39},[29,94109,737],{"class":309},[29,94111,94112],{"class":367},"#一个数的时候就是行\n",[29,94114,94115],{"class":31,"line":1818},[29,94116,93693],{"class":367},[29,94118,94119],{"class":31,"line":1823},[29,94120,94057],{"class":103},[29,94122,94123],{"class":31,"line":1829},[29,94124,94125],{"class":103},"array([[ 1,  2,  3,  1,  2,  3],\n",[29,94127,94128],{"class":31,"line":1850},[29,94129,94130],{"class":103},"       [ 4,  5,  6,  4,  5,  6],\n",[29,94132,94133],{"class":31,"line":1855},[29,94134,94135],{"class":103},"       [ 7,  8,  9,  7,  8,  9],\n",[29,94137,94138],{"class":31,"line":1869},[29,94139,94140],{"class":103},"       [10, 11, 12, 10, 11, 12]])\n",[29,94142,94143],{"class":31,"line":1874},[29,94144,94057],{"class":103},[29,94146,94147,94150,94152,94154,94156],{"class":31,"line":1903},[29,94148,94149],{"class":309},"np.tile(aa,(",[29,94151,386],{"class":39},[29,94153,686],{"class":309},[29,94155,380],{"class":39},[29,94157,30626],{"class":309},[29,94159,94160],{"class":31,"line":1908},[29,94161,93693],{"class":367},[29,94163,94164],{"class":31,"line":1925},[29,94165,94057],{"class":103},[29,94167,94168],{"class":31,"line":1930},[29,94169,94170],{"class":103},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[29,94172,94173],{"class":31,"line":1935},[29,94174,94175],{"class":103},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[29,94177,94178],{"class":31,"line":1940},[29,94179,94180],{"class":103},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[29,94182,94183],{"class":31,"line":1954},[29,94184,94185],{"class":103},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[29,94187,94188],{"class":31,"line":1959},[29,94189,94190],{"class":103},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[29,94192,94193],{"class":31,"line":2752},[29,94194,94175],{"class":103},[29,94196,94197],{"class":31,"line":2766},[29,94198,94180],{"class":103},[29,94200,94201],{"class":31,"line":2774},[29,94202,94203],{"class":103},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[29,94205,94206],{"class":31,"line":2779},[29,94207,94057],{"class":103},[14,94209,94211],{"id":94210},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[171,94213,94214],{},"repeat()将数组中的每个元素重复若干次",[19,94216,94218],{"className":30507,"code":94217,"language":30509,"meta":24,"style":24},"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",[26,94219,94220,94236,94245,94249,94254,94278,94283,94292,94296,94301,94305,94310,94326,94330,94334,94339,94344,94349,94353,94358,94362,94367,94372,94376,94392,94396,94400,94405,94410,94415,94420],{"__ignoreMap":24},[29,94221,94222,94224,94226,94228,94230,94232,94234],{"class":31,"line":32},[29,94223,546],{"class":309},[29,94225,355],{"class":305},[29,94227,93131],{"class":309},[29,94229,525],{"class":39},[29,94231,686],{"class":309},[29,94233,627],{"class":39},[29,94235,316],{"class":309},[29,94237,94238,94241,94243],{"class":31,"line":43},[29,94239,94240],{"class":309},"np.repeat(a,",[29,94242,380],{"class":39},[29,94244,316],{"class":309},[29,94246,94247],{"class":31,"line":51},[29,94248,93693],{"class":367},[29,94250,94251],{"class":31,"line":59},[29,94252,94253],{"class":367},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[29,94255,94256,94258,94260,94262,94264,94266,94268,94270,94272,94274,94276],{"class":31,"line":67},[29,94257,93435],{"class":309},[29,94259,355],{"class":305},[29,94261,93131],{"class":309},[29,94263,525],{"class":39},[29,94265,686],{"class":309},[29,94267,831],{"class":39},[29,94269,93136],{"class":309},[29,94271,601],{"class":39},[29,94273,686],{"class":309},[29,94275,380],{"class":39},[29,94277,316],{"class":309},[29,94279,94280],{"class":31,"line":75},[29,94281,94282],{"class":367},"#这个重复之后二维变成一维\n",[29,94284,94285,94288,94290],{"class":31,"line":83},[29,94286,94287],{"class":309},"np.repeat(aa,",[29,94289,386],{"class":39},[29,94291,316],{"class":309},[29,94293,94294],{"class":31,"line":158},[29,94295,94057],{"class":103},[29,94297,94298],{"class":31,"line":166},[29,94299,94300],{"class":103},"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",[29,94302,94303],{"class":31,"line":1505},[29,94304,94057],{"class":103},[29,94306,94307],{"class":31,"line":1788},[29,94308,94309],{"class":367},"#指定axis\n",[29,94311,94312,94314,94316,94318,94320,94322,94324],{"class":31,"line":1793},[29,94313,94287],{"class":309},[29,94315,386],{"class":39},[29,94317,686],{"class":309},[29,94319,47643],{"class":5391},[29,94321,355],{"class":305},[29,94323,499],{"class":39},[29,94325,316],{"class":309},[29,94327,94328],{"class":31,"line":1799},[29,94329,93693],{"class":367},[29,94331,94332],{"class":31,"line":1804},[29,94333,94057],{"class":103},[29,94335,94336],{"class":31,"line":1818},[29,94337,94338],{"class":103},"array([[ 1,  2,  3],\n",[29,94340,94341],{"class":31,"line":1823},[29,94342,94343],{"class":103},"       [ 1,  2,  3],\n",[29,94345,94346],{"class":31,"line":1829},[29,94347,94348],{"class":103},"       [ 4,  5,  6],\n",[29,94350,94351],{"class":31,"line":1850},[29,94352,94348],{"class":103},[29,94354,94355],{"class":31,"line":1855},[29,94356,94357],{"class":103},"       [ 7,  8,  9],\n",[29,94359,94360],{"class":31,"line":1869},[29,94361,94357],{"class":103},[29,94363,94364],{"class":31,"line":1874},[29,94365,94366],{"class":103},"       [10, 11, 12],\n",[29,94368,94369],{"class":31,"line":1903},[29,94370,94371],{"class":103},"       [10, 11, 12]])\n",[29,94373,94374],{"class":31,"line":1908},[29,94375,94057],{"class":103},[29,94377,94378,94380,94382,94384,94386,94388,94390],{"class":31,"line":1925},[29,94379,94287],{"class":309},[29,94381,386],{"class":39},[29,94383,686],{"class":309},[29,94385,47643],{"class":5391},[29,94387,355],{"class":305},[29,94389,525],{"class":39},[29,94391,316],{"class":309},[29,94393,94394],{"class":31,"line":1930},[29,94395,93693],{"class":367},[29,94397,94398],{"class":31,"line":1935},[29,94399,94057],{"class":103},[29,94401,94402],{"class":31,"line":1940},[29,94403,94404],{"class":103},"array([[ 1,  1,  2,  2,  3,  3],\n",[29,94406,94407],{"class":31,"line":1954},[29,94408,94409],{"class":103},"       [ 4,  4,  5,  5,  6,  6],\n",[29,94411,94412],{"class":31,"line":1959},[29,94413,94414],{"class":103},"       [ 7,  7,  8,  8,  9,  9],\n",[29,94416,94417],{"class":31,"line":2752},[29,94418,94419],{"class":103},"       [10, 10, 11, 11, 12, 12]])\n",[29,94421,94422],{"class":31,"line":2766},[29,94423,94057],{"class":103},[14,94425,94427],{"id":94426},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[19,94429,94431],{"className":30507,"code":94430,"language":30509,"meta":24,"style":24},"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",[26,94432,94433,94449,94454,94466,94470,94475,94485,94489],{"__ignoreMap":24},[29,94434,94435,94437,94439,94441,94443,94445,94447],{"class":31,"line":32},[29,94436,546],{"class":309},[29,94438,355],{"class":305},[29,94440,93131],{"class":309},[29,94442,525],{"class":39},[29,94444,686],{"class":309},[29,94446,627],{"class":39},[29,94448,316],{"class":309},[29,94450,94451],{"class":31,"line":43},[29,94452,94453],{"class":367},"#array([，2，3，4])\n",[29,94455,94456,94459,94461,94463],{"class":31,"line":51},[29,94457,94458],{"class":309},"np.roll(a,",[29,94460,386],{"class":39},[29,94462,737],{"class":309},[29,94464,94465],{"class":367},"#传正数向后调多少位，传负数向前调多少位\n",[29,94467,94468],{"class":31,"line":59},[29,94469,93693],{"class":367},[29,94471,94472],{"class":31,"line":67},[29,94473,94474],{"class":367},"#array([3, 4, 1, 2])\n",[29,94476,94477,94479,94481,94483],{"class":31,"line":75},[29,94478,94458],{"class":309},[29,94480,840],{"class":305},[29,94482,525],{"class":39},[29,94484,316],{"class":309},[29,94486,94487],{"class":31,"line":83},[29,94488,93693],{"class":367},[29,94490,94491],{"class":31,"line":158},[29,94492,94493],{"class":367},"#array([2, 3, 4, 1])\n",[171,94495,94496],{},[1638,94497],{"alt":24,"src":94498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94500,94502],{"id":94501},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[171,94504,94505],{},"resize()重新调整数组的大小",[171,94507,94508],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[19,94510,94512],{"className":30507,"code":94511,"language":30509,"meta":24,"style":24},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[26,94513,94514,94519,94532],{"__ignoreMap":24},[29,94515,94516],{"class":31,"line":32},[29,94517,94518],{"class":367},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[29,94520,94521,94524,94526,94528,94530],{"class":31,"line":43},[29,94522,94523],{"class":309},"np.resize(aa,(",[29,94525,386],{"class":39},[29,94527,686],{"class":309},[29,94529,652],{"class":39},[29,94531,30626],{"class":309},[29,94533,94534,94536,94538,94540,94542,94544],{"class":31,"line":51},[29,94535,94523],{"class":309},[29,94537,386],{"class":39},[29,94539,686],{"class":309},[29,94541,728],{"class":39},[29,94543,82900],{"class":309},[29,94545,94546],{"class":367},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94548,94550],{"id":94549},"_125-placeput函数","12.5 place()\u002Fput()函数",[171,94552,94553],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[171,94555,94556],{},[1638,94557],{"alt":24,"src":94558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94560,94562],{"id":94561},"_126-保存加载文件","12.6 保存加载文件",[171,94564,94565],{},"savetxt():将数据保存到txt文件中",[171,94567,94568],{},"loadtxt():从文件加载数据",[171,94570,94571],{},[1638,94572],{"alt":24,"src":94573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94575,94577],{"id":94576},"_127-genfromtxt函数","12.7 genfromtxt()函数",[171,94579,94580],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94582,94584],{"id":94583},"_128-anyall函数","12.8 any()\u002Fall()函数",[171,94586,94587],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[171,94589,94590],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[171,94592,94593],{},[1638,94594],{"alt":24,"src":94595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94597,94599],{"id":94598},"_129-where语句","12.9 where语句",[171,94601,94602],{},"np.where(条件,x,y)",[171,94604,94605],{},"如果条件为True,对应值为x,否则对应值为y",[171,94607,94608],{},[1638,94609],{"alt":24,"src":94610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94612,94614],{"id":94613},"_1210-dot矩阵","12.10 dot()矩阵",[171,94616,94617],{},[1638,94618],{"alt":24,"src":94619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[223,94621,94622],{},"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":24,"searchDepth":43,"depth":43,"links":94624},[94625,94626,94627,94628,94629,94630,94631,94632,94633,94634],{"id":93987,"depth":43,"text":93988},{"id":94210,"depth":43,"text":94211},{"id":94426,"depth":43,"text":94427},{"id":94501,"depth":43,"text":94502},{"id":94549,"depth":43,"text":94550},{"id":94561,"depth":43,"text":94562},{"id":94576,"depth":43,"text":94577},{"id":94583,"depth":43,"text":94584},{"id":94598,"depth":43,"text":94599},{"id":94613,"depth":43,"text":94614},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93979,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94641,"title":94642,"body":94643,"description":230,"extension":231,"meta":94996,"navigation":233,"path":94997,"seo":94998,"stem":94999,"__hash__":95000},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94644,"toc":94994},[94645,94648,94651,94654,94657,94660,94725,94727,94991],[10,94646,94642],{"id":94647},"_13数组排序",[171,94649,94650],{},"排序主要用到的方法是np.sort和np.argsort",[171,94652,94653],{},"其中np.sort()对数组直接排序",[171,94655,94656],{},"而np.argsort()是返回排序后的原始索引",[171,94658,94659],{},"①一维数组",[19,94661,94663],{"className":30507,"code":94662,"language":30509,"meta":24,"style":24},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[26,94664,94665,94669,94709,94717],{"__ignoreMap":24},[29,94666,94667],{"class":31,"line":32},[29,94668,93234],{"class":367},[29,94670,94671,94673,94675,94677,94679,94681,94683,94685,94687,94689,94691,94693,94695,94697,94699,94701,94703,94705,94707],{"class":31,"line":43},[29,94672,546],{"class":309},[29,94674,355],{"class":305},[29,94676,93153],{"class":309},[29,94678,380],{"class":39},[29,94680,686],{"class":309},[29,94682,806],{"class":39},[29,94684,686],{"class":309},[29,94686,703],{"class":39},[29,94688,686],{"class":309},[29,94690,1083],{"class":39},[29,94692,686],{"class":309},[29,94694,587],{"class":39},[29,94696,686],{"class":309},[29,94698,1201],{"class":39},[29,94700,686],{"class":309},[29,94702,652],{"class":39},[29,94704,686],{"class":309},[29,94706,754],{"class":39},[29,94708,4832],{"class":309},[29,94710,94711,94714],{"class":31,"line":51},[29,94712,94713],{"class":309},"np.sort(a)",[29,94715,94716],{"class":367},"#升序排序\n",[29,94718,94719,94722],{"class":31,"line":59},[29,94720,94721],{"class":309},"np.argsort(a)",[29,94723,94724],{"class":367},"#按照元素大小来索引排序\n",[171,94726,93420],{},[19,94728,94730],{"className":30507,"code":94729,"language":30509,"meta":24,"style":24},"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",[26,94731,94732,94744,94770,94775,94779,94784,94789,94794,94799,94803,94811,94815,94820,94825,94830,94835,94839,94844,94857,94861,94866,94871,94876,94881,94885,94890,94902,94906,94910,94914,94918,94922,94926,94931,94946,94951,94960,94965,94969,94973,94978,94982,94987],{"__ignoreMap":24},[29,94733,94734,94737,94739,94741],{"class":31,"line":32},[29,94735,94736],{"class":309},"np.random.seed(",[29,94738,499],{"class":39},[29,94740,737],{"class":309},[29,94742,94743],{"class":367},"#保证每次值一样\n",[29,94745,94746,94748,94750,94752,94754,94756,94758,94760,94762,94764,94766,94768],{"class":31,"line":43},[29,94747,93435],{"class":309},[29,94749,355],{"class":305},[29,94751,93243],{"class":309},[29,94753,619],{"class":39},[29,94755,686],{"class":309},[29,94757,31625],{"class":5391},[29,94759,355],{"class":305},[29,94761,310],{"class":309},[29,94763,601],{"class":39},[29,94765,686],{"class":309},[29,94767,652],{"class":39},[29,94769,30626],{"class":309},[29,94771,94772],{"class":31,"line":51},[29,94773,94774],{"class":367},"#原数组：\n",[29,94776,94777],{"class":31,"line":59},[29,94778,94057],{"class":103},[29,94780,94781],{"class":31,"line":67},[29,94782,94783],{"class":103},"array([[44, 47, 64, 67, 67,  9],\n",[29,94785,94786],{"class":31,"line":75},[29,94787,94788],{"class":103},"       [83, 21, 36, 87, 70, 88],\n",[29,94790,94791],{"class":31,"line":83},[29,94792,94793],{"class":103},"       [88, 12, 58, 65, 39, 87],\n",[29,94795,94796],{"class":31,"line":158},[29,94797,94798],{"class":103},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[29,94800,94801],{"class":31,"line":166},[29,94802,94057],{"class":103},[29,94804,94805,94808],{"class":31,"line":1505},[29,94806,94807],{"class":309},"np.sort(aa)",[29,94809,94810],{"class":367},"#每行进行了排序\n",[29,94812,94813],{"class":31,"line":1788},[29,94814,94057],{"class":103},[29,94816,94817],{"class":31,"line":1793},[29,94818,94819],{"class":103},"array([[ 9, 44, 47, 64, 67, 67],\n",[29,94821,94822],{"class":31,"line":1799},[29,94823,94824],{"class":103},"       [21, 36, 70, 83, 87, 88],\n",[29,94826,94827],{"class":31,"line":1804},[29,94828,94829],{"class":103},"       [12, 39, 58, 65, 87, 88],\n",[29,94831,94832],{"class":31,"line":1818},[29,94833,94834],{"class":103},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[29,94836,94837],{"class":31,"line":1823},[29,94838,94057],{"class":103},[29,94840,94841],{"class":31,"line":1829},[29,94842,94843],{"class":367},"#axis=0时\n",[29,94845,94846,94849,94851,94853,94855],{"class":31,"line":1850},[29,94847,94848],{"class":309},"np.sort(aa,",[29,94850,47643],{"class":5391},[29,94852,355],{"class":305},[29,94854,499],{"class":39},[29,94856,316],{"class":309},[29,94858,94859],{"class":31,"line":1855},[29,94860,94057],{"class":103},[29,94862,94863],{"class":31,"line":1869},[29,94864,94865],{"class":103},"array([[44, 12, 36, 37, 25,  9],\n",[29,94867,94868],{"class":31,"line":1874},[29,94869,94870],{"class":103},"       [46, 21, 58, 65, 39, 77],\n",[29,94872,94873],{"class":31,"line":1903},[29,94874,94875],{"class":103},"       [83, 47, 64, 67, 67, 87],\n",[29,94877,94878],{"class":31,"line":1908},[29,94879,94880],{"class":103},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[29,94882,94883],{"class":31,"line":1925},[29,94884,94057],{"class":103},[29,94886,94887],{"class":31,"line":1930},[29,94888,94889],{"class":367},"#axis=1时,为默认值\n",[29,94891,94892,94894,94896,94898,94900],{"class":31,"line":1935},[29,94893,94848],{"class":309},[29,94895,47643],{"class":5391},[29,94897,355],{"class":305},[29,94899,525],{"class":39},[29,94901,316],{"class":309},[29,94903,94904],{"class":31,"line":1940},[29,94905,94057],{"class":103},[29,94907,94908],{"class":31,"line":1954},[29,94909,94819],{"class":103},[29,94911,94912],{"class":31,"line":1959},[29,94913,94824],{"class":103},[29,94915,94916],{"class":31,"line":2752},[29,94917,94829],{"class":103},[29,94919,94920],{"class":31,"line":2766},[29,94921,94834],{"class":103},[29,94923,94924],{"class":31,"line":2774},[29,94925,94057],{"class":103},[29,94927,94928],{"class":31,"line":2779},[29,94929,94930],{"class":367},"#按最后一列排序\n",[29,94932,94933,94935,94937,94940,94942,94944],{"class":31,"line":2785},[29,94934,571],{"class":309},[29,94936,355],{"class":305},[29,94938,94939],{"class":309},"aa[:,",[29,94941,840],{"class":305},[29,94943,525],{"class":39},[29,94945,33375],{"class":309},[29,94947,94948],{"class":31,"line":2791},[29,94949,94950],{"class":367},"#获取最后一列排好序的索引\n",[29,94952,94953,94955,94957],{"class":31,"line":2796},[29,94954,74187],{"class":309},[29,94956,355],{"class":305},[29,94958,94959],{"class":309},"np.argsort(b)\n",[29,94961,94962],{"class":31,"line":8123},[29,94963,94964],{"class":309},"aa[index]\n",[29,94966,94967],{"class":31,"line":8147},[29,94968,94057],{"class":103},[29,94970,94971],{"class":31,"line":8152},[29,94972,94783],{"class":103},[29,94974,94975],{"class":31,"line":8158},[29,94976,94977],{"class":103},"       [46, 88, 81, 37, 25, 77],\n",[29,94979,94980],{"class":31,"line":8185},[29,94981,94793],{"class":103},[29,94983,94984],{"class":31,"line":8190},[29,94985,94986],{"class":103},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[29,94988,94989],{"class":31,"line":8196},[29,94990,94057],{"class":103},[223,94992,94993],{},"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":24,"searchDepth":43,"depth":43,"links":94995},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94642,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95002,"title":95003,"body":95004,"description":230,"extension":231,"meta":95034,"navigation":233,"path":95035,"seo":95036,"stem":95037,"__hash__":95038},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95005,"toc":95032},[95006,95009,95012,95015,95018,95021,95024,95027],[10,95007,95003],{"id":95008},"_14广播机制",[171,95010,95011],{},"广播的规则：",[171,95013,95014],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[171,95016,95017],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[171,95019,95020],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[171,95022,95023],{},"3.如果没有维度形状为1，则会引发异常",[171,95025,95026],{},"也就是只有维度或者个数为1才可以进行广播操作",[171,95028,95029],{},[1638,95030],{"alt":24,"src":95031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":24,"searchDepth":43,"depth":43,"links":95033},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95003,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95040,"title":95041,"body":95042,"description":230,"extension":231,"meta":95140,"navigation":233,"path":95141,"seo":95142,"stem":95143,"__hash__":95144},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95043,"toc":95138},[95044,95047,95050,95135],[10,95045,95041],{"id":95046},"_15比较掩码",[171,95048,95049],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[19,95051,95053],{"className":30507,"code":95052,"language":30509,"meta":24,"style":24},"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",[26,95054,95055,95101,95112,95126,95130],{"__ignoreMap":24},[29,95056,95057,95059,95061,95064,95066,95068,95070,95072,95074,95076,95078,95080,95082,95084,95086,95088,95090,95092,95094,95096,95098],{"class":31,"line":32},[29,95058,546],{"class":309},[29,95060,355],{"class":305},[29,95062,95063],{"class":309},"np.array([[",[29,95065,525],{"class":39},[29,95067,686],{"class":309},[29,95069,386],{"class":39},[29,95071,686],{"class":309},[29,95073,380],{"class":39},[29,95075,48159],{"class":309},[29,95077,780],{"class":39},[29,95079,686],{"class":309},[29,95081,806],{"class":39},[29,95083,686],{"class":309},[29,95085,831],{"class":39},[29,95087,48159],{"class":309},[29,95089,1033],{"class":39},[29,95091,686],{"class":309},[29,95093,1058],{"class":39},[29,95095,686],{"class":309},[29,95097,1083],{"class":39},[29,95099,95100],{"class":309},"]])\n",[29,95102,95103,95105,95107,95109],{"class":31,"line":43},[29,95104,546],{"class":309},[29,95106,1218],{"class":305},[29,95108,1008],{"class":39},[29,95110,95111],{"class":367},"#结果是一个由True,False组成的数组\n",[29,95113,95114,95117,95119,95121,95123],{"class":31,"line":51},[29,95115,95116],{"class":309},"a[a",[29,95118,1218],{"class":305},[29,95120,1008],{"class":39},[29,95122,1248],{"class":309},[29,95124,95125],{"class":367},"#小于20的元素会存到这个数组中\n",[29,95127,95128],{"class":31,"line":59},[29,95129,93693],{"class":367},[29,95131,95132],{"class":31,"line":67},[29,95133,95134],{"class":367},"#array([ 1,  2,  3, 11, 12, 13])\n",[223,95136,95137],{},"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":24,"searchDepth":43,"depth":43,"links":95139},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95041,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95146,"title":95147,"body":95148,"description":230,"extension":231,"meta":95240,"navigation":233,"path":95241,"seo":95242,"stem":95243,"__hash__":95244},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95149,"toc":95238},[95150,95153,95156,95159,95162,95165,95230,95235],[10,95151,95147],{"id":95152},"_16魔法命令time",[171,95154,95155],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[171,95157,95158],{},"%:行模式",[171,95160,95161],{},"%%:单元格模式",[171,95163,95164],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[19,95166,95168],{"className":30507,"code":95167,"language":30509,"meta":24,"style":24},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[26,95169,95170,95175,95182,95187,95196,95209,95213,95221],{"__ignoreMap":24},[29,95171,95172],{"class":31,"line":32},[29,95173,95174],{"class":367},"#程序执行时间\n",[29,95176,95177,95179],{"class":31,"line":43},[29,95178,30521],{"class":305},[29,95180,95181],{"class":309}," time \n",[29,95183,95184],{"class":31,"line":51},[29,95185,95186],{"class":367},"#获取时间\n",[29,95188,95189,95192,95194],{"class":31,"line":59},[29,95190,95191],{"class":309},"start",[29,95193,355],{"class":305},[29,95195,32547],{"class":309},[29,95197,95198,95201,95204,95206],{"class":31,"line":67},[29,95199,95200],{"class":309},"time.sleep(",[29,95202,95203],{"class":39},"0.4",[29,95205,737],{"class":309},[29,95207,95208],{"class":367},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[29,95210,95211],{"class":31,"line":75},[29,95212,95186],{"class":367},[29,95214,95215,95217,95219],{"class":31,"line":83},[29,95216,45930],{"class":309},[29,95218,355],{"class":305},[29,95220,32547],{"class":309},[29,95222,95223,95225,95227],{"class":31,"line":158},[29,95224,45930],{"class":309},[29,95226,840],{"class":305},[29,95228,95229],{"class":309},"start\n",[171,95231,95232],{},[1638,95233],{"alt":24,"src":95234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[223,95236,95237],{},"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":24,"searchDepth":43,"depth":43,"links":95239},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95147,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95246,"title":95247,"body":95248,"description":230,"extension":231,"meta":95283,"navigation":233,"path":95284,"seo":95285,"stem":95286,"__hash__":95287},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95249,"toc":95281},[95250,95253,95256,95259,95262,95265,95268,95271,95276],[10,95251,95247],{"id":95252},"_17魔法命令timeit",[171,95254,95255],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[171,95257,95258],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[171,95260,95261],{},"单元格模式：",[171,95263,95264],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[171,95266,95267],{},"初始化语句执行次数由轮数来决定",[171,95269,95270],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[171,95272,95273],{},[1638,95274],{"alt":24,"src":95275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[171,95277,95278],{},[1638,95279],{"alt":24,"src":95280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":24,"searchDepth":43,"depth":43,"links":95282},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95247,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95289,"title":95290,"body":95291,"description":230,"extension":231,"meta":95309,"navigation":233,"path":95310,"seo":95311,"stem":95312,"__hash__":95313},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95292,"toc":95307},[95293,95296,95299,95302],[10,95294,95290],{"id":95295},"_18魔法命令writefile和run",[171,95297,95298],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[171,95300,95301],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[171,95303,95304],{},[1638,95305],{"alt":24,"src":95306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":24,"searchDepth":43,"depth":43,"links":95308},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95290,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95315,"title":95316,"body":95317,"description":230,"extension":231,"meta":95370,"navigation":233,"path":95371,"seo":95372,"stem":95373,"__hash__":95374},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95318,"toc":95368},[95319,95322,95325,95327,95330,95333,95338,95341,95344,95347,95350,95353,95356,95359,95362,95365],[10,95320,95316],{"id":95321},"_19魔法命令memit",[171,95323,95324],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[171,95326,24772],{},[171,95328,95329],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[171,95331,95332],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[171,95334,95335],{},[1638,95336],{"alt":24,"src":95337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[171,95339,95340],{},"补充：",[171,95342,95343],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[171,95345,95346],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[171,95348,95349],{},"解决方法：",[171,95351,95352],{},"1.cmd",[171,95354,95355],{},"2.依次输入以下代码：",[171,95357,95358],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[171,95360,95361],{},"pip install --upgrade ipython",[171,95363,95364],{},"#升级 memory_profiler 和 setuptools",[171,95366,95367],{},"pip install --upgrade memory_profiler setuptools",{"title":24,"searchDepth":43,"depth":43,"links":95369},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95316,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95376,"title":95377,"body":95378,"description":230,"extension":231,"meta":97024,"navigation":233,"path":97025,"seo":97026,"stem":97027,"__hash__":97028},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95379,"toc":96994},[95380,95383,95387,95391,95452,95455,95460,95464,95469,95474,95479,95484,95487,95492,95496,95500,95533,95536,95539,95542,95594,95597,95633,95636,95678,95682,95703,95705,95742,95744,95749,95751,95756,95760,95763,95791,95795,95799,95852,95856,95948,95952,95956,95959,95964,95968,95993,95998,96002,96005,96008,96011,96014,96017,96020,96023,96035,96039,96043,96046,96078,96081,96104,96107,96133,96136,96162,96165,96199,96202,96264,96268,96271,96275,96278,96304,96307,96310,96315,96318,96387,96389,96394,96455,96458,96469,96475,96480,96484,96487,96500,96504,96519,96521,96544,96546,96572,96575,96578,96581,96629,96631,96636,96640,96644,96671,96675,96702,96705,96710,96715,96805,96809,96867,96872,96875,96878,96920,96924,96980,96985,96988,96991],[10,95381,95377],{"id":95382},"_2创建数组",[14,95384,95386],{"id":95385},"_21-array函数创建数组","2.1 array()函数创建数组",[275,95388,95390],{"id":95389},"_221-函数语句","2.2.1 函数语句",[19,95392,95394],{"className":30507,"code":95393,"language":30509,"meta":24,"style":24},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[26,95395,95396],{"__ignoreMap":24},[29,95397,95398,95401,95404,95406,95408,95410,95412,95414,95417,95419,95422,95424,95427,95429,95431,95433,95436,95438,95441,95443,95446,95448,95450],{"class":31,"line":32},[29,95399,95400],{"class":309},"numpy.array(",[29,95402,95403],{"class":39},"object",[29,95405,12610],{"class":309},[29,95407,93629],{"class":5391},[29,95409,13739],{"class":305},[29,95411,39062],{"class":39},[29,95413,12610],{"class":309},[29,95415,95416],{"class":5391},"copy",[29,95418,13739],{"class":305},[29,95420,95421],{"class":39}," True",[29,95423,12610],{"class":309},[29,95425,95426],{"class":5391},"order",[29,95428,13739],{"class":305},[29,95430,39062],{"class":39},[29,95432,12610],{"class":309},[29,95434,95435],{"class":5391},"subok",[29,95437,13739],{"class":305},[29,95439,95440],{"class":39}," False",[29,95442,12610],{"class":309},[29,95444,95445],{"class":5391},"ndmin",[29,95447,13739],{"class":305},[29,95449,4268],{"class":39},[29,95451,316],{"class":309},[171,95453,95454],{},"参数：",[171,95456,95457],{},[1638,95458],{"alt":24,"src":95459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[275,95461,95463],{"id":95462},"_222-实例","2.2.2 实例",[171,95465,95466],{},[1638,95467],{"alt":24,"src":95468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[171,95470,95471],{},[1638,95472],{"alt":24,"src":95473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[171,95475,95476],{},[1638,95477],{"alt":24,"src":95478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[171,95480,95481],{},[1638,95482],{"alt":24,"src":95483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[171,95485,95486],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[171,95488,95489],{},[1638,95490],{"alt":24,"src":95491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95493,95495],{"id":95494},"_22-随机数创建数组","2.2 随机数创建数组",[275,95497,95499],{"id":95498},"_221-random语句","2.2.1 random语句",[19,95501,95503],{"className":30507,"code":95502,"language":30509,"meta":24,"style":24},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[26,95504,95505,95510,95515,95523,95528],{"__ignoreMap":24},[29,95506,95507],{"class":31,"line":32},[29,95508,95509],{"class":367},"#random.random()\n",[29,95511,95512],{"class":31,"line":43},[29,95513,95514],{"class":367},"#确定随机种子,就是每次运行结果是相同的\n",[29,95516,95517,95519,95521],{"class":31,"line":51},[29,95518,94736],{"class":309},[29,95520,499],{"class":39},[29,95522,316],{"class":309},[29,95524,95525],{"class":31,"line":59},[29,95526,95527],{"class":309},"np.random.random()\n",[29,95529,95530],{"class":31,"line":67},[29,95531,95532],{"class":367},"#生成一个随机的数目\n",[171,95534,95535],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[171,95537,95538],{},"可以指定数组形状 size",[171,95540,95541],{},"①生成一维数组",[19,95543,95545],{"className":30507,"code":95544,"language":30509,"meta":24,"style":24},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[26,95546,95547,95552,95565,95570,95586],{"__ignoreMap":24},[29,95548,95549],{"class":31,"line":32},[29,95550,95551],{"class":367},"#random.random(size())\n",[29,95553,95554,95557,95559,95561,95563],{"class":31,"line":43},[29,95555,95556],{"class":309},"np.random.random(",[29,95558,31625],{"class":5391},[29,95560,355],{"class":305},[29,95562,627],{"class":39},[29,95564,316],{"class":309},[29,95566,95567],{"class":31,"line":51},[29,95568,95569],{"class":367},"#生成一位的五个元素\n",[29,95571,95572,95574,95576,95578,95580,95582,95584],{"class":31,"line":59},[29,95573,546],{"class":309},[29,95575,355],{"class":305},[29,95577,95556],{"class":309},[29,95579,31625],{"class":5391},[29,95581,355],{"class":305},[29,95583,601],{"class":39},[29,95585,316],{"class":309},[29,95587,95588,95591],{"class":31,"line":67},[29,95589,95590],{"class":309},"a.shape ",[29,95592,95593],{"class":367},"#输出数组形状\n",[171,95595,95596],{},"②生成二维数组",[19,95598,95600],{"className":30507,"code":95599,"language":30509,"meta":24,"style":24},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[26,95601,95602,95606,95628],{"__ignoreMap":24},[29,95603,95604],{"class":31,"line":32},[29,95605,93430],{"class":367},[29,95607,95608,95610,95612,95614,95616,95618,95620,95622,95624,95626],{"class":31,"line":43},[29,95609,93435],{"class":309},[29,95611,355],{"class":305},[29,95613,95556],{"class":309},[29,95615,31625],{"class":5391},[29,95617,355],{"class":305},[29,95619,310],{"class":309},[29,95621,601],{"class":39},[29,95623,686],{"class":309},[29,95625,627],{"class":39},[29,95627,30626],{"class":309},[29,95629,95630],{"class":31,"line":51},[29,95631,95632],{"class":367},"#生成四行五列的数组\n",[171,95634,95635],{},"③生成三维数组",[19,95637,95639],{"className":30507,"code":95638,"language":30509,"meta":24,"style":24},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[26,95640,95641,95646,95673],{"__ignoreMap":24},[29,95642,95643],{"class":31,"line":32},[29,95644,95645],{"class":367},"#三维数组\n",[29,95647,95648,95651,95653,95655,95657,95659,95661,95663,95665,95667,95669,95671],{"class":31,"line":43},[29,95649,95650],{"class":309},"aaa",[29,95652,355],{"class":305},[29,95654,95556],{"class":309},[29,95656,31625],{"class":5391},[29,95658,355],{"class":305},[29,95660,310],{"class":309},[29,95662,386],{"class":39},[29,95664,686],{"class":309},[29,95666,380],{"class":39},[29,95668,686],{"class":309},[29,95670,601],{"class":39},[29,95672,30626],{"class":309},[29,95674,95675],{"class":31,"line":51},[29,95676,95677],{"class":309},"aaa.shape\n",[275,95679,95681],{"id":95680},"_222-randint语句","2.2.2 randint语句",[19,95683,95685],{"className":30507,"code":95684,"language":30509,"meta":24,"style":24},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[26,95686,95687,95692],{"__ignoreMap":24},[29,95688,95689],{"class":31,"line":32},[29,95690,95691],{"class":367},"#生成随机的整数 random.randint(low,high,size)\n",[29,95693,95694,95696,95698,95700],{"class":31,"line":43},[29,95695,93243],{"class":309},[29,95697,627],{"class":39},[29,95699,13889],{"class":309},[29,95701,95702],{"class":367},"#0~5中的随机一个数\n",[171,95704,95541],{},[19,95706,95708],{"className":30507,"code":95707,"language":30509,"meta":24,"style":24},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[26,95709,95710,95715,95737],{"__ignoreMap":24},[29,95711,95712],{"class":31,"line":32},[29,95713,95714],{"class":367},"#一维\n",[29,95716,95717,95719,95721,95723,95725,95727,95729,95731,95733,95735],{"class":31,"line":43},[29,95718,93243],{"class":309},[29,95720,525],{"class":39},[29,95722,686],{"class":309},[29,95724,780],{"class":39},[29,95726,686],{"class":309},[29,95728,31625],{"class":5391},[29,95730,355],{"class":305},[29,95732,310],{"class":309},[29,95734,754],{"class":39},[29,95736,30626],{"class":309},[29,95738,95739],{"class":31,"line":51},[29,95740,95741],{"class":367},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[171,95743,95596],{},[171,95745,95746],{},[1638,95747],{"alt":24,"src":95748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[171,95750,95635],{},[171,95752,95753],{},[1638,95754],{"alt":24,"src":95755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[275,95757,95759],{"id":95758},"_222-rand语句","2.2.2 rand语句",[171,95761,95762],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[19,95764,95766],{"className":30507,"code":95765,"language":30509,"meta":24,"style":24},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[26,95767,95768,95781,95786],{"__ignoreMap":24},[29,95769,95770,95773,95775,95777,95779],{"class":31,"line":32},[29,95771,95772],{"class":309},"np.random.rand(",[29,95774,619],{"class":39},[29,95776,686],{"class":309},[29,95778,754],{"class":39},[29,95780,316],{"class":309},[29,95782,95783],{"class":31,"line":43},[29,95784,95785],{"class":367},"#第一个参数100：行数，表示有100个样本\n",[29,95787,95788],{"class":31,"line":51},[29,95789,95790],{"class":367},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95792,95794],{"id":95793},"_23-arange创建数组","2.3 arange()创建数组",[275,95796,95798],{"id":95797},"_231-函数语句","2.3.1 函数语句",[19,95800,95802],{"className":30507,"code":95801,"language":30509,"meta":24,"style":24},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[26,95803,95804,95818,95823,95828,95833,95838,95843,95848],{"__ignoreMap":24},[29,95805,95806,95809,95811,95813,95816],{"class":31,"line":32},[29,95807,95808],{"class":309},"numpy.arange([start,] stop[, step], ",[29,95810,93629],{"class":5391},[29,95812,355],{"class":305},[29,95814,95815],{"class":39},"None",[29,95817,316],{"class":309},[29,95819,95820],{"class":31,"line":43},[29,95821,95822],{"class":367},"#参数\n",[29,95824,95825],{"class":31,"line":51},[29,95826,95827],{"class":103},"\"\"\"\n",[29,95829,95830],{"class":31,"line":59},[29,95831,95832],{"class":103},"start:起始值，可选，默认从 0 开始。\n",[29,95834,95835],{"class":31,"line":67},[29,95836,95837],{"class":103},"stop:结束值（不包含该值）。\n",[29,95839,95840],{"class":31,"line":75},[29,95841,95842],{"class":103},"step:步长，可选，默认是 1。可以为浮点数。\n",[29,95844,95845],{"class":31,"line":83},[29,95846,95847],{"class":103},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[29,95849,95850],{"class":31,"line":158},[29,95851,95827],{"class":103},[275,95853,95855],{"id":95854},"_232-实例","2.3.2 实例",[19,95857,95859],{"className":30507,"code":95858,"language":30509,"meta":24,"style":24},"#创建一维数组\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",[26,95860,95861,95865,95889,95894,95899,95903,95926,95930,95934,95939,95944],{"__ignoreMap":24},[29,95862,95863],{"class":31,"line":32},[29,95864,93234],{"class":367},[29,95866,95867,95869,95871,95873,95875,95877,95879,95881,95883,95885,95887],{"class":31,"line":43},[29,95868,93131],{"class":309},[29,95870,525],{"class":39},[29,95872,686],{"class":309},[29,95874,1033],{"class":39},[29,95876,686],{"class":309},[29,95878,525],{"class":39},[29,95880,686],{"class":309},[29,95882,93629],{"class":5391},[29,95884,355],{"class":305},[29,95886,313],{"class":39},[29,95888,316],{"class":309},[29,95890,95891],{"class":31,"line":51},[29,95892,95893],{"class":367},"#输出结果：\n",[29,95895,95896],{"class":31,"line":59},[29,95897,95898],{"class":367},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[29,95900,95901],{"class":31,"line":67},[29,95902,94076],{"class":367},[29,95904,95905,95908,95910,95912,95914,95917,95919,95921,95923],{"class":31,"line":75},[29,95906,95907],{"class":309},"np.array([np.arange(",[29,95909,525],{"class":39},[29,95911,686],{"class":309},[29,95913,601],{"class":39},[29,95915,95916],{"class":309},"),np.arange(",[29,95918,601],{"class":39},[29,95920,686],{"class":309},[29,95922,677],{"class":39},[29,95924,95925],{"class":309},")])\n",[29,95927,95928],{"class":31,"line":83},[29,95929,93693],{"class":367},[29,95931,95932],{"class":31,"line":158},[29,95933,95827],{"class":103},[29,95935,95936],{"class":31,"line":166},[29,95937,95938],{"class":103},"array([[1, 2, 3],\n",[29,95940,95941],{"class":31,"line":1505},[29,95942,95943],{"class":103},"       [4, 5, 6]])\n",[29,95945,95946],{"class":31,"line":1788},[29,95947,95827],{"class":103},[14,95949,95951],{"id":95950},"_24-生态分布","2.4 生态分布",[275,95953,95955],{"id":95954},"_241-标准正态分布","2.4.1 标准正态分布",[171,95957,95958],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[171,95960,95961],{},[1638,95962],{"alt":24,"src":95963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[275,95965,95967],{"id":95966},"_242-常规正态分布","2.4.2 常规正态分布",[19,95969,95971],{"className":30507,"code":95970,"language":30509,"meta":24,"style":24},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[26,95972,95973,95978,95983,95988],{"__ignoreMap":24},[29,95974,95975],{"class":31,"line":32},[29,95976,95977],{"class":309},"random.normal(loc,scale,size)也可以生成正态分布\n",[29,95979,95980],{"class":31,"line":43},[29,95981,95982],{"class":367},"#loc:期望\n",[29,95984,95985],{"class":31,"line":51},[29,95986,95987],{"class":367},"#scale:方差\n",[29,95989,95990],{"class":31,"line":59},[29,95991,95992],{"class":367},"#size:用于确定是几维的数列\n",[171,95994,95995],{},[1638,95996],{"alt":24,"src":95997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,95999,96001],{"id":96000},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[171,96003,96004],{},"ndim:秩，维度个数",[171,96006,96007],{},"size:数组元素的个数",[171,96009,96010],{},"shape:数组的形状",[171,96012,96013],{},"dtype:数组元素的类型",[171,96015,96016],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[171,96018,96019],{},"他们都是属性，通过数组.属性的形式来确定",[171,96021,96022],{},"如果需要输出多个可以通过以下方式：",[19,96024,96026],{"className":30507,"code":96025,"language":30509,"meta":24,"style":24},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[26,96027,96028],{"__ignoreMap":24},[29,96029,96030,96032],{"class":31,"line":32},[29,96031,30544],{"class":39},[29,96033,96034],{"class":309},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96036,96038],{"id":96037},"_26-其他方式创建数组","2.6 其他方式创建数组",[275,96040,96042],{"id":96041},"_261-zeros创建数组","2.6.1 zeros()创建数组",[171,96044,96045],{},"①创建一维数组",[19,96047,96049],{"className":30507,"code":96048,"language":30509,"meta":24,"style":24},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[26,96050,96051,96060,96064,96069,96074],{"__ignoreMap":24},[29,96052,96053,96056,96058],{"class":31,"line":32},[29,96054,96055],{"class":309},"np.zeros(",[29,96057,754],{"class":39},[29,96059,316],{"class":309},[29,96061,96062],{"class":31,"line":43},[29,96063,95827],{"class":103},[29,96065,96066],{"class":31,"line":51},[29,96067,96068],{"class":103},"输出结果：\n",[29,96070,96071],{"class":31,"line":59},[29,96072,96073],{"class":103},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[29,96075,96076],{"class":31,"line":67},[29,96077,95827],{"class":103},[171,96079,96080],{},"上方代码等价于：",[19,96082,96084],{"className":30507,"code":96083,"language":30509,"meta":24,"style":24},"np.zeros(shape=(10))#创建10个元素的0数组\n",[26,96085,96086],{"__ignoreMap":24},[29,96087,96088,96090,96093,96095,96097,96099,96101],{"class":31,"line":32},[29,96089,96055],{"class":309},[29,96091,96092],{"class":5391},"shape",[29,96094,355],{"class":305},[29,96096,310],{"class":309},[29,96098,754],{"class":39},[29,96100,82900],{"class":309},[29,96102,96103],{"class":367},"#创建10个元素的0数组\n",[171,96105,96106],{},"也可以指定类型",[19,96108,96110],{"className":30507,"code":96109,"language":30509,"meta":24,"style":24},"#指定类型\nnp.zeros(5,dtype=int)\n",[26,96111,96112,96117],{"__ignoreMap":24},[29,96113,96114],{"class":31,"line":32},[29,96115,96116],{"class":367},"#指定类型\n",[29,96118,96119,96121,96123,96125,96127,96129,96131],{"class":31,"line":43},[29,96120,96055],{"class":309},[29,96122,627],{"class":39},[29,96124,686],{"class":309},[29,96126,93629],{"class":5391},[29,96128,355],{"class":305},[29,96130,313],{"class":39},[29,96132,316],{"class":309},[171,96134,96135],{},"②创建二维数组",[19,96137,96139],{"className":30507,"code":96138,"language":30509,"meta":24,"style":24},"np.zeros((3,4),dtype=int)\n",[26,96140,96141],{"__ignoreMap":24},[29,96142,96143,96146,96148,96150,96152,96154,96156,96158,96160],{"class":31,"line":32},[29,96144,96145],{"class":309},"np.zeros((",[29,96147,380],{"class":39},[29,96149,686],{"class":309},[29,96151,601],{"class":39},[29,96153,42385],{"class":309},[29,96155,93629],{"class":5391},[29,96157,355],{"class":305},[29,96159,313],{"class":39},[29,96161,316],{"class":309},[171,96163,96164],{},"③创建三维数组",[19,96166,96168],{"className":30507,"code":96167,"language":30509,"meta":24,"style":24},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[26,96169,96170,96175],{"__ignoreMap":24},[29,96171,96172],{"class":31,"line":32},[29,96173,96174],{"class":367},"#创建三维数组\n",[29,96176,96177,96179,96181,96183,96185,96187,96189,96191,96193,96195,96197],{"class":31,"line":43},[29,96178,96145],{"class":309},[29,96180,380],{"class":39},[29,96182,686],{"class":309},[29,96184,601],{"class":39},[29,96186,686],{"class":309},[29,96188,627],{"class":39},[29,96190,42385],{"class":309},[29,96192,93629],{"class":5391},[29,96194,355],{"class":305},[29,96196,313],{"class":39},[29,96198,316],{"class":309},[171,96200,96201],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[19,96203,96205],{"className":30507,"code":96204,"language":30509,"meta":24,"style":24},"#使用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",[26,96206,96207,96212,96227,96232,96237,96259],{"__ignoreMap":24},[29,96208,96209],{"class":31,"line":32},[29,96210,96211],{"class":367},"#使用zeros_like将创建的一维数组变成全0的数组\n",[29,96213,96214,96216,96218,96220,96222,96224],{"class":31,"line":43},[29,96215,546],{"class":309},[29,96217,355],{"class":305},[29,96219,93131],{"class":309},[29,96221,601],{"class":39},[29,96223,737],{"class":309},[29,96225,96226],{"class":367},"#这个得到的结果：一维数组0，1，2，3\n",[29,96228,96229],{"class":31,"line":51},[29,96230,96231],{"class":309},"np.zeros_like(a)\n",[29,96233,96234],{"class":31,"line":59},[29,96235,96236],{"class":367},"#使用zeros_like将创建的二维数组变成全0的数组\n",[29,96238,96239,96241,96243,96245,96247,96249,96251,96253,96255,96257],{"class":31,"line":67},[29,96240,93435],{"class":309},[29,96242,355],{"class":305},[29,96244,95556],{"class":309},[29,96246,31625],{"class":5391},[29,96248,355],{"class":305},[29,96250,310],{"class":309},[29,96252,601],{"class":39},[29,96254,686],{"class":309},[29,96256,627],{"class":39},[29,96258,30626],{"class":309},[29,96260,96261],{"class":31,"line":75},[29,96262,96263],{"class":309},"np.zeros_like(aa)\n",[275,96265,96267],{"id":96266},"_262-ones创建数组","2.6.2 ones()创建数组",[171,96269,96270],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[275,96272,96274],{"id":96273},"_263-empty创建数组","2.6.3 empty()创建数组",[171,96276,96277],{},"①empty()用法",[19,96279,96281],{"className":30507,"code":96280,"language":30509,"meta":24,"style":24},"numpy.empty(shape,dtype=float,order='c')\n",[26,96282,96283],{"__ignoreMap":24},[29,96284,96285,96288,96290,96292,96294,96296,96298,96300,96302],{"class":31,"line":32},[29,96286,96287],{"class":309},"numpy.empty(shape,",[29,96289,93629],{"class":5391},[29,96291,355],{"class":305},[29,96293,349],{"class":39},[29,96295,686],{"class":309},[29,96297,95426],{"class":5391},[29,96299,355],{"class":305},[29,96301,76157],{"class":103},[29,96303,316],{"class":309},[171,96305,96306],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[171,96308,96309],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[171,96311,96312],{},[1638,96313],{"alt":24,"src":96314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[171,96316,96317],{},"②empty()用法",[19,96319,96321],{"className":30507,"code":96320,"language":30509,"meta":24,"style":24},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[26,96322,96323,96344,96356,96377,96382],{"__ignoreMap":24},[29,96324,96325,96327,96329,96332,96334,96336,96338,96340,96342],{"class":31,"line":32},[29,96326,1153],{"class":309},[29,96328,355],{"class":305},[29,96330,96331],{"class":309},"np.empty(",[29,96333,754],{"class":39},[29,96335,686],{"class":309},[29,96337,93629],{"class":5391},[29,96339,355],{"class":305},[29,96341,313],{"class":39},[29,96343,316],{"class":309},[29,96345,96346,96348,96350,96352,96354],{"class":31,"line":43},[29,96347,1128],{"class":309},[29,96349,355],{"class":305},[29,96351,93131],{"class":309},[29,96353,627],{"class":39},[29,96355,316],{"class":309},[29,96357,96358,96361,96363,96366,96368,96370,96373,96375],{"class":31,"line":51},[29,96359,96360],{"class":309},"np.add(",[29,96362,386],{"class":39},[29,96364,96365],{"class":309},",x,",[29,96367,93183],{"class":5391},[29,96369,355],{"class":305},[29,96371,96372],{"class":309},"y[:",[29,96374,627],{"class":39},[29,96376,4832],{"class":309},[29,96378,96379],{"class":31,"line":59},[29,96380,96381],{"class":367},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[29,96383,96384],{"class":31,"line":67},[29,96385,96386],{"class":309},"y\n",[171,96388,11689],{},[171,96390,96391],{},[1638,96392],{"alt":24,"src":96393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[19,96395,96397],{"className":30507,"code":96396,"language":30509,"meta":24,"style":24},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[26,96398,96399,96415,96435,96450],{"__ignoreMap":24},[29,96400,96401,96403,96405,96407,96409,96411,96413],{"class":31,"line":32},[29,96402,1128],{"class":309},[29,96404,355],{"class":305},[29,96406,93131],{"class":309},[29,96408,525],{"class":39},[29,96410,686],{"class":309},[29,96412,652],{"class":39},[29,96414,316],{"class":309},[29,96416,96417,96419,96421,96423,96425,96427,96429,96431,96433],{"class":31,"line":43},[29,96418,1153],{"class":309},[29,96420,355],{"class":305},[29,96422,96331],{"class":309},[29,96424,627],{"class":39},[29,96426,686],{"class":309},[29,96428,93629],{"class":5391},[29,96430,355],{"class":305},[29,96432,313],{"class":39},[29,96434,316],{"class":309},[29,96436,96437,96440,96442,96444,96446,96448],{"class":31,"line":51},[29,96438,96439],{"class":309},"np.add(x,",[29,96441,386],{"class":39},[29,96443,686],{"class":309},[29,96445,93183],{"class":5391},[29,96447,355],{"class":305},[29,96449,93578],{"class":309},[29,96451,96452],{"class":31,"line":59},[29,96453,96454],{"class":367},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[171,96456,96457],{},"③empty_like()",[171,96459,96460],{},[457,96461,96462,96463,96468],{},"创建一个",[457,96464,96465],{},[457,96466,96467],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[171,96470,96471,96474],{},[26,96472,96473],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[171,96476,96477],{},[1638,96478],{"alt":24,"src":96479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[275,96481,96483],{"id":96482},"_264-用法","2.6.4 ？？用法",[171,96485,96486],{},"当想查看一个函数的参数时，可以通过？？来实现",[19,96488,96490],{"className":30507,"code":96489,"language":30509,"meta":24,"style":24},"np.full??\n",[26,96491,96492],{"__ignoreMap":24},[29,96493,96494,96497],{"class":31,"line":32},[29,96495,96496],{"class":309},"np.full",[29,96498,96499],{"class":77532},"??\n",[275,96501,96503],{"id":96502},"_265-full创建数组","2.6.5 full()创建数组",[19,96505,96507],{"className":30507,"code":96506,"language":30509,"meta":24,"style":24},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[26,96508,96509,96514],{"__ignoreMap":24},[29,96510,96511],{"class":31,"line":32},[29,96512,96513],{"class":309},"full(shape,fill_value)\n",[29,96515,96516],{"class":31,"line":43},[29,96517,96518],{"class":309},"创建全为某个指定值的数组\n",[171,96520,94659],{},[19,96522,96524],{"className":30507,"code":96523,"language":30509,"meta":24,"style":24},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[26,96525,96526,96531],{"__ignoreMap":24},[29,96527,96528],{"class":31,"line":32},[29,96529,96530],{"class":367},"#创建一个一维数组,以20进行填充\n",[29,96532,96533,96536,96538,96540,96542],{"class":31,"line":43},[29,96534,96535],{"class":309},"np.full(",[29,96537,754],{"class":39},[29,96539,686],{"class":309},[29,96541,1008],{"class":39},[29,96543,316],{"class":309},[171,96545,93420],{},[19,96547,96549],{"className":30507,"code":96548,"language":30509,"meta":24,"style":24},"#创建二维数组\nnp.full((3,5),11)\n",[26,96550,96551,96555],{"__ignoreMap":24},[29,96552,96553],{"class":31,"line":32},[29,96554,94076],{"class":367},[29,96556,96557,96560,96562,96564,96566,96568,96570],{"class":31,"line":43},[29,96558,96559],{"class":309},"np.full((",[29,96561,380],{"class":39},[29,96563,686],{"class":309},[29,96565,627],{"class":39},[29,96567,42385],{"class":309},[29,96569,780],{"class":39},[29,96571,316],{"class":309},[171,96573,96574],{},"③full_like用法",[171,96576,96577],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[171,96579,96580],{},"这里是指定填充而已",[19,96582,96584],{"className":30507,"code":96583,"language":30509,"meta":24,"style":24},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[26,96585,96586,96591,96615,96620],{"__ignoreMap":24},[29,96587,96588],{"class":31,"line":32},[29,96589,96590],{"class":367},"#创建一个指定形状数组\n",[29,96592,96593,96595,96597,96599,96601,96603,96605,96607,96609,96611,96613],{"class":31,"line":43},[29,96594,546],{"class":309},[29,96596,355],{"class":305},[29,96598,93131],{"class":309},[29,96600,525],{"class":39},[29,96602,686],{"class":309},[29,96604,633],{"class":39},[29,96606,93136],{"class":309},[29,96608,601],{"class":39},[29,96610,686],{"class":309},[29,96612,728],{"class":39},[29,96614,316],{"class":309},[29,96616,96617],{"class":31,"line":51},[29,96618,96619],{"class":367},"#进行指定填充\n",[29,96621,96622,96625,96627],{"class":31,"line":59},[29,96623,96624],{"class":309},"np.full_like(a,",[29,96626,754],{"class":39},[29,96628,316],{"class":309},[171,96630,11689],{},[171,96632,96633],{},[1638,96634],{"alt":24,"src":96635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[275,96637,96639],{"id":96638},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22173,96641,96643],{"id":96642},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[19,96645,96647],{"className":30507,"code":96646,"language":30509,"meta":24,"style":24},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[26,96648,96649,96666],{"__ignoreMap":24},[29,96650,96651,96654,96656,96658,96660,96662,96664],{"class":31,"line":32},[29,96652,96653],{"class":309},"np.eye(",[29,96655,601],{"class":39},[29,96657,686],{"class":309},[29,96659,93629],{"class":5391},[29,96661,355],{"class":305},[29,96663,313],{"class":39},[29,96665,316],{"class":309},[29,96667,96668],{"class":31,"line":43},[29,96669,96670],{"class":367},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22173,96672,96674],{"id":96673},"_2662-法2identity","2.6.6.2 法2：identity()",[19,96676,96678],{"className":30507,"code":96677,"language":30509,"meta":24,"style":24},"#identity()\nnp.identity(5,dtype=int)\n",[26,96679,96680,96685],{"__ignoreMap":24},[29,96681,96682],{"class":31,"line":32},[29,96683,96684],{"class":367},"#identity()\n",[29,96686,96687,96690,96692,96694,96696,96698,96700],{"class":31,"line":43},[29,96688,96689],{"class":309},"np.identity(",[29,96691,627],{"class":39},[29,96693,686],{"class":309},[29,96695,93629],{"class":5391},[29,96697,355],{"class":305},[29,96699,313],{"class":39},[29,96701,316],{"class":309},[171,96703,96704],{},"两个函数是有区别的",[171,96706,96707],{},[1638,96708],{"alt":24,"src":96709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[171,96711,96712],{},[1638,96713],{"alt":24,"src":96714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[19,96716,96718],{"className":30507,"code":96717,"language":30509,"meta":24,"style":24},"# 创建一个 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",[26,96719,96720,96725,96737,96742,96747,96752,96757,96761,96766,96786,96790,96795,96800],{"__ignoreMap":24},[29,96721,96722],{"class":31,"line":32},[29,96723,96724],{"class":367},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[29,96726,96727,96729,96731,96733,96735],{"class":31,"line":43},[29,96728,96653],{"class":309},[29,96730,380],{"class":39},[29,96732,12610],{"class":309},[29,96734,601],{"class":39},[29,96736,316],{"class":309},[29,96738,96739],{"class":31,"line":51},[29,96740,96741],{"class":367},"# 输出:\n",[29,96743,96744],{"class":31,"line":59},[29,96745,96746],{"class":367},"# [[1. 0. 0. 0.]\n",[29,96748,96749],{"class":31,"line":67},[29,96750,96751],{"class":367},"#  [0. 1. 0. 0.]\n",[29,96753,96754],{"class":31,"line":75},[29,96755,96756],{"class":367},"#  [0. 0. 1. 0.]]\n",[29,96758,96759],{"class":31,"line":83},[29,96760,2575],{"emptyLinePlaceholder":233},[29,96762,96763],{"class":31,"line":158},[29,96764,96765],{"class":367},"# 对角线向上偏移1\n",[29,96767,96768,96770,96772,96774,96776,96778,96780,96782,96784],{"class":31,"line":166},[29,96769,96653],{"class":309},[29,96771,380],{"class":39},[29,96773,12610],{"class":309},[29,96775,601],{"class":39},[29,96777,12610],{"class":309},[29,96779,801],{"class":5391},[29,96781,355],{"class":305},[29,96783,525],{"class":39},[29,96785,316],{"class":309},[29,96787,96788],{"class":31,"line":1505},[29,96789,96741],{"class":367},[29,96791,96792],{"class":31,"line":1788},[29,96793,96794],{"class":367},"# [[0. 1. 0. 0.]\n",[29,96796,96797],{"class":31,"line":1793},[29,96798,96799],{"class":367},"#  [0. 0. 1. 0.]\n",[29,96801,96802],{"class":31,"line":1799},[29,96803,96804],{"class":367},"#  [0. 0. 0. 1.]]\n",[275,96806,96808],{"id":96807},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[19,96810,96812],{"className":30507,"code":96811,"language":30509,"meta":24,"style":24},"#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",[26,96813,96814,96819,96823,96828,96833,96838,96843,96848,96853,96858,96863],{"__ignoreMap":24},[29,96815,96816],{"class":31,"line":32},[29,96817,96818],{"class":367},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[29,96820,96821],{"class":31,"line":43},[29,96822,95827],{"class":103},[29,96824,96825],{"class":31,"line":51},[29,96826,96827],{"class":103},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[29,96829,96830],{"class":31,"line":59},[29,96831,96832],{"class":103},"参数介绍：\n",[29,96834,96835],{"class":31,"line":67},[29,96836,96837],{"class":103},"start：序列的起始值\n",[29,96839,96840],{"class":31,"line":75},[29,96841,96842],{"class":103},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[29,96844,96845],{"class":31,"line":83},[29,96846,96847],{"class":103},"num：要生长的等步长的样本数量，默认为50\n",[29,96849,96850],{"class":31,"line":158},[29,96851,96852],{"class":103},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[29,96854,96855],{"class":31,"line":166},[29,96856,96857],{"class":103},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[29,96859,96860],{"class":31,"line":1505},[29,96861,96862],{"class":103},"dtype：ndarry的数据类型\n",[29,96864,96865],{"class":31,"line":1788},[29,96866,95827],{"class":103},[171,96868,96869],{},[1638,96870],{"alt":24,"src":96871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[171,96873,96874],{},"这里num=是可以省略的",[171,96876,96877],{},"也就是下方两行代码结果是一模一样的",[19,96879,96881],{"className":30507,"code":96880,"language":30509,"meta":24,"style":24},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[26,96882,96883,96900],{"__ignoreMap":24},[29,96884,96885,96888,96890,96892,96894,96896,96898],{"class":31,"line":32},[29,96886,96887],{"class":309},"np.linspace(",[29,96889,525],{"class":39},[29,96891,686],{"class":309},[29,96893,627],{"class":39},[29,96895,686],{"class":309},[29,96897,627],{"class":39},[29,96899,316],{"class":309},[29,96901,96902,96904,96906,96908,96910,96912,96914,96916,96918],{"class":31,"line":43},[29,96903,96887],{"class":309},[29,96905,525],{"class":39},[29,96907,686],{"class":309},[29,96909,627],{"class":39},[29,96911,686],{"class":309},[29,96913,1841],{"class":5391},[29,96915,355],{"class":305},[29,96917,627],{"class":39},[29,96919,316],{"class":309},[275,96921,96923],{"id":96922},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[19,96925,96927],{"className":30507,"code":96926,"language":30509,"meta":24,"style":24},"#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",[26,96928,96929,96934,96938,96943,96948,96953,96958,96962,96967,96972,96976],{"__ignoreMap":24},[29,96930,96931],{"class":31,"line":32},[29,96932,96933],{"class":367},"#logspace函数用于创建一个等比数列，格式如下：\n",[29,96935,96936],{"class":31,"line":43},[29,96937,95827],{"class":103},[29,96939,96940],{"class":31,"line":51},[29,96941,96942],{"class":103},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[29,96944,96945],{"class":31,"line":59},[29,96946,96947],{"class":103},"参数为：\n",[29,96949,96950],{"class":31,"line":67},[29,96951,96952],{"class":103},"start:序列的起始位置为：base**start\n",[29,96954,96955],{"class":31,"line":75},[29,96956,96957],{"class":103},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[29,96959,96960],{"class":31,"line":83},[29,96961,96847],{"class":103},[29,96963,96964],{"class":31,"line":158},[29,96965,96966],{"class":103},"endpoint：是否包含 stop 这个值，默认是 True\n",[29,96968,96969],{"class":31,"line":166},[29,96970,96971],{"class":103},"base：对数的底数，默认是 10（常见对数）\n",[29,96973,96974],{"class":31,"line":1505},[29,96975,96862],{"class":103},[29,96977,96978],{"class":31,"line":1788},[29,96979,95827],{"class":103},[171,96981,96982],{},[1638,96983],{"alt":24,"src":96984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[171,96986,96987],{},"logspace()函数中的num参数也是可以不写num=的",[171,96989,96990],{},"endpoint是不可以省略的",[223,96992,96993],{},"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":24,"searchDepth":43,"depth":43,"links":96995},[96996,97000,97005,97009,97013,97014],{"id":95385,"depth":43,"text":95386,"children":96997},[96998,96999],{"id":95389,"depth":51,"text":95390},{"id":95462,"depth":51,"text":95463},{"id":95494,"depth":43,"text":95495,"children":97001},[97002,97003,97004],{"id":95498,"depth":51,"text":95499},{"id":95680,"depth":51,"text":95681},{"id":95758,"depth":51,"text":95759},{"id":95793,"depth":43,"text":95794,"children":97006},[97007,97008],{"id":95797,"depth":51,"text":95798},{"id":95854,"depth":51,"text":95855},{"id":95950,"depth":43,"text":95951,"children":97010},[97011,97012],{"id":95954,"depth":51,"text":95955},{"id":95966,"depth":51,"text":95967},{"id":96000,"depth":43,"text":96001},{"id":96037,"depth":43,"text":96038,"children":97015},[97016,97017,97018,97019,97020,97021,97022,97023],{"id":96041,"depth":51,"text":96042},{"id":96266,"depth":51,"text":96267},{"id":96273,"depth":51,"text":96274},{"id":96482,"depth":51,"text":96483},{"id":96502,"depth":51,"text":96503},{"id":96638,"depth":51,"text":96639},{"id":96807,"depth":51,"text":96808},{"id":96922,"depth":51,"text":96923},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95377,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97030,"title":97031,"body":97032,"description":230,"extension":231,"meta":97125,"navigation":233,"path":97126,"seo":97127,"stem":97128,"__hash__":97129},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97033,"toc":97123},[97034,97037,97040,97043,97046,97049,97052,97055,97058,97061,97064,97067,97069,97072,97075,97080,97083,97086,97120],[10,97035,97031],{"id":97036},"_20魔法命令mprun",[171,97038,97039],{},"逐行分析数据内存的使用情况",[171,97041,97042],{},"语法格式：",[171,97044,97045],{},"%mprun -f 模块名.函数名 模块名.函数名()",[171,97047,97048],{},"分析结果列如下：",[171,97050,97051],{},"Line行号",[171,97053,97054],{},"Mem usage内存使用大小",[171,97056,97057],{},"increment内存增量",[171,97059,97060],{},"Line content代码内容",[171,97062,97063],{},"补充说明：",[171,97065,97066],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[171,97068,95332],{},[171,97070,97071],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[171,97073,97074],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[171,97076,97077],{},[1638,97078],{"alt":24,"src":97079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[171,97081,97082],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[171,97084,97085],{},"这时候需要重新加载模块",[19,97087,97089],{"className":30507,"code":97088,"language":30509,"meta":24,"style":24},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[26,97090,97091,97096,97103,97108],{"__ignoreMap":24},[29,97092,97093],{"class":31,"line":32},[29,97094,97095],{"class":367},"#重新加载模块\n",[29,97097,97098,97100],{"class":31,"line":43},[29,97099,30521],{"class":305},[29,97101,97102],{"class":309}," importlib\n",[29,97104,97105],{"class":31,"line":51},[29,97106,97107],{"class":309},"importlib.reload(mprun_test)\n",[29,97109,97110,97112,97115,97117],{"class":31,"line":59},[29,97111,636],{"class":305},[29,97113,97114],{"class":309},"mprun ",[29,97116,840],{"class":305},[29,97118,97119],{"class":309},"f mprun_test.fun_test mprun_test.fun_test()\n",[223,97121,97122],{},"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":24,"searchDepth":43,"depth":43,"links":97124},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97031,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97131,"title":97132,"body":97133,"description":230,"extension":231,"meta":97150,"navigation":233,"path":97151,"seo":97152,"stem":97153,"__hash__":97154},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97134,"toc":97148},[97135,97138,97143],[10,97136,97132],{"id":97137},"_3一维数组的索引和切片",[171,97139,97140],{},[1638,97141],{"alt":24,"src":97142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[171,97144,97145],{},[1638,97146],{"alt":24,"src":97147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":24,"searchDepth":43,"depth":43,"links":97149},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97132,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97156,"title":97157,"body":97158,"description":230,"extension":231,"meta":97641,"navigation":233,"path":97642,"seo":97643,"stem":97644,"__hash__":97645},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97159,"toc":97639},[97160,97163,97166,97171,97204,97207,97245,97248,97282,97285,97390,97393,97430,97433,97534,97537,97588,97591,97633,97636],[10,97161,97157],{"id":97162},"_4二维数组的索引与切片",[171,97164,97165],{},"①获取指定单个元素",[171,97167,97168],{},[1638,97169],{"alt":24,"src":97170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[19,97172,97174],{"className":30507,"code":97173,"language":30509,"meta":24,"style":24},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[26,97175,97176,97181,97186,97191],{"__ignoreMap":24},[29,97177,97178],{"class":31,"line":32},[29,97179,97180],{"class":367},"#获取元素9\n",[29,97182,97183],{"class":31,"line":43},[29,97184,97185],{"class":367},"#先获取所在行，再获取所在列\n",[29,97187,97188],{"class":31,"line":51},[29,97189,97190],{"class":367},"#数组[行索引号，列索引号]\n",[29,97192,97193,97196,97198,97200,97202],{"class":31,"line":59},[29,97194,97195],{"class":309},"a[",[29,97197,525],{"class":39},[29,97199,686],{"class":309},[29,97201,386],{"class":39},[29,97203,33375],{"class":309},[171,97205,97206],{},"②获取整行元素",[19,97208,97210],{"className":30507,"code":97209,"language":30509,"meta":24,"style":24},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[26,97211,97212,97217,97222,97230,97235],{"__ignoreMap":24},[29,97213,97214],{"class":31,"line":32},[29,97215,97216],{"class":367},"#获取整行 数组[行索引号]\n",[29,97218,97219],{"class":31,"line":43},[29,97220,97221],{"class":367},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[29,97223,97224,97226,97228],{"class":31,"line":51},[29,97225,97195],{"class":309},[29,97227,386],{"class":39},[29,97229,33375],{"class":309},[29,97231,97232],{"class":31,"line":59},[29,97233,97234],{"class":367},"#也可以负索引获取一行\n",[29,97236,97237,97239,97241,97243],{"class":31,"line":67},[29,97238,97195],{"class":309},[29,97240,840],{"class":305},[29,97242,525],{"class":39},[29,97244,33375],{"class":309},[171,97246,97247],{},"③获取整列元素",[19,97249,97251],{"className":30507,"code":97250,"language":30509,"meta":24,"style":24},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[26,97252,97253,97258,97267,97272],{"__ignoreMap":24},[29,97254,97255],{"class":31,"line":32},[29,97256,97257],{"class":367},"#获取整列 数组名[:,列索引]\n",[29,97259,97260,97263,97265],{"class":31,"line":43},[29,97261,97262],{"class":309},"a[:,",[29,97264,386],{"class":39},[29,97266,33375],{"class":309},[29,97268,97269],{"class":31,"line":51},[29,97270,97271],{"class":367},"#也可以负索引获取一列\n",[29,97273,97274,97276,97278,97280],{"class":31,"line":59},[29,97275,97262],{"class":309},[29,97277,840],{"class":305},[29,97279,525],{"class":39},[29,97281,33375],{"class":309},[171,97283,97284],{},"④部分行部分列的元素",[19,97286,97288],{"className":30507,"code":97287,"language":30509,"meta":24,"style":24},"#部分行部分列 数组名[行切片，列切片]\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",[26,97289,97290,97295,97305,97309,97313,97318,97323,97327,97339,97343,97347,97352,97357,97362,97367,97371,97376],{"__ignoreMap":24},[29,97291,97292],{"class":31,"line":32},[29,97293,97294],{"class":367},"#部分行部分列 数组名[行切片，列切片]\n",[29,97296,97297,97300,97302],{"class":31,"line":43},[29,97298,97299],{"class":309},"a[:",[29,97301,386],{"class":39},[29,97303,97304],{"class":309},",:]\n",[29,97306,97307],{"class":31,"line":51},[29,97308,93693],{"class":367},[29,97310,97311],{"class":31,"line":59},[29,97312,94057],{"class":103},[29,97314,97315],{"class":31,"line":67},[29,97316,97317],{"class":103},"array([[ 1,  2,  3,  4,  5,  6],\n",[29,97319,97320],{"class":31,"line":75},[29,97321,97322],{"class":103},"       [ 7,  8,  9, 10, 11, 12]])\n",[29,97324,97325],{"class":31,"line":83},[29,97326,94057],{"class":103},[29,97328,97329,97331,97333,97335,97337],{"class":31,"line":158},[29,97330,97262],{"class":309},[29,97332,525],{"class":39},[29,97334,1167],{"class":309},[29,97336,601],{"class":39},[29,97338,33375],{"class":309},[29,97340,97341],{"class":31,"line":166},[29,97342,93693],{"class":367},[29,97344,97345],{"class":31,"line":1505},[29,97346,94057],{"class":103},[29,97348,97349],{"class":31,"line":1788},[29,97350,97351],{"class":103},"array([[ 2,  3,  4],\n",[29,97353,97354],{"class":31,"line":1793},[29,97355,97356],{"class":103},"       [ 8,  9, 10],\n",[29,97358,97359],{"class":31,"line":1799},[29,97360,97361],{"class":103},"       [14, 15, 16],\n",[29,97363,97364],{"class":31,"line":1804},[29,97365,97366],{"class":103},"       [20, 21, 22]])\n",[29,97368,97369],{"class":31,"line":1818},[29,97370,94057],{"class":103},[29,97372,97373],{"class":31,"line":1823},[29,97374,97375],{"class":367},"#对列行同时进行切片，使用了step参数\n",[29,97377,97378,97381,97383,97386,97388],{"class":31,"line":1829},[29,97379,97380],{"class":309},"a[::",[29,97382,386],{"class":39},[29,97384,97385],{"class":309},",::",[29,97387,386],{"class":39},[29,97389,33375],{"class":309},[171,97391,97392],{},"⑤同时获取两个元素",[19,97394,97396],{"className":30507,"code":97395,"language":30509,"meta":24,"style":24},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[26,97397,97398,97403,97408],{"__ignoreMap":24},[29,97399,97400],{"class":31,"line":32},[29,97401,97402],{"class":367},"#同时获取第三行第二列，第四行第一列\n",[29,97404,97405],{"class":31,"line":43},[29,97406,97407],{"class":367},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[29,97409,97410,97413,97415,97417,97419,97421,97423,97425,97427],{"class":31,"line":51},[29,97411,97412],{"class":309},"a[(",[29,97414,386],{"class":39},[29,97416,686],{"class":309},[29,97418,380],{"class":39},[29,97420,42376],{"class":309},[29,97422,525],{"class":39},[29,97424,686],{"class":309},[29,97426,499],{"class":39},[29,97428,97429],{"class":309},")]\n",[171,97431,97432],{},"⑥切片，对行进行反向获取",[19,97434,97436],{"className":30507,"code":97435,"language":30509,"meta":24,"style":24},"#切片 对所有行进行反向获取\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",[26,97437,97438,97443,97453,97457,97461,97466,97471,97476,97481,97485,97490,97506,97510,97515,97520,97525,97530],{"__ignoreMap":24},[29,97439,97440],{"class":31,"line":32},[29,97441,97442],{"class":367},"#切片 对所有行进行反向获取\n",[29,97444,97445,97447,97449,97451],{"class":31,"line":43},[29,97446,97380],{"class":309},[29,97448,840],{"class":305},[29,97450,525],{"class":39},[29,97452,33375],{"class":309},[29,97454,97455],{"class":31,"line":51},[29,97456,93693],{"class":367},[29,97458,97459],{"class":31,"line":59},[29,97460,94057],{"class":103},[29,97462,97463],{"class":31,"line":67},[29,97464,97465],{"class":103},"array([[19, 20, 21, 22, 23, 24],\n",[29,97467,97468],{"class":31,"line":75},[29,97469,97470],{"class":103},"       [13, 14, 15, 16, 17, 18],\n",[29,97472,97473],{"class":31,"line":83},[29,97474,97475],{"class":103},"       [ 7,  8,  9, 10, 11, 12],\n",[29,97477,97478],{"class":31,"line":158},[29,97479,97480],{"class":103},"       [ 1,  2,  3,  4,  5,  6]])\n",[29,97482,97483],{"class":31,"line":166},[29,97484,94057],{"class":103},[29,97486,97487],{"class":31,"line":1505},[29,97488,97489],{"class":367},"#对行列都进行反向切片获取\n",[29,97491,97492,97494,97496,97498,97500,97502,97504],{"class":31,"line":1788},[29,97493,97380],{"class":309},[29,97495,840],{"class":305},[29,97497,525],{"class":39},[29,97499,97385],{"class":309},[29,97501,840],{"class":305},[29,97503,525],{"class":39},[29,97505,33375],{"class":309},[29,97507,97508],{"class":31,"line":1793},[29,97509,94057],{"class":103},[29,97511,97512],{"class":31,"line":1799},[29,97513,97514],{"class":103},"array([[24, 23, 22, 21, 20, 19],\n",[29,97516,97517],{"class":31,"line":1804},[29,97518,97519],{"class":103},"       [18, 17, 16, 15, 14, 13],\n",[29,97521,97522],{"class":31,"line":1818},[29,97523,97524],{"class":103},"       [12, 11, 10,  9,  8,  7],\n",[29,97526,97527],{"class":31,"line":1823},[29,97528,97529],{"class":103},"       [ 6,  5,  4,  3,  2,  1]])\n",[29,97531,97532],{"class":31,"line":1829},[29,97533,94057],{"class":103},[171,97535,97536],{},"⑦修改元素",[19,97538,97540],{"className":30507,"code":97539,"language":30509,"meta":24,"style":24},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[26,97541,97542,97547,97565,97570],{"__ignoreMap":24},[29,97543,97544],{"class":31,"line":32},[29,97545,97546],{"class":367},"#获取前两行和前两列\n",[29,97548,97549,97552,97554,97556,97558,97561,97563],{"class":31,"line":43},[29,97550,97551],{"class":309},"sub_a",[29,97553,355],{"class":305},[29,97555,97299],{"class":309},[29,97557,386],{"class":39},[29,97559,97560],{"class":309},",:",[29,97562,386],{"class":39},[29,97564,33375],{"class":309},[29,97566,97567],{"class":31,"line":51},[29,97568,97569],{"class":367},"#修改sub_a第一个元素的值\n",[29,97571,97572,97575,97577,97579,97581,97583,97585],{"class":31,"line":59},[29,97573,97574],{"class":309},"sub_a[",[29,97576,499],{"class":39},[29,97578,686],{"class":309},[29,97580,499],{"class":39},[29,97582,1248],{"class":309},[29,97584,355],{"class":305},[29,97586,97587],{"class":39},"100\n",[171,97589,97590],{},"⑧数组复制copy()",[19,97592,97594],{"className":30507,"code":97593,"language":30509,"meta":24,"style":24},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[26,97595,97596,97601,97611,97616],{"__ignoreMap":24},[29,97597,97598],{"class":31,"line":32},[29,97599,97600],{"class":367},"#数组复制\n",[29,97602,97603,97606,97608],{"class":31,"line":43},[29,97604,97605],{"class":309},"copy_a",[29,97607,355],{"class":305},[29,97609,97610],{"class":309},"np.copy(sub_a)\n",[29,97612,97613],{"class":31,"line":51},[29,97614,97615],{"class":367},"#修改copy_a后不影响原数组\n",[29,97617,97618,97621,97623,97625,97627,97629,97631],{"class":31,"line":59},[29,97619,97620],{"class":309},"copy_a[",[29,97622,499],{"class":39},[29,97624,686],{"class":309},[29,97626,499],{"class":39},[29,97628,1248],{"class":309},[29,97630,355],{"class":305},[29,97632,97587],{"class":39},[171,97634,97635],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[223,97637,97638],{},"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":24,"searchDepth":43,"depth":43,"links":97640},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97157,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97647,"title":97648,"body":97649,"description":230,"extension":231,"meta":98141,"navigation":233,"path":98142,"seo":98143,"stem":98144,"__hash__":98145},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97650,"toc":98133},[97651,97654,97658,97661,97664,97717,97720,97745,97748,97767,97787,97790,97806,97810,97856,97860,97902,97906,97909,97912,97915,97918,97921,97983,98043,98047,98050,98107,98111,98116,98125,98130],[10,97652,97648],{"id":97653},"_5改变数组的维度",[14,97655,97657],{"id":97656},"_51-使用reshape","5.1 使用reshape()",[171,97659,97660],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[171,97662,97663],{},"①一维数组转换为二维数组",[19,97665,97667],{"className":30507,"code":97666,"language":30509,"meta":24,"style":24},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[26,97668,97669,97685,97690,97695,97700],{"__ignoreMap":24},[29,97670,97671,97673,97675,97677,97679,97681,97683],{"class":31,"line":32},[29,97672,546],{"class":309},[29,97674,355],{"class":305},[29,97676,93131],{"class":309},[29,97678,525],{"class":39},[29,97680,686],{"class":309},[29,97682,831],{"class":39},[29,97684,316],{"class":309},[29,97686,97687],{"class":31,"line":43},[29,97688,97689],{"class":367},"#将一维数组进行转换\n",[29,97691,97692],{"class":31,"line":51},[29,97693,97694],{"class":367},"#注意点：元素个数不可以变\n",[29,97696,97697],{"class":31,"line":59},[29,97698,97699],{"class":367},"#转换维度要保持一致，不一致就异常！！！\n",[29,97701,97702,97704,97706,97709,97711,97713,97715],{"class":31,"line":67},[29,97703,93435],{"class":309},[29,97705,355],{"class":305},[29,97707,97708],{"class":309},"a.reshape(",[29,97710,386],{"class":39},[29,97712,686],{"class":309},[29,97714,652],{"class":39},[29,97716,316],{"class":309},[171,97718,97719],{},"②一维数组转换为三维数组",[19,97721,97723],{"className":30507,"code":97722,"language":30509,"meta":24,"style":24},"aaa=a.reshape(2,3,2)\n",[26,97724,97725],{"__ignoreMap":24},[29,97726,97727,97729,97731,97733,97735,97737,97739,97741,97743],{"class":31,"line":32},[29,97728,95650],{"class":309},[29,97730,355],{"class":305},[29,97732,97708],{"class":309},[29,97734,386],{"class":39},[29,97736,686],{"class":309},[29,97738,380],{"class":39},[29,97740,686],{"class":309},[29,97742,386],{"class":39},[29,97744,316],{"class":309},[171,97746,97747],{},"③二维数组转化为一维数组",[19,97749,97751],{"className":30507,"code":97750,"language":30509,"meta":24,"style":24},"#知道元素个数：\naa.reshape(12)\n",[26,97752,97753,97758],{"__ignoreMap":24},[29,97754,97755],{"class":31,"line":32},[29,97756,97757],{"class":367},"#知道元素个数：\n",[29,97759,97760,97763,97765],{"class":31,"line":43},[29,97761,97762],{"class":309},"aa.reshape(",[29,97764,806],{"class":39},[29,97766,316],{"class":309},[19,97768,97770],{"className":30507,"code":97769,"language":30509,"meta":24,"style":24},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[26,97771,97772,97777],{"__ignoreMap":24},[29,97773,97774],{"class":31,"line":32},[29,97775,97776],{"class":367},"#不知道元素个数，参数传递-1\n",[29,97778,97779,97781,97783,97785],{"class":31,"line":43},[29,97780,97762],{"class":309},[29,97782,840],{"class":305},[29,97784,525],{"class":39},[29,97786,316],{"class":309},[171,97788,97789],{},"④三维数组转换为一维数组",[19,97791,97793],{"className":30507,"code":97792,"language":30509,"meta":24,"style":24},"aaa.reshape(-1)\n",[26,97794,97795],{"__ignoreMap":24},[29,97796,97797,97800,97802,97804],{"class":31,"line":32},[29,97798,97799],{"class":309},"aaa.reshape(",[29,97801,840],{"class":305},[29,97803,525],{"class":39},[29,97805,316],{"class":309},[14,97807,97809],{"id":97808},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[19,97811,97813],{"className":30507,"code":97812,"language":30509,"meta":24,"style":24},"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",[26,97814,97815,97842,97847,97851],{"__ignoreMap":24},[29,97816,97817,97819,97821,97823,97825,97827,97829,97831,97833,97835,97837,97839],{"class":31,"line":32},[29,97818,93435],{"class":309},[29,97820,355],{"class":305},[29,97822,93131],{"class":309},[29,97824,525],{"class":39},[29,97826,686],{"class":309},[29,97828,831],{"class":39},[29,97830,93136],{"class":309},[29,97832,386],{"class":39},[29,97834,686],{"class":309},[29,97836,652],{"class":39},[29,97838,737],{"class":309},[29,97840,97841],{"class":367},"#转换为2行6列的数组\n",[29,97843,97844],{"class":31,"line":43},[29,97845,97846],{"class":309},"aa.revel()\n",[29,97848,97849],{"class":31,"line":51},[29,97850,93693],{"class":367},[29,97852,97853],{"class":31,"line":59},[29,97854,97855],{"class":367},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97857,97859],{"id":97858},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[19,97861,97863],{"className":30507,"code":97862,"language":30509,"meta":24,"style":24},"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",[26,97864,97865,97889,97894,97898],{"__ignoreMap":24},[29,97866,97867,97869,97871,97873,97875,97877,97879,97881,97883,97885,97887],{"class":31,"line":32},[29,97868,93435],{"class":309},[29,97870,355],{"class":305},[29,97872,93131],{"class":309},[29,97874,525],{"class":39},[29,97876,686],{"class":309},[29,97878,831],{"class":39},[29,97880,93136],{"class":309},[29,97882,386],{"class":39},[29,97884,686],{"class":309},[29,97886,652],{"class":39},[29,97888,316],{"class":309},[29,97890,97891],{"class":31,"line":43},[29,97892,97893],{"class":309},"aa.flatten()\n",[29,97895,97896],{"class":31,"line":51},[29,97897,93693],{"class":367},[29,97899,97900],{"class":31,"line":59},[29,97901,97855],{"class":367},[14,97903,97905],{"id":97904},"_54-使用resize","5.4 使用resize()",[171,97907,97908],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[171,97910,97911],{},"通过resize方法可以改变数组的维度",[171,97913,97914],{},"#resize修改数组维度",[171,97916,97917],{},"#以元组的形式指定形状",[171,97919,97920],{},"#改变的是原数组",[19,97922,97924],{"className":30507,"code":97923,"language":30509,"meta":24,"style":24},"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",[26,97925,97926,97942,97962,97975,97979],{"__ignoreMap":24},[29,97927,97928,97930,97932,97934,97936,97938,97940],{"class":31,"line":32},[29,97929,546],{"class":309},[29,97931,355],{"class":305},[29,97933,93131],{"class":309},[29,97935,525],{"class":39},[29,97937,686],{"class":309},[29,97939,831],{"class":39},[29,97941,316],{"class":309},[29,97943,97944,97947,97949,97951,97953,97955,97957,97959],{"class":31,"line":43},[29,97945,97946],{"class":309},"a.shape",[29,97948,355],{"class":305},[29,97950,310],{"class":309},[29,97952,386],{"class":39},[29,97954,686],{"class":309},[29,97956,652],{"class":39},[29,97958,737],{"class":309},[29,97960,97961],{"class":367},"#改变了原数组\n",[29,97963,97964,97966,97968,97971,97973],{"class":31,"line":51},[29,97965,546],{"class":309},[29,97967,355],{"class":305},[29,97969,97970],{"class":309},"resize((",[29,97972,806],{"class":39},[29,97974,30626],{"class":309},[29,97976,97977],{"class":31,"line":59},[29,97978,93693],{"class":367},[29,97980,97981],{"class":31,"line":67},[29,97982,97855],{"class":367},[19,97984,97986],{"className":30507,"code":97985,"language":30509,"meta":24,"style":24},"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",[26,97987,97988,98001,98005,98009,98014,98019,98024,98029,98034,98039],{"__ignoreMap":24},[29,97989,97990,97993,97995,97997,97999],{"class":31,"line":32},[29,97991,97992],{"class":309},"a.resize((",[29,97994,652],{"class":39},[29,97996,686],{"class":309},[29,97998,386],{"class":39},[29,98000,30626],{"class":309},[29,98002,98003],{"class":31,"line":43},[29,98004,93693],{"class":367},[29,98006,98007],{"class":31,"line":51},[29,98008,94057],{"class":103},[29,98010,98011],{"class":31,"line":59},[29,98012,98013],{"class":103},"array([[ 1,  2],\n",[29,98015,98016],{"class":31,"line":67},[29,98017,98018],{"class":103},"       [ 3,  4],\n",[29,98020,98021],{"class":31,"line":75},[29,98022,98023],{"class":103},"       [ 5,  6],\n",[29,98025,98026],{"class":31,"line":83},[29,98027,98028],{"class":103},"       [ 7,  8],\n",[29,98030,98031],{"class":31,"line":158},[29,98032,98033],{"class":103},"       [ 9, 10],\n",[29,98035,98036],{"class":31,"line":166},[29,98037,98038],{"class":103},"       [11, 12]])\n",[29,98040,98041],{"class":31,"line":1505},[29,98042,94057],{"class":103},[14,98044,98046],{"id":98045},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[171,98048,98049],{},"改变了原数组",[19,98051,98053],{"className":30507,"code":98052,"language":30509,"meta":24,"style":24},"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",[26,98054,98055,98071,98087,98091,98095,98099,98103],{"__ignoreMap":24},[29,98056,98057,98059,98061,98063,98065,98067,98069],{"class":31,"line":32},[29,98058,546],{"class":309},[29,98060,355],{"class":305},[29,98062,93131],{"class":309},[29,98064,525],{"class":39},[29,98066,686],{"class":309},[29,98068,831],{"class":39},[29,98070,316],{"class":309},[29,98072,98073,98075,98077,98079,98081,98083,98085],{"class":31,"line":43},[29,98074,97946],{"class":309},[29,98076,355],{"class":305},[29,98078,310],{"class":309},[29,98080,386],{"class":39},[29,98082,686],{"class":309},[29,98084,652],{"class":39},[29,98086,316],{"class":309},[29,98088,98089],{"class":31,"line":51},[29,98090,93693],{"class":367},[29,98092,98093],{"class":31,"line":59},[29,98094,94057],{"class":103},[29,98096,98097],{"class":31,"line":67},[29,98098,97317],{"class":103},[29,98100,98101],{"class":31,"line":75},[29,98102,97322],{"class":103},[29,98104,98105],{"class":31,"line":83},[29,98106,94057],{"class":103},[14,98108,98110],{"id":98109},"_56-重要比较","5.6 重要比较：",[171,98112,98113],{},[1638,98114],{"alt":24,"src":98115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[171,98117,98118,98119,98121,98122,98124],{},"口诀：NumPy 函数要么用 ",[26,98120,96092],{},"，要么用 ",[26,98123,31625],{},"，创建结构用 shape，造数据用 size",[171,98126,98127],{},[1638,98128],{"alt":24,"src":98129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[223,98131,98132],{},"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":24,"searchDepth":43,"depth":43,"links":98134},[98135,98136,98137,98138,98139,98140],{"id":97656,"depth":43,"text":97657},{"id":97808,"depth":43,"text":97809},{"id":97858,"depth":43,"text":97859},{"id":97904,"depth":43,"text":97905},{"id":98045,"depth":43,"text":98046},{"id":98109,"depth":43,"text":98110},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97648,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98147,"title":98148,"body":98149,"description":230,"extension":231,"meta":99221,"navigation":233,"path":99222,"seo":99223,"stem":99224,"__hash__":99225},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98150,"toc":99215},[98151,98154,98158,98161,98164,98167,98232,98235,98275,98278,98360,98363,98368,98390,98392,98397,98402,98405,98408,98563,98566,98768,98772,98775,98778,98846,98848,98853,98856,98859,98939,98943,98946,98948,99021,99023,99028,99030,99110,99114,99117,99120,99123,99126,99129,99132,99212],[10,98152,98148],{"id":98153},"_6数组的拼接",[14,98155,98157],{"id":98156},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[171,98159,98160],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[171,98162,98163],{},"函数内部传两个数列构成的数列或者元组",[171,98165,98166],{},"①一维数组的拼接",[19,98168,98170],{"className":30507,"code":98169,"language":30509,"meta":24,"style":24},"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",[26,98171,98172,98192,98212,98217,98222,98227],{"__ignoreMap":24},[29,98173,98174,98176,98178,98180,98182,98184,98186,98188,98190],{"class":31,"line":32},[29,98175,546],{"class":309},[29,98177,355],{"class":305},[29,98179,93153],{"class":309},[29,98181,525],{"class":39},[29,98183,686],{"class":309},[29,98185,386],{"class":39},[29,98187,686],{"class":309},[29,98189,380],{"class":39},[29,98191,4832],{"class":309},[29,98193,98194,98196,98198,98200,98202,98204,98206,98208,98210],{"class":31,"line":43},[29,98195,571],{"class":309},[29,98197,355],{"class":305},[29,98199,93153],{"class":309},[29,98201,601],{"class":39},[29,98203,686],{"class":309},[29,98205,627],{"class":39},[29,98207,686],{"class":309},[29,98209,652],{"class":39},[29,98211,4832],{"class":309},[29,98213,98214],{"class":31,"line":51},[29,98215,98216],{"class":367},"#调用concatenate进行数组拼接\n",[29,98218,98219],{"class":31,"line":59},[29,98220,98221],{"class":309},"np.concatenate((a,b))\n",[29,98223,98224],{"class":31,"line":67},[29,98225,98226],{"class":367},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[29,98228,98229],{"class":31,"line":75},[29,98230,98231],{"class":367},"#np.concatenate([a,b])\n",[171,98233,98234],{},"②一维多个数组拼接",[19,98236,98238],{"className":30507,"code":98237,"language":30509,"meta":24,"style":24},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[26,98239,98240,98245,98265,98270],{"__ignoreMap":24},[29,98241,98242],{"class":31,"line":32},[29,98243,98244],{"class":367},"#也可以多个数组进行拼接\n",[29,98246,98247,98249,98251,98253,98255,98257,98259,98261,98263],{"class":31,"line":43},[29,98248,596],{"class":309},[29,98250,355],{"class":305},[29,98252,93153],{"class":309},[29,98254,754],{"class":39},[29,98256,686],{"class":309},[29,98258,780],{"class":39},[29,98260,686],{"class":309},[29,98262,831],{"class":39},[29,98264,4832],{"class":309},[29,98266,98267],{"class":31,"line":51},[29,98268,98269],{"class":309},"c\n",[29,98271,98272],{"class":31,"line":59},[29,98273,98274],{"class":309},"np.concatenate((a,b,c))\n",[171,98276,98277],{},"③二维数组拼接",[19,98279,98281],{"className":30507,"code":98280,"language":30509,"meta":24,"style":24},"#二维数组使用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",[26,98282,98283,98288,98312,98337,98342,98347],{"__ignoreMap":24},[29,98284,98285],{"class":31,"line":32},[29,98286,98287],{"class":367},"#二维数组使用concatenate进行拼接\n",[29,98289,98290,98292,98294,98296,98298,98300,98302,98304,98306,98308,98310],{"class":31,"line":43},[29,98291,93435],{"class":309},[29,98293,355],{"class":305},[29,98295,93131],{"class":309},[29,98297,525],{"class":39},[29,98299,686],{"class":309},[29,98301,831],{"class":39},[29,98303,93136],{"class":309},[29,98305,380],{"class":39},[29,98307,686],{"class":309},[29,98309,601],{"class":39},[29,98311,316],{"class":309},[29,98313,98314,98317,98319,98321,98323,98325,98327,98329,98331,98333,98335],{"class":31,"line":51},[29,98315,98316],{"class":309},"bb",[29,98318,355],{"class":305},[29,98320,93131],{"class":309},[29,98322,645],{"class":39},[29,98324,686],{"class":309},[29,98326,950],{"class":39},[29,98328,93136],{"class":309},[29,98330,380],{"class":39},[29,98332,686],{"class":309},[29,98334,601],{"class":39},[29,98336,316],{"class":309},[29,98338,98339],{"class":31,"line":59},[29,98340,98341],{"class":367},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[29,98343,98344],{"class":31,"line":67},[29,98345,98346],{"class":367},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[29,98348,98349,98352,98354,98356,98358],{"class":31,"line":75},[29,98350,98351],{"class":309},"np.concatenate((aa,bb),",[29,98353,47643],{"class":5391},[29,98355,355],{"class":305},[29,98357,499],{"class":39},[29,98359,316],{"class":309},[171,98361,98362],{},"结果：",[171,98364,98365],{},[1638,98366],{"alt":24,"src":98367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[19,98369,98371],{"className":30507,"code":98370,"language":30509,"meta":24,"style":24},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[26,98372,98373,98378],{"__ignoreMap":24},[29,98374,98375],{"class":31,"line":32},[29,98376,98377],{"class":367},"#指定axis为1进行拼接\n",[29,98379,98380,98382,98384,98386,98388],{"class":31,"line":43},[29,98381,98351],{"class":309},[29,98383,47643],{"class":5391},[29,98385,355],{"class":305},[29,98387,525],{"class":39},[29,98389,316],{"class":309},[171,98391,98362],{},[171,98393,98394],{},[1638,98395],{"alt":24,"src":98396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[171,98398,98399],{},[457,98400,98401],{},"二维数组总结：0竖着方向，1横着方向",[171,98403,98404],{},"④三维数组拼接",[171,98406,98407],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[19,98409,98411],{"className":30507,"code":98410,"language":30509,"meta":24,"style":24},"#两个三行六列\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",[26,98412,98413,98418,98446,98476,98481,98498,98503,98508,98513,98530,98535,98540,98545,98558],{"__ignoreMap":24},[29,98414,98415],{"class":31,"line":32},[29,98416,98417],{"class":367},"#两个三行六列\n",[29,98419,98420,98422,98424,98426,98428,98430,98432,98434,98436,98438,98440,98442,98444],{"class":31,"line":43},[29,98421,95650],{"class":309},[29,98423,355],{"class":305},[29,98425,93131],{"class":309},[29,98427,525],{"class":39},[29,98429,686],{"class":309},[29,98431,633],{"class":39},[29,98433,93136],{"class":309},[29,98435,386],{"class":39},[29,98437,686],{"class":309},[29,98439,380],{"class":39},[29,98441,686],{"class":309},[29,98443,652],{"class":39},[29,98445,316],{"class":309},[29,98447,98448,98451,98453,98455,98457,98459,98462,98464,98466,98468,98470,98472,98474],{"class":31,"line":51},[29,98449,98450],{"class":309},"bbb",[29,98452,355],{"class":305},[29,98454,93131],{"class":309},[29,98456,645],{"class":39},[29,98458,686],{"class":309},[29,98460,98461],{"class":39},"137",[29,98463,93136],{"class":309},[29,98465,386],{"class":39},[29,98467,686],{"class":309},[29,98469,380],{"class":39},[29,98471,686],{"class":309},[29,98473,652],{"class":39},[29,98475,316],{"class":309},[29,98477,98478],{"class":31,"line":59},[29,98479,98480],{"class":367},"#axis=0\n",[29,98482,98483,98485,98487,98490,98492,98494,98496],{"class":31,"line":67},[29,98484,1003],{"class":309},[29,98486,355],{"class":305},[29,98488,98489],{"class":309},"np.concatenate((aaa,bbb),",[29,98491,47643],{"class":5391},[29,98493,355],{"class":305},[29,98495,499],{"class":39},[29,98497,316],{"class":309},[29,98499,98500],{"class":31,"line":75},[29,98501,98502],{"class":309},"s.shape\n",[29,98504,98505],{"class":31,"line":83},[29,98506,98507],{"class":367},"#输出：(4,3,6)\n",[29,98509,98510],{"class":31,"line":158},[29,98511,98512],{"class":367},"#axis=1\n",[29,98514,98515,98518,98520,98522,98524,98526,98528],{"class":31,"line":166},[29,98516,98517],{"class":309},"ss",[29,98519,355],{"class":305},[29,98521,98489],{"class":309},[29,98523,47643],{"class":5391},[29,98525,355],{"class":305},[29,98527,525],{"class":39},[29,98529,316],{"class":309},[29,98531,98532],{"class":31,"line":1505},[29,98533,98534],{"class":309},"ss.shape\n",[29,98536,98537],{"class":31,"line":1788},[29,98538,98539],{"class":367},"#输出：(2,6,6)\n",[29,98541,98542],{"class":31,"line":1793},[29,98543,98544],{"class":367},"#axis=2\n",[29,98546,98547,98549,98551,98553,98555],{"class":31,"line":1799},[29,98548,98489],{"class":309},[29,98550,47643],{"class":5391},[29,98552,355],{"class":305},[29,98554,386],{"class":39},[29,98556,98557],{"class":309},").shape\n",[29,98559,98560],{"class":31,"line":1804},[29,98561,98562],{"class":367},"#输出：（2，3，12）\n",[171,98564,98565],{},"⑤四维数组拼接",[19,98567,98569],{"className":30507,"code":98568,"language":30509,"meta":24,"style":24},"#两个三行六列\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",[26,98570,98571,98575,98603,98631,98656,98682,98686,98699,98704,98708,98720,98725,98729,98741,98746,98751,98763],{"__ignoreMap":24},[29,98572,98573],{"class":31,"line":32},[29,98574,98417],{"class":367},[29,98576,98577,98579,98581,98583,98585,98587,98589,98591,98593,98595,98597,98599,98601],{"class":31,"line":43},[29,98578,95650],{"class":309},[29,98580,355],{"class":305},[29,98582,93131],{"class":309},[29,98584,525],{"class":39},[29,98586,686],{"class":309},[29,98588,633],{"class":39},[29,98590,93136],{"class":309},[29,98592,386],{"class":39},[29,98594,686],{"class":309},[29,98596,380],{"class":39},[29,98598,686],{"class":309},[29,98600,652],{"class":39},[29,98602,316],{"class":309},[29,98604,98605,98607,98609,98611,98613,98615,98617,98619,98621,98623,98625,98627,98629],{"class":31,"line":51},[29,98606,98450],{"class":309},[29,98608,355],{"class":305},[29,98610,93131],{"class":309},[29,98612,645],{"class":39},[29,98614,686],{"class":309},[29,98616,98461],{"class":39},[29,98618,93136],{"class":309},[29,98620,386],{"class":39},[29,98622,686],{"class":309},[29,98624,380],{"class":39},[29,98626,686],{"class":309},[29,98628,652],{"class":39},[29,98630,316],{"class":309},[29,98632,98633,98636,98638,98640,98642,98644,98646,98648,98650,98652,98654],{"class":31,"line":59},[29,98634,98635],{"class":309},"aaaa",[29,98637,355],{"class":305},[29,98639,97799],{"class":309},[29,98641,386],{"class":39},[29,98643,686],{"class":309},[29,98645,380],{"class":39},[29,98647,686],{"class":309},[29,98649,380],{"class":39},[29,98651,686],{"class":309},[29,98653,386],{"class":39},[29,98655,316],{"class":309},[29,98657,98658,98661,98663,98666,98668,98670,98672,98674,98676,98678,98680],{"class":31,"line":67},[29,98659,98660],{"class":309},"bbbb",[29,98662,355],{"class":305},[29,98664,98665],{"class":309},"bbb.reshape(",[29,98667,386],{"class":39},[29,98669,686],{"class":309},[29,98671,380],{"class":39},[29,98673,686],{"class":309},[29,98675,380],{"class":39},[29,98677,686],{"class":309},[29,98679,386],{"class":39},[29,98681,316],{"class":309},[29,98683,98684],{"class":31,"line":75},[29,98685,98480],{"class":367},[29,98687,98688,98691,98693,98695,98697],{"class":31,"line":83},[29,98689,98690],{"class":309},"np.concatenate((aaaa,bbbb),",[29,98692,47643],{"class":5391},[29,98694,355],{"class":305},[29,98696,499],{"class":39},[29,98698,98557],{"class":309},[29,98700,98701],{"class":31,"line":158},[29,98702,98703],{"class":367},"#结果：（4，3，3，2）\n",[29,98705,98706],{"class":31,"line":166},[29,98707,98512],{"class":367},[29,98709,98710,98712,98714,98716,98718],{"class":31,"line":1505},[29,98711,98690],{"class":309},[29,98713,47643],{"class":5391},[29,98715,355],{"class":305},[29,98717,525],{"class":39},[29,98719,98557],{"class":309},[29,98721,98722],{"class":31,"line":1788},[29,98723,98724],{"class":367},"#结果：（2，6，3，2）\n",[29,98726,98727],{"class":31,"line":1793},[29,98728,98544],{"class":367},[29,98730,98731,98733,98735,98737,98739],{"class":31,"line":1799},[29,98732,98690],{"class":309},[29,98734,47643],{"class":5391},[29,98736,355],{"class":305},[29,98738,386],{"class":39},[29,98740,98557],{"class":309},[29,98742,98743],{"class":31,"line":1804},[29,98744,98745],{"class":367},"#结果：（2，3，6，2）\n",[29,98747,98748],{"class":31,"line":1818},[29,98749,98750],{"class":367},"#axis=3\n",[29,98752,98753,98755,98757,98759,98761],{"class":31,"line":1823},[29,98754,98690],{"class":309},[29,98756,47643],{"class":5391},[29,98758,355],{"class":305},[29,98760,380],{"class":39},[29,98762,98557],{"class":309},[29,98764,98765],{"class":31,"line":1829},[29,98766,98767],{"class":367},"#结果：（2，3，3，4）\n",[14,98769,98771],{"id":98770},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[171,98773,98774],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[171,98776,98777],{},"①二维数组",[19,98779,98781],{"className":30507,"code":98780,"language":30509,"meta":24,"style":24},"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",[26,98782,98783,98807,98831,98836,98841],{"__ignoreMap":24},[29,98784,98785,98787,98789,98791,98793,98795,98797,98799,98801,98803,98805],{"class":31,"line":32},[29,98786,93435],{"class":309},[29,98788,355],{"class":305},[29,98790,93131],{"class":309},[29,98792,525],{"class":39},[29,98794,686],{"class":309},[29,98796,831],{"class":39},[29,98798,93136],{"class":309},[29,98800,380],{"class":39},[29,98802,686],{"class":309},[29,98804,601],{"class":39},[29,98806,316],{"class":309},[29,98808,98809,98811,98813,98815,98817,98819,98821,98823,98825,98827,98829],{"class":31,"line":43},[29,98810,98316],{"class":309},[29,98812,355],{"class":305},[29,98814,93131],{"class":309},[29,98816,645],{"class":39},[29,98818,686],{"class":309},[29,98820,950],{"class":39},[29,98822,93136],{"class":309},[29,98824,380],{"class":39},[29,98826,686],{"class":309},[29,98828,601],{"class":39},[29,98830,316],{"class":309},[29,98832,98833],{"class":31,"line":51},[29,98834,98835],{"class":309},"np.hstack((aa,bb))\n",[29,98837,98838],{"class":31,"line":59},[29,98839,98840],{"class":367},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[29,98842,98843],{"class":31,"line":67},[29,98844,98845],{"class":367},"#np.hstack([aa,bb])\n",[171,98847,98362],{},[171,98849,98850],{},[1638,98851],{"alt":24,"src":98852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[171,98854,98855],{},"等效于concatenate()函数中axis=1时的情况",[171,98857,98858],{},"②三维数组",[19,98860,98862],{"className":30507,"code":98861,"language":30509,"meta":24,"style":24},"#两个三行六列\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",[26,98863,98864,98868,98896,98924,98929,98934],{"__ignoreMap":24},[29,98865,98866],{"class":31,"line":32},[29,98867,98417],{"class":367},[29,98869,98870,98872,98874,98876,98878,98880,98882,98884,98886,98888,98890,98892,98894],{"class":31,"line":43},[29,98871,95650],{"class":309},[29,98873,355],{"class":305},[29,98875,93131],{"class":309},[29,98877,525],{"class":39},[29,98879,686],{"class":309},[29,98881,633],{"class":39},[29,98883,93136],{"class":309},[29,98885,386],{"class":39},[29,98887,686],{"class":309},[29,98889,380],{"class":39},[29,98891,686],{"class":309},[29,98893,652],{"class":39},[29,98895,316],{"class":309},[29,98897,98898,98900,98902,98904,98906,98908,98910,98912,98914,98916,98918,98920,98922],{"class":31,"line":51},[29,98899,98450],{"class":309},[29,98901,355],{"class":305},[29,98903,93131],{"class":309},[29,98905,645],{"class":39},[29,98907,686],{"class":309},[29,98909,98461],{"class":39},[29,98911,93136],{"class":309},[29,98913,386],{"class":39},[29,98915,686],{"class":309},[29,98917,380],{"class":39},[29,98919,686],{"class":309},[29,98921,652],{"class":39},[29,98923,316],{"class":309},[29,98925,98926],{"class":31,"line":59},[29,98927,98928],{"class":367},"#使用hstack\n",[29,98930,98931],{"class":31,"line":67},[29,98932,98933],{"class":309},"np.hstack((aaa,bbb)).shape\n",[29,98935,98936],{"class":31,"line":75},[29,98937,98938],{"class":367},"#输出：（2，6，6）\n",[14,98940,98942],{"id":98941},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[171,98944,98945],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[171,98947,98777],{},[19,98949,98951],{"className":30507,"code":98950,"language":30509,"meta":24,"style":24},"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",[26,98952,98953,98977,99001,99006,99011,99016],{"__ignoreMap":24},[29,98954,98955,98957,98959,98961,98963,98965,98967,98969,98971,98973,98975],{"class":31,"line":32},[29,98956,93435],{"class":309},[29,98958,355],{"class":305},[29,98960,93131],{"class":309},[29,98962,525],{"class":39},[29,98964,686],{"class":309},[29,98966,831],{"class":39},[29,98968,93136],{"class":309},[29,98970,380],{"class":39},[29,98972,686],{"class":309},[29,98974,601],{"class":39},[29,98976,316],{"class":309},[29,98978,98979,98981,98983,98985,98987,98989,98991,98993,98995,98997,98999],{"class":31,"line":43},[29,98980,98316],{"class":309},[29,98982,355],{"class":305},[29,98984,93131],{"class":309},[29,98986,645],{"class":39},[29,98988,686],{"class":309},[29,98990,950],{"class":39},[29,98992,93136],{"class":309},[29,98994,380],{"class":39},[29,98996,686],{"class":309},[29,98998,601],{"class":39},[29,99000,316],{"class":309},[29,99002,99003],{"class":31,"line":51},[29,99004,99005],{"class":367},"#vstack 垂直方向进行堆叠\n",[29,99007,99008],{"class":31,"line":59},[29,99009,99010],{"class":309},"np.vstack((aa,bb))\n",[29,99012,99013],{"class":31,"line":67},[29,99014,99015],{"class":367},"#与hstack传的参数类似，等价于：\n",[29,99017,99018],{"class":31,"line":75},[29,99019,99020],{"class":309},"np.vstack([aa,bb])\n",[171,99022,98362],{},[171,99024,99025],{},[1638,99026],{"alt":24,"src":99027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[171,99029,98858],{},[19,99031,99033],{"className":30507,"code":99032,"language":30509,"meta":24,"style":24},"#两个三行六列\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",[26,99034,99035,99039,99067,99095,99100,99105],{"__ignoreMap":24},[29,99036,99037],{"class":31,"line":32},[29,99038,98417],{"class":367},[29,99040,99041,99043,99045,99047,99049,99051,99053,99055,99057,99059,99061,99063,99065],{"class":31,"line":43},[29,99042,95650],{"class":309},[29,99044,355],{"class":305},[29,99046,93131],{"class":309},[29,99048,525],{"class":39},[29,99050,686],{"class":309},[29,99052,633],{"class":39},[29,99054,93136],{"class":309},[29,99056,386],{"class":39},[29,99058,686],{"class":309},[29,99060,380],{"class":39},[29,99062,686],{"class":309},[29,99064,652],{"class":39},[29,99066,316],{"class":309},[29,99068,99069,99071,99073,99075,99077,99079,99081,99083,99085,99087,99089,99091,99093],{"class":31,"line":51},[29,99070,98450],{"class":309},[29,99072,355],{"class":305},[29,99074,93131],{"class":309},[29,99076,645],{"class":39},[29,99078,686],{"class":309},[29,99080,98461],{"class":39},[29,99082,93136],{"class":309},[29,99084,386],{"class":39},[29,99086,686],{"class":309},[29,99088,380],{"class":39},[29,99090,686],{"class":309},[29,99092,652],{"class":39},[29,99094,316],{"class":309},[29,99096,99097],{"class":31,"line":59},[29,99098,99099],{"class":367},"#使用vstack\n",[29,99101,99102],{"class":31,"line":67},[29,99103,99104],{"class":309},"np.vstack((aaa,bbb)).shape\n",[29,99106,99107],{"class":31,"line":75},[29,99108,99109],{"class":367},"#输出：（4，3，6）\n",[14,99111,99113],{"id":99112},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[171,99115,99116],{},"该方法是三维数组特有的方法",[171,99118,99119],{},"也就是说",[171,99121,99122],{},"一维数组拼接方法用：concatenate()",[171,99124,99125],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[171,99127,99128],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[171,99130,99131],{},"四维数组及多维数组只能用concatenate进行拼接",[19,99133,99135],{"className":30507,"code":99134,"language":30509,"meta":24,"style":24},"#两个三行六列\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",[26,99136,99137,99141,99169,99197,99202,99207],{"__ignoreMap":24},[29,99138,99139],{"class":31,"line":32},[29,99140,98417],{"class":367},[29,99142,99143,99145,99147,99149,99151,99153,99155,99157,99159,99161,99163,99165,99167],{"class":31,"line":43},[29,99144,95650],{"class":309},[29,99146,355],{"class":305},[29,99148,93131],{"class":309},[29,99150,525],{"class":39},[29,99152,686],{"class":309},[29,99154,633],{"class":39},[29,99156,93136],{"class":309},[29,99158,386],{"class":39},[29,99160,686],{"class":309},[29,99162,380],{"class":39},[29,99164,686],{"class":309},[29,99166,652],{"class":39},[29,99168,316],{"class":309},[29,99170,99171,99173,99175,99177,99179,99181,99183,99185,99187,99189,99191,99193,99195],{"class":31,"line":51},[29,99172,98450],{"class":309},[29,99174,355],{"class":305},[29,99176,93131],{"class":309},[29,99178,645],{"class":39},[29,99180,686],{"class":309},[29,99182,98461],{"class":39},[29,99184,93136],{"class":309},[29,99186,386],{"class":39},[29,99188,686],{"class":309},[29,99190,380],{"class":39},[29,99192,686],{"class":309},[29,99194,652],{"class":39},[29,99196,316],{"class":309},[29,99198,99199],{"class":31,"line":59},[29,99200,99201],{"class":367},"#使用dstack\n",[29,99203,99204],{"class":31,"line":67},[29,99205,99206],{"class":309},"np.dstack((aaa,bbb)).shape\n",[29,99208,99209],{"class":31,"line":75},[29,99210,99211],{"class":367},"#结果：（2，3，12）\n",[223,99213,99214],{},"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":24,"searchDepth":43,"depth":43,"links":99216},[99217,99218,99219,99220],{"id":98156,"depth":43,"text":98157},{"id":98770,"depth":43,"text":98771},{"id":98941,"depth":43,"text":98942},{"id":99112,"depth":43,"text":99113},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98148,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99227,"title":99228,"body":99229,"description":230,"extension":231,"meta":99504,"navigation":233,"path":99505,"seo":99506,"stem":99507,"__hash__":99508},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99230,"toc":99502},[99231,99234,99237,99331,99334,99337,99340,99343,99346,99349,99352,99355,99499],[10,99232,99228],{"id":99233},"_7数组转置",[171,99235,99236],{},"使用transpose()函数",[19,99238,99240],{"className":30507,"code":99239,"language":30509,"meta":24,"style":24},"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",[26,99241,99242,99252,99276,99281,99286,99291,99296,99304,99308,99312,99317,99322,99327],{"__ignoreMap":24},[29,99243,99244,99246,99248,99250],{"class":31,"line":32},[29,99245,30521],{"class":305},[29,99247,31509],{"class":309},[29,99249,31512],{"class":305},[29,99251,31515],{"class":309},[29,99253,99254,99256,99258,99260,99262,99264,99266,99268,99270,99272,99274],{"class":31,"line":43},[29,99255,546],{"class":309},[29,99257,355],{"class":305},[29,99259,31846],{"class":309},[29,99261,525],{"class":39},[29,99263,686],{"class":309},[29,99265,831],{"class":39},[29,99267,93136],{"class":309},[29,99269,601],{"class":39},[29,99271,686],{"class":309},[29,99273,380],{"class":39},[29,99275,316],{"class":309},[29,99277,99278],{"class":31,"line":51},[29,99279,99280],{"class":367},"#二维数组转置\n",[29,99282,99283],{"class":31,"line":59},[29,99284,99285],{"class":367},"#调用transpose()函数\n",[29,99287,99288],{"class":31,"line":67},[29,99289,99290],{"class":309},"a.transpose()\n",[29,99292,99293],{"class":31,"line":75},[29,99294,99295],{"class":367},"#对于二维数组也可以采用.T来实现\n",[29,99297,99298,99301],{"class":31,"line":83},[29,99299,99300],{"class":309},"a.T",[29,99302,99303],{"class":367},"#与上述代码一样\n",[29,99305,99306],{"class":31,"line":158},[29,99307,93693],{"class":367},[29,99309,99310],{"class":31,"line":166},[29,99311,94057],{"class":103},[29,99313,99314],{"class":31,"line":1505},[29,99315,99316],{"class":103},"array([[ 1,  4,  7, 10],\n",[29,99318,99319],{"class":31,"line":1788},[29,99320,99321],{"class":103},"       [ 2,  5,  8, 11],\n",[29,99323,99324],{"class":31,"line":1793},[29,99325,99326],{"class":103},"       [ 3,  6,  9, 12]])\n",[29,99328,99329],{"class":31,"line":1799},[29,99330,94057],{"class":103},[171,99332,99333],{},"也可以使用np.transpose()的形式",[171,99335,99336],{},"#多维数组进行转置 np.transpose()",[171,99338,99339],{},"#对二维数组也可以使用np.transpose()进行转置",[171,99341,99342],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[171,99344,99345],{},"第二个参数，维度可以理解为用axis中的数来理解",[171,99347,99348],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[171,99350,99351],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[171,99353,99354],{},"四维及以上的数组也是一样的道理",[19,99356,99358],{"className":30507,"code":99357,"language":30509,"meta":24,"style":24},"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",[26,99359,99360,99388,99393,99398,99403,99421,99426,99458,99463,99468,99473,99494],{"__ignoreMap":24},[29,99361,99362,99364,99366,99368,99370,99372,99374,99376,99378,99380,99382,99384,99386],{"class":31,"line":32},[29,99363,1128],{"class":309},[29,99365,355],{"class":305},[29,99367,93131],{"class":309},[29,99369,525],{"class":39},[29,99371,686],{"class":309},[29,99373,633],{"class":39},[29,99375,93136],{"class":309},[29,99377,380],{"class":39},[29,99379,686],{"class":309},[29,99381,652],{"class":39},[29,99383,686],{"class":309},[29,99385,386],{"class":39},[29,99387,316],{"class":309},[29,99389,99390],{"class":31,"line":43},[29,99391,99392],{"class":309},"x.shape\n",[29,99394,99395],{"class":31,"line":51},[29,99396,99397],{"class":367},"#结果：（3,6,2）\n",[29,99399,99400],{"class":31,"line":59},[29,99401,99402],{"class":367},"#使用np.transpose()进行转置 变为(2,6,3)\n",[29,99404,99405,99408,99410,99412,99414,99416,99418],{"class":31,"line":67},[29,99406,99407],{"class":309},"np.transpose(x,(",[29,99409,386],{"class":39},[29,99411,686],{"class":309},[29,99413,525],{"class":39},[29,99415,686],{"class":309},[29,99417,499],{"class":39},[29,99419,99420],{"class":309},")).shape\n",[29,99422,99423],{"class":31,"line":75},[29,99424,99425],{"class":367},"#结果：(2,6,3)\n",[29,99427,99428,99430,99432,99434,99436,99438,99440,99442,99444,99446,99448,99450,99452,99454,99456],{"class":31,"line":83},[29,99429,98635],{"class":309},[29,99431,355],{"class":305},[29,99433,93131],{"class":309},[29,99435,525],{"class":39},[29,99437,686],{"class":309},[29,99439,633],{"class":39},[29,99441,93136],{"class":309},[29,99443,380],{"class":39},[29,99445,686],{"class":309},[29,99447,386],{"class":39},[29,99449,686],{"class":309},[29,99451,525],{"class":39},[29,99453,686],{"class":309},[29,99455,652],{"class":39},[29,99457,316],{"class":309},[29,99459,99460],{"class":31,"line":158},[29,99461,99462],{"class":309},"aaaa.shape\n",[29,99464,99465],{"class":31,"line":166},[29,99466,99467],{"class":367},"#结果：（3，2，1，6）\n",[29,99469,99470],{"class":31,"line":1505},[29,99471,99472],{"class":367},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[29,99474,99475,99478,99480,99482,99484,99486,99488,99490,99492],{"class":31,"line":1788},[29,99476,99477],{"class":309},"np.transpose(aaaa,(",[29,99479,525],{"class":39},[29,99481,686],{"class":309},[29,99483,386],{"class":39},[29,99485,686],{"class":309},[29,99487,499],{"class":39},[29,99489,686],{"class":309},[29,99491,380],{"class":39},[29,99493,99420],{"class":309},[29,99495,99496],{"class":31,"line":1793},[29,99497,99498],{"class":367},"#结果：(2,1,3,6)\n",[223,99500,99501],{},"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":24,"searchDepth":43,"depth":43,"links":99503},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99228,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99510,"title":99511,"body":99512,"description":230,"extension":231,"meta":100246,"navigation":233,"path":100247,"seo":100248,"stem":100249,"__hash__":100250},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99513,"toc":100244},[99514,99517,99520,99523,99526,99529,99532,99535,99538,99647,99650,99653,100241],[10,99515,99511],{"id":99516},"_8数组分割",[171,99518,99519],{},"split分割",[171,99521,99522],{},"numpy.split(ary,indics_or_sections,axis)",[171,99524,99525],{},"解释：",[171,99527,99528],{},"ary:被分割的数组",[171,99530,99531],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[171,99533,99534],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[171,99536,99537],{},"①一维数组的分割",[19,99539,99541],{"className":30507,"code":99540,"language":30509,"meta":24,"style":24},"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",[26,99542,99543,99559,99564,99573,99577,99582,99590,99594,99599,99604,99617,99621,99626,99638,99642],{"__ignoreMap":24},[29,99544,99545,99547,99549,99551,99553,99555,99557],{"class":31,"line":32},[29,99546,546],{"class":309},[29,99548,355],{"class":305},[29,99550,93131],{"class":309},[29,99552,525],{"class":39},[29,99554,686],{"class":309},[29,99556,728],{"class":39},[29,99558,316],{"class":309},[29,99560,99561],{"class":31,"line":43},[29,99562,99563],{"class":367},"#如果传入整数，必须能够平分，否则会报错\n",[29,99565,99566,99569,99571],{"class":31,"line":51},[29,99567,99568],{"class":309},"np.split(a,",[29,99570,386],{"class":39},[29,99572,316],{"class":309},[29,99574,99575],{"class":31,"line":59},[29,99576,93693],{"class":367},[29,99578,99579],{"class":31,"line":67},[29,99580,99581],{"class":367},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[29,99583,99584,99586,99588],{"class":31,"line":75},[29,99585,99568],{"class":309},[29,99587,601],{"class":39},[29,99589,316],{"class":309},[29,99591,99592],{"class":31,"line":83},[29,99593,93693],{"class":367},[29,99595,99596],{"class":31,"line":158},[29,99597,99598],{"class":367},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[29,99600,99601],{"class":31,"line":166},[29,99602,99603],{"class":367},"#传入数组\n",[29,99605,99606,99609,99611,99613,99615],{"class":31,"line":1505},[29,99607,99608],{"class":309},"np.split(a,[",[29,99610,380],{"class":39},[29,99612,686],{"class":309},[29,99614,627],{"class":39},[29,99616,4832],{"class":309},[29,99618,99619],{"class":31,"line":1788},[29,99620,93693],{"class":367},[29,99622,99623],{"class":31,"line":1793},[29,99624,99625],{"class":367},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[29,99627,99628,99630,99632,99634,99636],{"class":31,"line":1799},[29,99629,99608],{"class":309},[29,99631,627],{"class":39},[29,99633,686],{"class":309},[29,99635,677],{"class":39},[29,99637,4832],{"class":309},[29,99639,99640],{"class":31,"line":1804},[29,99641,93693],{"class":367},[29,99643,99644],{"class":31,"line":1818},[29,99645,99646],{"class":367},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[171,99648,99649],{},"②二维数组的分割",[171,99651,99652],{},"使用split()",[19,99654,99656],{"className":30507,"code":99655,"language":30509,"meta":24,"style":24},"#二维数组分割\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",[26,99657,99658,99663,99687,99692,99701,99705,99709,99714,99719,99724,99729,99734,99739,99744,99748,99761,99765,99769,99773,99777,99781,99786,99791,99796,99800,99805,99821,99825,99829,99834,99839,99844,99849,99854,99859,99864,99869,99874,99879,99884,99889,99894,99899,99904,99909,99914,99919,99923,99927,99947,99951,99955,99960,99965,99970,99975,99980,99985,99990,99995,100000,100005,100010,100015,100020,100025,100030,100035,100040,100045,100049,100054,100063,100067,100071,100075,100079,100083,100087,100091,100095,100099,100108,100112,100116,100120,100124,100128,100132,100136,100140,100144,100148,100152,100156,100160,100164,100168,100172,100176,100180,100184,100188,100192,100205,100209,100213,100217,100221,100225,100229,100233,100237],{"__ignoreMap":24},[29,99659,99660],{"class":31,"line":32},[29,99661,99662],{"class":367},"#二维数组分割\n",[29,99664,99665,99667,99669,99671,99673,99675,99677,99679,99681,99683,99685],{"class":31,"line":43},[29,99666,93435],{"class":309},[29,99668,355],{"class":305},[29,99670,93131],{"class":309},[29,99672,525],{"class":39},[29,99674,686],{"class":309},[29,99676,633],{"class":39},[29,99678,93136],{"class":309},[29,99680,652],{"class":39},[29,99682,686],{"class":309},[29,99684,652],{"class":39},[29,99686,316],{"class":309},[29,99688,99689],{"class":31,"line":51},[29,99690,99691],{"class":367},"#默认axis=0  传入整数平均分,按行来的\n",[29,99693,99694,99697,99699],{"class":31,"line":59},[29,99695,99696],{"class":309},"np.split(aa,",[29,99698,380],{"class":39},[29,99700,316],{"class":309},[29,99702,99703],{"class":31,"line":67},[29,99704,95893],{"class":367},[29,99706,99707],{"class":31,"line":75},[29,99708,94057],{"class":103},[29,99710,99711],{"class":31,"line":83},[29,99712,99713],{"class":103},"[array([[ 1,  2,  3,  4,  5,  6],\n",[29,99715,99716],{"class":31,"line":158},[29,99717,99718],{"class":103},"        [ 7,  8,  9, 10, 11, 12]]),\n",[29,99720,99721],{"class":31,"line":166},[29,99722,99723],{"class":103}," array([[13, 14, 15, 16, 17, 18],\n",[29,99725,99726],{"class":31,"line":1505},[29,99727,99728],{"class":103},"        [19, 20, 21, 22, 23, 24]]),\n",[29,99730,99731],{"class":31,"line":1788},[29,99732,99733],{"class":103}," array([[25, 26, 27, 28, 29, 30],\n",[29,99735,99736],{"class":31,"line":1793},[29,99737,99738],{"class":103},"        [31, 32, 33, 34, 35, 36]])]\n",[29,99740,99741],{"class":31,"line":1799},[29,99742,99743],{"class":103}," '''\n",[29,99745,99746],{"class":31,"line":1804},[29,99747,99603],{"class":367},[29,99749,99750,99753,99755,99757,99759],{"class":31,"line":1818},[29,99751,99752],{"class":309},"np.split(aa,[",[29,99754,386],{"class":39},[29,99756,686],{"class":309},[29,99758,627],{"class":39},[29,99760,4832],{"class":309},[29,99762,99763],{"class":31,"line":1823},[29,99764,95893],{"class":367},[29,99766,99767],{"class":31,"line":1829},[29,99768,94057],{"class":103},[29,99770,99771],{"class":31,"line":1850},[29,99772,99713],{"class":103},[29,99774,99775],{"class":31,"line":1855},[29,99776,99718],{"class":103},[29,99778,99779],{"class":31,"line":1869},[29,99780,99723],{"class":103},[29,99782,99783],{"class":31,"line":1874},[29,99784,99785],{"class":103},"        [19, 20, 21, 22, 23, 24],\n",[29,99787,99788],{"class":31,"line":1903},[29,99789,99790],{"class":103},"        [25, 26, 27, 28, 29, 30]]),\n",[29,99792,99793],{"class":31,"line":1908},[29,99794,99795],{"class":103}," array([[31, 32, 33, 34, 35, 36]])]\n",[29,99797,99798],{"class":31,"line":1925},[29,99799,94057],{"class":103},[29,99801,99802],{"class":31,"line":1930},[29,99803,99804],{"class":367},"#axis=1 按照列来分\n",[29,99806,99807,99809,99811,99813,99815,99817,99819],{"class":31,"line":1935},[29,99808,99696],{"class":309},[29,99810,380],{"class":39},[29,99812,686],{"class":309},[29,99814,47643],{"class":5391},[29,99816,355],{"class":305},[29,99818,525],{"class":39},[29,99820,316],{"class":309},[29,99822,99823],{"class":31,"line":1940},[29,99824,95893],{"class":367},[29,99826,99827],{"class":31,"line":1954},[29,99828,94057],{"class":103},[29,99830,99831],{"class":31,"line":1959},[29,99832,99833],{"class":103},"[array([[ 1,  2],\n",[29,99835,99836],{"class":31,"line":2752},[29,99837,99838],{"class":103},"        [ 7,  8],\n",[29,99840,99841],{"class":31,"line":2766},[29,99842,99843],{"class":103},"        [13, 14],\n",[29,99845,99846],{"class":31,"line":2774},[29,99847,99848],{"class":103},"        [19, 20],\n",[29,99850,99851],{"class":31,"line":2779},[29,99852,99853],{"class":103},"        [25, 26],\n",[29,99855,99856],{"class":31,"line":2785},[29,99857,99858],{"class":103},"        [31, 32]]),\n",[29,99860,99861],{"class":31,"line":2791},[29,99862,99863],{"class":103}," array([[ 3,  4],\n",[29,99865,99866],{"class":31,"line":2796},[29,99867,99868],{"class":103},"        [ 9, 10],\n",[29,99870,99871],{"class":31,"line":8123},[29,99872,99873],{"class":103},"        [15, 16],\n",[29,99875,99876],{"class":31,"line":8147},[29,99877,99878],{"class":103},"        [21, 22],\n",[29,99880,99881],{"class":31,"line":8152},[29,99882,99883],{"class":103},"        [27, 28],\n",[29,99885,99886],{"class":31,"line":8158},[29,99887,99888],{"class":103},"        [33, 34]]),\n",[29,99890,99891],{"class":31,"line":8185},[29,99892,99893],{"class":103}," array([[ 5,  6],\n",[29,99895,99896],{"class":31,"line":8190},[29,99897,99898],{"class":103},"        [11, 12],\n",[29,99900,99901],{"class":31,"line":8196},[29,99902,99903],{"class":103},"        [17, 18],\n",[29,99905,99906],{"class":31,"line":8208},[29,99907,99908],{"class":103},"        [23, 24],\n",[29,99910,99911],{"class":31,"line":8220},[29,99912,99913],{"class":103},"        [29, 30],\n",[29,99915,99916],{"class":31,"line":8232},[29,99917,99918],{"class":103},"        [35, 36]])]\n",[29,99920,99921],{"class":31,"line":9891},[29,99922,99743],{"class":103},[29,99924,99925],{"class":31,"line":9916},[29,99926,99603],{"class":367},[29,99928,99929,99931,99933,99935,99937,99939,99941,99943,99945],{"class":31,"line":9939},[29,99930,99752],{"class":309},[29,99932,525],{"class":39},[29,99934,686],{"class":309},[29,99936,386],{"class":39},[29,99938,41738],{"class":309},[29,99940,47643],{"class":5391},[29,99942,355],{"class":305},[29,99944,525],{"class":39},[29,99946,316],{"class":309},[29,99948,99949],{"class":31,"line":9963},[29,99950,93693],{"class":367},[29,99952,99953],{"class":31,"line":9968},[29,99954,94057],{"class":103},[29,99956,99957],{"class":31,"line":9973},[29,99958,99959],{"class":103},"[array([[ 1],\n",[29,99961,99962],{"class":31,"line":9978},[29,99963,99964],{"class":103},"        [ 7],\n",[29,99966,99967],{"class":31,"line":9987},[29,99968,99969],{"class":103},"        [13],\n",[29,99971,99972],{"class":31,"line":9992},[29,99973,99974],{"class":103},"        [19],\n",[29,99976,99977],{"class":31,"line":9998},[29,99978,99979],{"class":103},"        [25],\n",[29,99981,99982],{"class":31,"line":10019},[29,99983,99984],{"class":103},"        [31]]),\n",[29,99986,99987],{"class":31,"line":10025},[29,99988,99989],{"class":103}," array([[ 2],\n",[29,99991,99992],{"class":31,"line":10039},[29,99993,99994],{"class":103},"        [ 8],\n",[29,99996,99997],{"class":31,"line":10045},[29,99998,99999],{"class":103},"        [14],\n",[29,100001,100002],{"class":31,"line":10072},[29,100003,100004],{"class":103},"        [20],\n",[29,100006,100007],{"class":31,"line":10081},[29,100008,100009],{"class":103},"        [26],\n",[29,100011,100012],{"class":31,"line":10087},[29,100013,100014],{"class":103},"        [32]]),\n",[29,100016,100017],{"class":31,"line":10095},[29,100018,100019],{"class":103}," array([[ 3,  4,  5,  6],\n",[29,100021,100022],{"class":31,"line":10100},[29,100023,100024],{"class":103},"        [ 9, 10, 11, 12],\n",[29,100026,100027],{"class":31,"line":16779},[29,100028,100029],{"class":103},"        [15, 16, 17, 18],\n",[29,100031,100032],{"class":31,"line":16785},[29,100033,100034],{"class":103},"        [21, 22, 23, 24],\n",[29,100036,100037],{"class":31,"line":16808},[29,100038,100039],{"class":103},"        [27, 28, 29, 30],\n",[29,100041,100042],{"class":31,"line":16814},[29,100043,100044],{"class":103},"        [33, 34, 35, 36]])]\n",[29,100046,100047],{"class":31,"line":16837},[29,100048,94057],{"class":103},[29,100050,100051],{"class":31,"line":16851},[29,100052,100053],{"class":367},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[29,100055,100056,100059,100061],{"class":31,"line":16871},[29,100057,100058],{"class":309},"np.vsplit(aa,",[29,100060,380],{"class":39},[29,100062,316],{"class":309},[29,100064,100065],{"class":31,"line":16877},[29,100066,93693],{"class":367},[29,100068,100069],{"class":31,"line":16888},[29,100070,94057],{"class":103},[29,100072,100073],{"class":31,"line":16911},[29,100074,99713],{"class":103},[29,100076,100077],{"class":31,"line":16933},[29,100078,99718],{"class":103},[29,100080,100081],{"class":31,"line":16938},[29,100082,99723],{"class":103},[29,100084,100085],{"class":31,"line":16944},[29,100086,99728],{"class":103},[29,100088,100089],{"class":31,"line":16958},[29,100090,99733],{"class":103},[29,100092,100093],{"class":31,"line":16971},[29,100094,99738],{"class":103},[29,100096,100097],{"class":31,"line":16976},[29,100098,94057],{"class":103},[29,100100,100101,100104,100106],{"class":31,"line":16990},[29,100102,100103],{"class":309},"np.hsplit(aa,",[29,100105,380],{"class":39},[29,100107,316],{"class":309},[29,100109,100110],{"class":31,"line":16995},[29,100111,93693],{"class":367},[29,100113,100114],{"class":31,"line":17001},[29,100115,94057],{"class":103},[29,100117,100118],{"class":31,"line":17006},[29,100119,99833],{"class":103},[29,100121,100122],{"class":31,"line":17020},[29,100123,99838],{"class":103},[29,100125,100126],{"class":31,"line":17025},[29,100127,99843],{"class":103},[29,100129,100130],{"class":31,"line":17030},[29,100131,99848],{"class":103},[29,100133,100134],{"class":31,"line":17044},[29,100135,99853],{"class":103},[29,100137,100138],{"class":31,"line":17056},[29,100139,99858],{"class":103},[29,100141,100142],{"class":31,"line":17061},[29,100143,99863],{"class":103},[29,100145,100146],{"class":31,"line":17074},[29,100147,99868],{"class":103},[29,100149,100150],{"class":31,"line":17079},[29,100151,99873],{"class":103},[29,100153,100154],{"class":31,"line":17084},[29,100155,99878],{"class":103},[29,100157,100158],{"class":31,"line":17089},[29,100159,99883],{"class":103},[29,100161,100162],{"class":31,"line":17102},[29,100163,99888],{"class":103},[29,100165,100166],{"class":31,"line":17107},[29,100167,99893],{"class":103},[29,100169,100170],{"class":31,"line":32762},[29,100171,99898],{"class":103},[29,100173,100174],{"class":31,"line":32768},[29,100175,99903],{"class":103},[29,100177,100178],{"class":31,"line":32774},[29,100179,99908],{"class":103},[29,100181,100182],{"class":31,"line":32780},[29,100183,99913],{"class":103},[29,100185,100186],{"class":31,"line":32786},[29,100187,99918],{"class":103},[29,100189,100190],{"class":31,"line":32797},[29,100191,94057],{"class":103},[29,100193,100194,100197,100199,100201,100203],{"class":31,"line":32803},[29,100195,100196],{"class":309},"np.vsplit(aa,[",[29,100198,386],{"class":39},[29,100200,686],{"class":309},[29,100202,627],{"class":39},[29,100204,4832],{"class":309},[29,100206,100207],{"class":31,"line":32823},[29,100208,93693],{"class":367},[29,100210,100211],{"class":31,"line":32829},[29,100212,94057],{"class":103},[29,100214,100215],{"class":31,"line":32840},[29,100216,99713],{"class":103},[29,100218,100219],{"class":31,"line":32846},[29,100220,99718],{"class":103},[29,100222,100223],{"class":31,"line":32852},[29,100224,99723],{"class":103},[29,100226,100227],{"class":31,"line":32858},[29,100228,99785],{"class":103},[29,100230,100231],{"class":31,"line":32864},[29,100232,99790],{"class":103},[29,100234,100235],{"class":31,"line":32870},[29,100236,99795],{"class":103},[29,100238,100239],{"class":31,"line":32876},[29,100240,99743],{"class":103},[223,100242,100243],{},"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":24,"searchDepth":43,"depth":43,"links":100245},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99511,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100252,"title":100253,"body":100254,"description":230,"extension":231,"meta":100748,"navigation":233,"path":100749,"seo":100750,"stem":100751,"__hash__":100752},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100255,"toc":100739},[100256,100259,100262,100287,100291,100350,100402,100406,100408,100444,100498,100500,100538,100609,100613,100618,100622,100625,100658,100661,100665,100668,100671,100674,100677,100682,100686,100689,100692,100695,100698,100703,100707,100712,100715,100736],[10,100257,100253],{"id":100258},"_9数学函数",[171,100260,100261],{},"补充回顾：python的列表推导式",[19,100263,100265],{"className":30507,"code":100264,"language":30509,"meta":24,"style":24},"[1\u002Fi for i in a]\n",[26,100266,100267],{"__ignoreMap":24},[29,100268,100269,100271,100273,100275,100278,100280,100282,100284],{"class":31,"line":32},[29,100270,1198],{"class":309},[29,100272,525],{"class":39},[29,100274,892],{"class":305},[29,100276,100277],{"class":309},"i ",[29,100279,3200],{"class":305},[29,100281,9613],{"class":309},[29,100283,26172],{"class":305},[29,100285,100286],{"class":309}," a]\n",[14,100288,100290],{"id":100289},"_91-求倒数","9.1 求倒数",[19,100292,100294],{"className":30507,"code":100293,"language":30509,"meta":24,"style":24},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[26,100295,100296,100301,100329,100341],{"__ignoreMap":24},[29,100297,100298],{"class":31,"line":32},[29,100299,100300],{"class":367},"#数组求倒数\n",[29,100302,100303,100305,100307,100309,100311,100313,100315,100317,100319,100321,100323,100325,100327],{"class":31,"line":43},[29,100304,546],{"class":309},[29,100306,355],{"class":305},[29,100308,1198],{"class":309},[29,100310,525],{"class":39},[29,100312,686],{"class":309},[29,100314,386],{"class":39},[29,100316,686],{"class":309},[29,100318,380],{"class":39},[29,100320,686],{"class":309},[29,100322,601],{"class":39},[29,100324,686],{"class":309},[29,100326,627],{"class":39},[29,100328,33375],{"class":309},[29,100330,100331,100333,100335,100338],{"class":31,"line":51},[29,100332,571],{"class":309},[29,100334,355],{"class":305},[29,100336,100337],{"class":309},"np.array(a)",[29,100339,100340],{"class":367},"#将列表转换为数组\n",[29,100342,100343,100345,100347],{"class":31,"line":59},[29,100344,525],{"class":39},[29,100346,892],{"class":305},[29,100348,100349],{"class":309},"b\n",[19,100351,100353],{"className":30507,"code":100352,"language":30509,"meta":24,"style":24},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[26,100354,100355,100383,100392,100397],{"__ignoreMap":24},[29,100356,100357,100359,100361,100363,100365,100367,100369,100371,100373,100375,100377,100379,100381],{"class":31,"line":32},[29,100358,546],{"class":309},[29,100360,355],{"class":305},[29,100362,1198],{"class":309},[29,100364,525],{"class":39},[29,100366,686],{"class":309},[29,100368,386],{"class":39},[29,100370,686],{"class":309},[29,100372,380],{"class":39},[29,100374,686],{"class":309},[29,100376,601],{"class":39},[29,100378,686],{"class":309},[29,100380,627],{"class":39},[29,100382,33375],{"class":309},[29,100384,100385,100387,100389],{"class":31,"line":43},[29,100386,571],{"class":309},[29,100388,355],{"class":305},[29,100390,100391],{"class":309},"np.array(a)\n",[29,100393,100394],{"class":31,"line":51},[29,100395,100396],{"class":367},"#调用numpy中的函数reciprocal()\n",[29,100398,100399],{"class":31,"line":59},[29,100400,100401],{"class":309},"np.reciprocal(b)\n",[14,100403,100405],{"id":100404},"_92-求平方","9.2 求平方",[171,100407,94659],{},[19,100409,100411],{"className":30507,"code":100410,"language":30509,"meta":24,"style":24},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[26,100412,100413,100418,100423,100439],{"__ignoreMap":24},[29,100414,100415],{"class":31,"line":32},[29,100416,100417],{"class":367},"#square()，求平方\n",[29,100419,100420],{"class":31,"line":43},[29,100421,100422],{"class":367},"#一维数组\n",[29,100424,100425,100427,100429,100431,100433,100435,100437],{"class":31,"line":51},[29,100426,546],{"class":309},[29,100428,355],{"class":305},[29,100430,93131],{"class":309},[29,100432,525],{"class":39},[29,100434,686],{"class":309},[29,100436,754],{"class":39},[29,100438,316],{"class":309},[29,100440,100441],{"class":31,"line":59},[29,100442,100443],{"class":309},"np.square(a)\n",[19,100445,100447],{"className":30507,"code":100446,"language":30509,"meta":24,"style":24},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[26,100448,100449,100454,100459,100480],{"__ignoreMap":24},[29,100450,100451],{"class":31,"line":32},[29,100452,100453],{"class":367},"#或者通过循环遍历的形式来计算\n",[29,100455,100456],{"class":31,"line":43},[29,100457,100458],{"class":367},"#这是一个列表\n",[29,100460,100461,100464,100466,100468,100470,100472,100474,100477],{"class":31,"line":51},[29,100462,100463],{"class":309},"[i",[29,100465,763],{"class":305},[29,100467,100277],{"class":309},[29,100469,3200],{"class":305},[29,100471,9613],{"class":309},[29,100473,26172],{"class":305},[29,100475,100476],{"class":309}," a]",[29,100478,100479],{"class":367},"#这个求完之后在数列当中\n",[29,100481,100482,100485,100487,100489,100491,100493,100495],{"class":31,"line":59},[29,100483,100484],{"class":309},"np.array([i",[29,100486,763],{"class":305},[29,100488,100277],{"class":309},[29,100490,3200],{"class":305},[29,100492,9613],{"class":309},[29,100494,26172],{"class":305},[29,100496,100497],{"class":309}," a])\n",[171,100499,93420],{},[19,100501,100503],{"className":30507,"code":100502,"language":30509,"meta":24,"style":24},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[26,100504,100505,100509,100533],{"__ignoreMap":24},[29,100506,100507],{"class":31,"line":32},[29,100508,93430],{"class":367},[29,100510,100511,100513,100515,100517,100519,100521,100523,100525,100527,100529,100531],{"class":31,"line":43},[29,100512,93435],{"class":309},[29,100514,355],{"class":305},[29,100516,93131],{"class":309},[29,100518,525],{"class":39},[29,100520,686],{"class":309},[29,100522,831],{"class":39},[29,100524,93136],{"class":309},[29,100526,601],{"class":39},[29,100528,686],{"class":309},[29,100530,380],{"class":39},[29,100532,316],{"class":309},[29,100534,100535],{"class":31,"line":51},[29,100536,100537],{"class":309},"np.square(aa)\n",[19,100539,100541],{"className":30507,"code":100540,"language":30509,"meta":24,"style":24},"#传统的方式\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",[26,100542,100543,100548,100557,100573,100589,100604],{"__ignoreMap":24},[29,100544,100545],{"class":31,"line":32},[29,100546,100547],{"class":367},"#传统的方式\n",[29,100549,100550,100552,100554],{"class":31,"line":43},[29,100551,98316],{"class":309},[29,100553,355],{"class":305},[29,100555,100556],{"class":309},"np.empty_like(aa)\n",[29,100558,100559,100561,100563,100565,100567,100569,100571],{"class":31,"line":51},[29,100560,3200],{"class":305},[29,100562,9613],{"class":309},[29,100564,26172],{"class":305},[29,100566,32572],{"class":39},[29,100568,310],{"class":309},[29,100570,601],{"class":39},[29,100572,30915],{"class":309},[29,100574,100575,100577,100579,100581,100583,100585,100587],{"class":31,"line":59},[29,100576,3376],{"class":305},[29,100578,9675],{"class":309},[29,100580,26172],{"class":305},[29,100582,32572],{"class":39},[29,100584,310],{"class":309},[29,100586,380],{"class":39},[29,100588,30915],{"class":309},[29,100590,100591,100594,100596,100599,100601],{"class":31,"line":67},[29,100592,100593],{"class":309},"        bb[i,j]",[29,100595,355],{"class":305},[29,100597,100598],{"class":309},"aa[i,j]",[29,100600,763],{"class":305},[29,100602,100603],{"class":309},"aa[i,j]\n",[29,100605,100606],{"class":31,"line":75},[29,100607,100608],{"class":309},"bb\n",[14,100610,100612],{"id":100611},"_93-求各元素的符号","9.3 求各元素的符号",[171,100614,100615],{},[1638,100616],{"alt":24,"src":100617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100619,100621],{"id":100620},"_94-modf函数","9.4 modf函数",[171,100623,100624],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[19,100626,100628],{"className":30507,"code":100627,"language":30509,"meta":24,"style":24},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[26,100629,100630,100653],{"__ignoreMap":24},[29,100631,100632,100634,100636,100638,100640,100642,100644,100646,100648,100651],{"class":31,"line":32},[29,100633,546],{"class":309},[29,100635,355],{"class":305},[29,100637,93131],{"class":309},[29,100639,840],{"class":305},[29,100641,754],{"class":39},[29,100643,686],{"class":309},[29,100645,754],{"class":39},[29,100647,686],{"class":309},[29,100649,100650],{"class":39},"0.3",[29,100652,316],{"class":309},[29,100654,100655],{"class":31,"line":43},[29,100656,100657],{"class":309},"np.modf(a)\n",[171,100659,100660],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100662,100664],{"id":100663},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[171,100666,100667],{},"np.cell()",[171,100669,100670],{},"np.floor()",[171,100672,100673],{},"np.rint()",[171,100675,100676],{},"对各元素分别向上取整、向下取整、四舍五入",[171,100678,100679],{},[1638,100680],{"alt":24,"src":100681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100683,100685],{"id":100684},"_96-around函数","9.6 around()函数",[171,100687,100688],{},"around()函数也可以实现对数的小数位数进行操作",[171,100690,100691],{},"其中的参数：",[171,100693,100694],{},"1.要传的数组",[171,100696,100697],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[171,100699,100700],{},[1638,100701],{"alt":24,"src":100702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100704,100706],{"id":100705},"_97-三角函数","9.7 三角函数",[171,100708,100709],{},[1638,100710],{"alt":24,"src":100711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[171,100713,100714],{},"引入图像模块非常重要",[19,100716,100718],{"className":30507,"code":100717,"language":30509,"meta":24,"style":24},"from matplotlib import pyplot as plt\n",[26,100719,100720],{"__ignoreMap":24},[29,100721,100722,100724,100727,100729,100732,100734],{"class":31,"line":32},[29,100723,30866],{"class":305},[29,100725,100726],{"class":309}," matplotlib ",[29,100728,30521],{"class":305},[29,100730,100731],{"class":309}," pyplot ",[29,100733,31512],{"class":305},[29,100735,31566],{"class":309},[223,100737,100738],{},"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":24,"searchDepth":43,"depth":43,"links":100740},[100741,100742,100743,100744,100745,100746,100747],{"id":100289,"depth":43,"text":100290},{"id":100404,"depth":43,"text":100405},{"id":100611,"depth":43,"text":100612},{"id":100620,"depth":43,"text":100621},{"id":100663,"depth":43,"text":100664},{"id":100684,"depth":43,"text":100685},{"id":100705,"depth":43,"text":100706},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100253,"description":230},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100754,"title":100755,"body":100756,"description":230,"extension":231,"meta":100760,"navigation":233,"path":100761,"seo":100762,"stem":100763,"__hash__":100764},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100757,"toc":100758},[],{"title":24,"searchDepth":43,"depth":43,"links":100759},[],{"category":50549},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100755,"description":230},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100766,"title":100767,"body":100768,"description":24,"extension":231,"meta":102776,"navigation":233,"path":102777,"seo":102778,"stem":102779,"__hash__":102780},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100769,"toc":102752},[100770,100773,100777,100780,100783,100789,100792,100815,100818,100852,100855,100896,100900,100903,100996,100999,101043,101046,101063,101066,101080,101083,101086,101131,101134,101171,101175,101178,101184,101189,101209,101213,101216,101282,101285,101303,101307,101310,101339,101349,101355,101359,101362,101368,101379,101383,101386,101416,101419,101699,101702,101705,101716,101719,101722,101744,101751,101754,101772,101775,101778,101792,101800,101803,101829,101835,101838,101841,101851,101863,101883,101892,101912,101922,101946,101959,101973,101978,102019,102036,102061,102073,102093,102099,102144,102163,102180,102193,102209,102216,102228,102237,102272,102293,102318,102331,102355,102370,102395,102398,102419,102428,102431,102442,102446,102449,102455,102467,102474,102478,102481,102493,102496,102510,102513,102523,102533,102536,102576,102579,102583,102589,102592,102606,102610,102613,102646,102650,102653,102676,102684,102687,102693,102699,102702,102705,102733,102737,102740,102746,102749],[10,100771,100767],{"id":100772},"_1环境安装与第一个-mujoco-程序",[14,100774,100776],{"id":100775},"_1目标说明","1.目标说明",[171,100778,100779],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[171,100781,100782],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[19,100784,100787],{"className":100785,"code":100786,"language":5362,"meta":24},[5360],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[26,100788,100786],{"__ignoreMap":24},[171,100790,100791],{},"需要掌握:",[259,100793,100794,100797,100800,100805,100810],{},[178,100795,100796],{},"Fedora 44 下 MuJoCo 的系统依赖",[178,100798,100799],{},"Python 虚拟环境创建",[178,100801,100802],{},[26,100803,100804],{},"mujoco.MjModel",[178,100806,100807],{},[26,100808,100809],{},"mujoco.MjData",[178,100811,100812],{},[26,100813,100814],{},"mujoco.mj_step(model, data)",[171,100816,100817],{},"MuJoCo 中最重要的两个对象:",[445,100819,100820,100830],{},[448,100821,100822],{},[451,100823,100824,100827],{},[454,100825,100826],{"align":23911},"对象",[454,100828,100829],{"align":23911},"含义",[492,100831,100832,100842],{},[451,100833,100834,100839],{},[497,100835,100836],{"align":23911},[26,100837,100838],{},"MjModel",[497,100840,100841],{"align":23911},"模型结构，来自 XML，基本不随时间变化",[451,100843,100844,100849],{},[497,100845,100846],{"align":23911},[26,100847,100848],{},"MjData",[497,100850,100851],{"align":23911},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[171,100853,100854],{},"可以先用一个类比理解：",[445,100856,100857,100867],{},[448,100858,100859],{},[451,100860,100861,100864],{},[454,100862,100863],{"align":23911},"类比",[454,100865,100866],{"align":23911},"MuJoCo 对象",[492,100868,100869,100878,100887],{},[451,100870,100871,100874],{},[497,100872,100873],{"align":23911},"游戏地图和角色配置",[497,100875,100876],{"align":23911},[26,100877,100838],{},[451,100879,100880,100883],{},[497,100881,100882],{"align":23911},"游戏运行到当前帧的状态",[497,100884,100885],{"align":23911},[26,100886,100848],{},[451,100888,100889,100892],{},[497,100890,100891],{"align":23911},"前进一帧",[497,100893,100894],{"align":23911},[26,100895,100814],{},[14,100897,100899],{"id":100898},"_2环境与依赖安装","2.环境与依赖安装",[171,100901,100902],{},"Fedora 44 系统依赖:",[19,100904,100906],{"className":21,"code":100905,"language":23,"meta":24,"style":24},"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",[26,100907,100908,100920,100933,100946,100956,100966,100985],{"__ignoreMap":24},[29,100909,100910,100912,100914,100916,100918],{"class":31,"line":32},[29,100911,24749],{"class":35},[29,100913,26444],{"class":103},[29,100915,24007],{"class":103},[29,100917,26529],{"class":39},[29,100919,40],{"class":39},[29,100921,100922,100925,100928,100931],{"class":31,"line":43},[29,100923,100924],{"class":103},"  python3",[29,100926,100927],{"class":103}," python3-pip",[29,100929,100930],{"class":103}," python3-virtualenv",[29,100932,40],{"class":39},[29,100934,100935,100938,100941,100944],{"class":31,"line":51},[29,100936,100937],{"class":103},"  mesa-libGL",[29,100939,100940],{"class":103}," mesa-libGLU",[29,100942,100943],{"class":103}," mesa-dri-drivers",[29,100945,40],{"class":39},[29,100947,100948,100951,100954],{"class":31,"line":59},[29,100949,100950],{"class":103},"  libglvnd-glx",[29,100952,100953],{"class":103}," libglvnd-opengl",[29,100955,40],{"class":39},[29,100957,100958,100961,100964],{"class":31,"line":67},[29,100959,100960],{"class":103},"  glfw",[29,100962,100963],{"class":103}," glfw-devel",[29,100965,40],{"class":39},[29,100967,100968,100971,100974,100977,100980,100983],{"class":31,"line":75},[29,100969,100970],{"class":103},"  libX11",[29,100972,100973],{"class":103}," libXcursor",[29,100975,100976],{"class":103}," libXi",[29,100978,100979],{"class":103}," libXinerama",[29,100981,100982],{"class":103}," libXrandr",[29,100984,40],{"class":39},[29,100986,100987,100990,100993],{"class":31,"line":83},[29,100988,100989],{"class":103},"  gcc",[29,100991,100992],{"class":103}," gcc-c++",[29,100994,100995],{"class":103}," make\n",[171,100997,100998],{},"创建 Python 环境:",[19,101000,101002],{"className":21,"code":101001,"language":23,"meta":24,"style":24},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[26,101003,101004,101018,101026],{"__ignoreMap":24},[29,101005,101006,101009,101012,101015],{"class":31,"line":32},[29,101007,101008],{"class":35},"python3",[29,101010,101011],{"class":39}," -m",[29,101013,101014],{"class":103}," venv",[29,101016,101017],{"class":103}," .venv\n",[29,101019,101020,101023],{"class":31,"line":43},[29,101021,101022],{"class":39},"source",[29,101024,101025],{"class":103}," .venv\u002Fbin\u002Factivate\n",[29,101027,101028,101030,101032,101035,101037,101040],{"class":31,"line":51},[29,101029,30509],{"class":35},[29,101031,101011],{"class":39},[29,101033,101034],{"class":103}," pip",[29,101036,24007],{"class":103},[29,101038,101039],{"class":39}," --upgrade",[29,101041,101042],{"class":103}," pip\n",[171,101044,101045],{},"pip 安装:",[19,101047,101049],{"className":21,"code":101048,"language":23,"meta":24,"style":24},"pip install \"mujoco>=2.3\" numpy\n",[26,101050,101051],{"__ignoreMap":24},[29,101052,101053,101055,101057,101060],{"class":31,"line":32},[29,101054,24004],{"class":35},[29,101056,24007],{"class":103},[29,101058,101059],{"class":103}," \"mujoco>=2.3\"",[29,101061,101062],{"class":103}," numpy\n",[171,101064,101065],{},"安装完成后，先做最小检查：",[19,101067,101069],{"className":21,"code":101068,"language":23,"meta":24,"style":24},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[26,101070,101071],{"__ignoreMap":24},[29,101072,101073,101075,101077],{"class":31,"line":32},[29,101074,30509],{"class":35},[29,101076,30487],{"class":39},[29,101078,101079],{"class":103}," \"import mujoco; print(mujoco.__version__)\"\n",[171,101081,101082],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[171,101084,101085],{},"conda 安装:",[19,101087,101089],{"className":21,"code":101088,"language":23,"meta":24,"style":24},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[26,101090,101091,101111,101121],{"__ignoreMap":24},[29,101092,101093,101095,101097,101099,101102,101105,101108],{"class":31,"line":32},[29,101094,30459],{"class":35},[29,101096,29305],{"class":103},[29,101098,25244],{"class":39},[29,101100,101101],{"class":103}," mujoco-study",[29,101103,101104],{"class":103}," python=",[29,101106,101107],{"class":39},"3.10",[29,101109,101110],{"class":39}," -y\n",[29,101112,101113,101115,101118],{"class":31,"line":43},[29,101114,30459],{"class":35},[29,101116,101117],{"class":103}," activate",[29,101119,101120],{"class":103}," mujoco-study\n",[29,101122,101123,101125,101127,101129],{"class":31,"line":51},[29,101124,24004],{"class":35},[29,101126,24007],{"class":103},[29,101128,101059],{"class":103},[29,101130,101062],{"class":103},[171,101132,101133],{},"版本冲突说明:",[259,101135,101136,101142,101152,101161],{},[178,101137,101138,101139,28514],{},"不要安装 ",[26,101140,101141],{},"mujoco-py",[178,101143,101144,101145,101147,101148,101151],{},"如果旧项目里同时安装了 ",[26,101146,101141],{}," 和 ",[26,101149,101150],{},"mujoco","，建议新建干净虚拟环境。",[178,101153,101154,101157,101158,28514],{},[26,101155,101156],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[26,101159,101160],{},"~\u002F.mujoco\u002Fmujoco210",[178,101162,101163,101164,82668,101167,101170],{},"离屏渲染可能涉及 OpenGL 后端，",[26,101165,101166],{},"MUJOCO_GL=egl",[26,101168,101169],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101172,101174],{"id":101173},"_3核心概念解释","3.核心概念解释",[171,101176,101177],{},"MuJoCo 的基本执行流程:",[19,101179,101182],{"className":101180,"code":101181,"language":5362,"meta":24},[5360],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[26,101183,101181],{"__ignoreMap":24},[171,101185,101186,101188],{},[26,101187,100838],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[171,101190,101191,101193,101194,520,101197,520,101200,520,101203,520,101206,28514],{},[26,101192,100848],{}," 存放仿真运行时状态，例如 ",[26,101195,101196],{},"data.time",[26,101198,101199],{},"data.qpos",[26,101201,101202],{},"data.qvel",[26,101204,101205],{},"data.ctrl",[26,101207,101208],{},"data.xpos",[275,101210,101212],{"id":101211},"xml-是什么","XML 是什么",[171,101214,101215],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[19,101217,101219],{"className":53196,"code":101218,"language":53198,"meta":24,"style":24},"\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",[26,101220,101221,101243,101274],{"__ignoreMap":24},[29,101222,101223,101225,101227,101229,101231,101233,101236,101238,101241],{"class":31,"line":32},[29,101224,1218],{"class":309},[29,101226,51929],{"class":51429},[29,101228,15095],{"class":35},[29,101230,355],{"class":309},[29,101232,53620],{"class":103},[29,101234,101235],{"class":35}," pos",[29,101237,355],{"class":309},[29,101239,101240],{"class":103},"\"0 0 1\"",[29,101242,51436],{"class":309},[29,101244,101245,101247,101250,101252,101254,101257,101259,101261,101263,101266,101268,101271],{"class":31,"line":43},[29,101246,52273],{"class":309},[29,101248,101249],{"class":51429},"geom",[29,101251,15095],{"class":35},[29,101253,355],{"class":309},[29,101255,101256],{"class":103},"\"box_geom\"",[29,101258,53953],{"class":35},[29,101260,355],{"class":309},[29,101262,53620],{"class":103},[29,101264,101265],{"class":35}," size",[29,101267,355],{"class":309},[29,101269,101270],{"class":103},"\"0.1 0.1 0.1\"",[29,101272,101273],{"class":309},"\u002F>\n",[29,101275,101276,101278,101280],{"class":31,"line":51},[29,101277,51914],{"class":309},[29,101279,51929],{"class":51429},[29,101281,51436],{"class":309},[171,101283,101284],{},"这段意思是：",[259,101286,101287,101293,101300],{},[178,101288,101289,101290,101292],{},"创建一个叫 ",[26,101291,53843],{}," 的刚体。",[178,101294,101295,101296,101299],{},"它初始放在 ",[26,101297,101298],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[178,101301,101302],{},"它里面有一个盒子形状的几何体。",[275,101304,101306],{"id":101305},"timestep-是什么","timestep 是什么",[171,101308,101309],{},"XML 里的：",[19,101311,101313],{"className":53196,"code":101312,"language":53198,"meta":24,"style":24},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[26,101314,101315],{"__ignoreMap":24},[29,101316,101317,101319,101321,101324,101326,101329,101332,101334,101337],{"class":31,"line":32},[29,101318,1218],{"class":309},[29,101320,69295],{"class":51429},[29,101322,101323],{"class":35}," timestep",[29,101325,355],{"class":309},[29,101327,101328],{"class":103},"\"0.01\"",[29,101330,101331],{"class":35}," gravity",[29,101333,355],{"class":309},[29,101335,101336],{"class":103},"\"0 0 -9.81\"",[29,101338,101273],{"class":309},[171,101340,101341,101342,101345,101346,101348],{},"表示每调用一次 ",[26,101343,101344],{},"mj_step","，仿真时间前进 ",[26,101347,39115],{}," 秒。循环 100 次，大约就是 1 秒：",[19,101350,101353],{"className":101351,"code":101352,"language":5362,"meta":24},[5360],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[26,101354,101352],{"__ignoreMap":24},[275,101356,101358],{"id":101357},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[171,101360,101361],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[19,101363,101366],{"className":101364,"code":101365,"language":5362,"meta":24},[5360],"x y z qw qx qy qz\n",[26,101367,101365],{"__ignoreMap":24},[171,101369,101370,101371,101374,101375,101378],{},"表示一个自由刚体的位置和姿态。其中 ",[26,101372,101373],{},"x y z"," 是位置，",[26,101376,101377],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101380,101382],{"id":101381},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[171,101384,101385],{},"新建文件:",[19,101387,101389],{"className":21,"code":101388,"language":23,"meta":24,"style":24},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[26,101390,101391,101401,101408],{"__ignoreMap":24},[29,101392,101393,101396,101398],{"class":31,"line":32},[29,101394,101395],{"class":35},"mkdir",[29,101397,29345],{"class":39},[29,101399,101400],{"class":103}," mujoco_tutorial\n",[29,101402,101403,101406],{"class":31,"line":43},[29,101404,101405],{"class":39},"cd",[29,101407,101400],{"class":103},[29,101409,101410,101413],{"class":31,"line":51},[29,101411,101412],{"class":35},"touch",[29,101414,101415],{"class":103}," ch1_first_sim.py\n",[171,101417,101418],{},"写入:",[19,101420,101422],{"className":30507,"code":101421,"language":30509,"meta":24,"style":24},"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",[26,101423,101424,101431,101435,101439,101449,101454,101459,101463,101468,101473,101477,101482,101487,101492,101497,101502,101507,101511,101515,101519,101532,101546,101556,101560,101572,101584,101596,101608,101620,101624,101641,101646,101650,101661,101672,101676,101680,101694],{"__ignoreMap":24},[29,101425,101426,101428],{"class":31,"line":32},[29,101427,30521],{"class":305},[29,101429,101430],{"class":309}," mujoco\n",[29,101432,101433],{"class":31,"line":43},[29,101434,2575],{"emptyLinePlaceholder":233},[29,101436,101437],{"class":31,"line":51},[29,101438,2575],{"emptyLinePlaceholder":233},[29,101440,101441,101444,101446],{"class":31,"line":59},[29,101442,101443],{"class":39},"XML",[29,101445,13739],{"class":305},[29,101447,101448],{"class":103}," \"\"\"\n",[29,101450,101451],{"class":31,"line":67},[29,101452,101453],{"class":103},"\u003Cmujoco model=\"first_sim\">\n",[29,101455,101456],{"class":31,"line":75},[29,101457,101458],{"class":103},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[29,101460,101461],{"class":31,"line":83},[29,101462,2575],{"emptyLinePlaceholder":233},[29,101464,101465],{"class":31,"line":158},[29,101466,101467],{"class":103},"  \u003Cworldbody>\n",[29,101469,101470],{"class":31,"line":166},[29,101471,101472],{"class":103},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[29,101474,101475],{"class":31,"line":1505},[29,101476,2575],{"emptyLinePlaceholder":233},[29,101478,101479],{"class":31,"line":1788},[29,101480,101481],{"class":103},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[29,101483,101484],{"class":31,"line":1793},[29,101485,101486],{"class":103},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[29,101488,101489],{"class":31,"line":1799},[29,101490,101491],{"class":103},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[29,101493,101494],{"class":31,"line":1804},[29,101495,101496],{"class":103},"    \u003C\u002Fbody>\n",[29,101498,101499],{"class":31,"line":1818},[29,101500,101501],{"class":103},"  \u003C\u002Fworldbody>\n",[29,101503,101504],{"class":31,"line":1823},[29,101505,101506],{"class":103},"\u003C\u002Fmujoco>\n",[29,101508,101509],{"class":31,"line":1829},[29,101510,95827],{"class":103},[29,101512,101513],{"class":31,"line":1850},[29,101514,2575],{"emptyLinePlaceholder":233},[29,101516,101517],{"class":31,"line":1855},[29,101518,2575],{"emptyLinePlaceholder":233},[29,101520,101521,101523,101525,101528,101530],{"class":31,"line":1869},[29,101522,32076],{"class":305},[29,101524,2148],{"class":35},[29,101526,101527],{"class":309},"() -> ",[29,101529,95815],{"class":39},[29,101531,3914],{"class":309},[29,101533,101534,101537,101539,101542,101544],{"class":31,"line":1874},[29,101535,101536],{"class":309},"    model ",[29,101538,355],{"class":305},[29,101540,101541],{"class":309}," mujoco.MjModel.from_xml_string(",[29,101543,101443],{"class":39},[29,101545,316],{"class":309},[29,101547,101548,101551,101553],{"class":31,"line":1903},[29,101549,101550],{"class":309},"    data ",[29,101552,355],{"class":305},[29,101554,101555],{"class":309}," mujoco.MjData(model)\n",[29,101557,101558],{"class":31,"line":1908},[29,101559,2575],{"emptyLinePlaceholder":233},[29,101561,101562,101564,101566,101569],{"class":31,"line":1925},[29,101563,31428],{"class":39},[29,101565,310],{"class":309},[29,101567,101568],{"class":103},"\"nq:\"",[29,101570,101571],{"class":309},", model.nq)\n",[29,101573,101574,101576,101578,101581],{"class":31,"line":1930},[29,101575,31428],{"class":39},[29,101577,310],{"class":309},[29,101579,101580],{"class":103},"\"nv:\"",[29,101582,101583],{"class":309},", model.nv)\n",[29,101585,101586,101588,101590,101593],{"class":31,"line":1935},[29,101587,31428],{"class":39},[29,101589,310],{"class":309},[29,101591,101592],{"class":103},"\"nu:\"",[29,101594,101595],{"class":309},", model.nu)\n",[29,101597,101598,101600,101602,101605],{"class":31,"line":1940},[29,101599,31428],{"class":39},[29,101601,310],{"class":309},[29,101603,101604],{"class":103},"\"initial time:\"",[29,101606,101607],{"class":309},", data.time)\n",[29,101609,101610,101612,101614,101617],{"class":31,"line":1954},[29,101611,31428],{"class":39},[29,101613,310],{"class":309},[29,101615,101616],{"class":103},"\"initial qpos:\"",[29,101618,101619],{"class":309},", data.qpos.copy())\n",[29,101621,101622],{"class":31,"line":1959},[29,101623,2575],{"emptyLinePlaceholder":233},[29,101625,101626,101628,101631,101633,101635,101637,101639],{"class":31,"line":2752},[29,101627,3376],{"class":305},[29,101629,101630],{"class":309}," _ ",[29,101632,26172],{"class":305},[29,101634,32572],{"class":39},[29,101636,310],{"class":309},[29,101638,619],{"class":39},[29,101640,30915],{"class":309},[29,101642,101643],{"class":31,"line":2766},[29,101644,101645],{"class":309},"        mujoco.mj_step(model, data)\n",[29,101647,101648],{"class":31,"line":2774},[29,101649,2575],{"emptyLinePlaceholder":233},[29,101651,101652,101654,101656,101659],{"class":31,"line":2779},[29,101653,31428],{"class":39},[29,101655,310],{"class":309},[29,101657,101658],{"class":103},"\"final time:\"",[29,101660,101607],{"class":309},[29,101662,101663,101665,101667,101670],{"class":31,"line":2785},[29,101664,31428],{"class":39},[29,101666,310],{"class":309},[29,101668,101669],{"class":103},"\"final qpos:\"",[29,101671,101619],{"class":309},[29,101673,101674],{"class":31,"line":2791},[29,101675,2575],{"emptyLinePlaceholder":233},[29,101677,101678],{"class":31,"line":2796},[29,101679,2575],{"emptyLinePlaceholder":233},[29,101681,101682,101684,101686,101689,101692],{"class":31,"line":8123},[29,101683,1707],{"class":305},[29,101685,31349],{"class":39},[29,101687,101688],{"class":305}," ==",[29,101690,101691],{"class":103}," \"__main__\"",[29,101693,3914],{"class":309},[29,101695,101696],{"class":31,"line":8147},[29,101697,101698],{"class":309},"    main()\n",[275,101700,101701],{"id":101701},"代码逐段解释",[171,101703,101704],{},"导入库：",[19,101706,101708],{"className":30507,"code":101707,"language":30509,"meta":24,"style":24},"import mujoco\n",[26,101709,101710],{"__ignoreMap":24},[29,101711,101712,101714],{"class":31,"line":32},[29,101713,30521],{"class":305},[29,101715,101430],{"class":309},[171,101717,101718],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[171,101720,101721],{},"定义 XML：",[19,101723,101725],{"className":30507,"code":101724,"language":30509,"meta":24,"style":24},"XML = \"\"\"\n...\n\"\"\"\n",[26,101726,101727,101735,101740],{"__ignoreMap":24},[29,101728,101729,101731,101733],{"class":31,"line":32},[29,101730,101443],{"class":39},[29,101732,13739],{"class":305},[29,101734,101448],{"class":103},[29,101736,101737],{"class":31,"line":43},[29,101738,101739],{"class":103},"...\n",[29,101741,101742],{"class":31,"line":51},[29,101743,95827],{"class":103},[171,101745,101746,101747,101750],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[26,101748,101749],{},"freejoint"," 的方块。",[171,101752,101753],{},"编译模型：",[19,101755,101757],{"className":30507,"code":101756,"language":30509,"meta":24,"style":24},"model = mujoco.MjModel.from_xml_string(XML)\n",[26,101758,101759],{"__ignoreMap":24},[29,101760,101761,101764,101766,101768,101770],{"class":31,"line":32},[29,101762,101763],{"class":309},"model ",[29,101765,355],{"class":305},[29,101767,101541],{"class":309},[29,101769,101443],{"class":39},[29,101771,316],{"class":309},[171,101773,101774],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[171,101776,101777],{},"创建数据：",[19,101779,101781],{"className":30507,"code":101780,"language":30509,"meta":24,"style":24},"data = mujoco.MjData(model)\n",[26,101782,101783],{"__ignoreMap":24},[29,101784,101785,101788,101790],{"class":31,"line":32},[29,101786,101787],{"class":309},"data ",[29,101789,355],{"class":305},[29,101791,101555],{"class":309},[171,101793,101794,101796,101797,101799],{},[26,101795,33530],{}," 会保存仿真当前状态。刚创建时，时间是 ",[26,101798,499],{},"，方块还在初始位置。",[171,101801,101802],{},"推进仿真：",[19,101804,101806],{"className":30507,"code":101805,"language":30509,"meta":24,"style":24},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[26,101807,101808,101824],{"__ignoreMap":24},[29,101809,101810,101812,101814,101816,101818,101820,101822],{"class":31,"line":32},[29,101811,3200],{"class":305},[29,101813,101630],{"class":309},[29,101815,26172],{"class":305},[29,101817,32572],{"class":39},[29,101819,310],{"class":309},[29,101821,619],{"class":39},[29,101823,30915],{"class":309},[29,101825,101826],{"class":31,"line":43},[29,101827,101828],{"class":309},"    mujoco.mj_step(model, data)\n",[171,101830,101831,101832,101834],{},"每次 ",[26,101833,101344],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[275,101836,101837],{"id":101837},"代码逐行细讲",[171,101839,101840],{},"下面把完整代码按新手视角拆开讲。",[19,101842,101843],{"className":30507,"code":101707,"language":30509,"meta":24,"style":24},[26,101844,101845],{"__ignoreMap":24},[29,101846,101847,101849],{"class":31,"line":32},[29,101848,30521],{"class":305},[29,101850,101430],{"class":309},[171,101852,101853,101855,101856,520,101858,520,101860,28514],{},[26,101854,30521],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[26,101857,100804],{},[26,101859,100809],{},[26,101861,101862],{},"mujoco.mj_step",[19,101864,101865],{"className":30507,"code":101724,"language":30509,"meta":24,"style":24},[26,101866,101867,101875,101879],{"__ignoreMap":24},[29,101868,101869,101871,101873],{"class":31,"line":32},[29,101870,101443],{"class":39},[29,101872,13739],{"class":305},[29,101874,101448],{"class":103},[29,101876,101877],{"class":31,"line":43},[29,101878,101739],{"class":103},[29,101880,101881],{"class":31,"line":51},[29,101882,95827],{"class":103},[171,101884,101885,101887,101888,101891],{},[26,101886,101443],{}," 是一个变量名。右边的三引号 ",[26,101889,101890],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[19,101893,101894],{"className":53196,"code":101453,"language":53198,"meta":24,"style":24},[26,101895,101896],{"__ignoreMap":24},[29,101897,101898,101900,101902,101905,101907,101910],{"class":31,"line":32},[29,101899,1218],{"class":309},[29,101901,101150],{"class":51429},[29,101903,101904],{"class":35}," model",[29,101906,355],{"class":309},[29,101908,101909],{"class":103},"\"first_sim\"",[29,101911,51436],{"class":309},[171,101913,101914,101915,101918,101919,28514],{},"这是 XML 的根标签。",[26,101916,101917],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[26,101920,101921],{},"first_sim",[19,101923,101924],{"className":53196,"code":101312,"language":53198,"meta":24,"style":24},[26,101925,101926],{"__ignoreMap":24},[29,101927,101928,101930,101932,101934,101936,101938,101940,101942,101944],{"class":31,"line":32},[29,101929,1218],{"class":309},[29,101931,69295],{"class":51429},[29,101933,101323],{"class":35},[29,101935,355],{"class":309},[29,101937,101328],{"class":103},[29,101939,101331],{"class":35},[29,101941,355],{"class":309},[29,101943,101336],{"class":103},[29,101945,101273],{"class":309},[171,101947,101948,101950,101951,101954,101955,101958],{},[26,101949,69295],{}," 用来设置仿真参数。",[26,101952,101953],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[26,101956,101957],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[19,101960,101962],{"className":53196,"code":101961,"language":53198,"meta":24,"style":24},"\u003Cworldbody>\n",[26,101963,101964],{"__ignoreMap":24},[29,101965,101966,101968,101971],{"class":31,"line":32},[29,101967,1218],{"class":309},[29,101969,101970],{"class":51429},"worldbody",[29,101972,51436],{"class":309},[171,101974,101975,101977],{},[26,101976,101970],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[19,101979,101981],{"className":53196,"code":101980,"language":53198,"meta":24,"style":24},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[26,101982,101983],{"__ignoreMap":24},[29,101984,101985,101987,101989,101991,101993,101996,101998,102000,102003,102005,102007,102010,102012,102014,102017],{"class":31,"line":32},[29,101986,1218],{"class":309},[29,101988,101249],{"class":51429},[29,101990,15095],{"class":35},[29,101992,355],{"class":309},[29,101994,101995],{"class":103},"\"floor\"",[29,101997,53953],{"class":35},[29,101999,355],{"class":309},[29,102001,102002],{"class":103},"\"plane\"",[29,102004,101265],{"class":35},[29,102006,355],{"class":309},[29,102008,102009],{"class":103},"\"2 2 0.1\"",[29,102011,78896],{"class":35},[29,102013,355],{"class":309},[29,102015,102016],{"class":103},"\"0.8 0.8 0.8 1\"",[29,102018,101273],{"class":309},[171,102020,102021,102022,102024,102025,102028,102029,102032,102033,102035],{},"这行创建地面。",[26,102023,101249],{}," 是几何体。",[26,102026,102027],{},"name=\"floor\""," 是名字。",[26,102030,102031],{},"type=\"plane\""," 表示平面。",[26,102034,55239],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[19,102037,102039],{"className":53196,"code":102038,"language":53198,"meta":24,"style":24},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[26,102040,102041],{"__ignoreMap":24},[29,102042,102043,102045,102047,102049,102051,102053,102055,102057,102059],{"class":31,"line":32},[29,102044,1218],{"class":309},[29,102046,51929],{"class":51429},[29,102048,15095],{"class":35},[29,102050,355],{"class":309},[29,102052,53620],{"class":103},[29,102054,101235],{"class":35},[29,102056,355],{"class":309},[29,102058,101240],{"class":103},[29,102060,51436],{"class":309},[171,102062,102063,102064,28514,102066,102069,102070,102072],{},"这行创建一个刚体，名字叫 ",[26,102065,53843],{},[26,102067,102068],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[26,102071,101298],{},"，也就是离地面 1 米高。",[19,102074,102076],{"className":53196,"code":102075,"language":53198,"meta":24,"style":24},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[26,102077,102078],{"__ignoreMap":24},[29,102079,102080,102082,102084,102086,102088,102091],{"class":31,"line":32},[29,102081,1218],{"class":309},[29,102083,101749],{"class":51429},[29,102085,15095],{"class":35},[29,102087,355],{"class":309},[29,102089,102090],{"class":103},"\"box_free\"",[29,102092,101273],{"class":309},[171,102094,102095,102096,102098],{},"这行很重要。",[26,102097,101749],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[19,102100,102102],{"className":53196,"code":102101,"language":53198,"meta":24,"style":24},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[26,102103,102104],{"__ignoreMap":24},[29,102105,102106,102108,102110,102112,102114,102116,102118,102120,102122,102124,102126,102128,102131,102133,102135,102137,102139,102142],{"class":31,"line":32},[29,102107,1218],{"class":309},[29,102109,101249],{"class":51429},[29,102111,15095],{"class":35},[29,102113,355],{"class":309},[29,102115,101256],{"class":103},[29,102117,53953],{"class":35},[29,102119,355],{"class":309},[29,102121,53620],{"class":103},[29,102123,101265],{"class":35},[29,102125,355],{"class":309},[29,102127,101270],{"class":103},[29,102129,102130],{"class":35}," mass",[29,102132,355],{"class":309},[29,102134,3853],{"class":103},[29,102136,78896],{"class":35},[29,102138,355],{"class":309},[29,102140,102141],{"class":103},"\"1 0 0 1\"",[29,102143,101273],{"class":309},[171,102145,102146,102147,102150,102151,102154,102155,102158,102159,102162],{},"这行给 box body 添加一个盒子形状。",[26,102148,102149],{},"type=\"box\""," 表示形状是盒子。",[26,102152,102153],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[26,102156,102157],{},"mass=\"1\""," 表示质量是 1。",[26,102160,102161],{},"rgba=\"1 0 0 1\""," 表示红色。",[19,102164,102166],{"className":30507,"code":102165,"language":30509,"meta":24,"style":24},"def main() -> None:\n",[26,102167,102168],{"__ignoreMap":24},[29,102169,102170,102172,102174,102176,102178],{"class":31,"line":32},[29,102171,32076],{"class":305},[29,102173,2148],{"class":35},[29,102175,101527],{"class":309},[29,102177,95815],{"class":39},[29,102179,3914],{"class":309},[171,102181,102182,102184,102185,102188,102189,102192],{},[26,102183,32076],{}," 用来定义函数。这里定义了一个叫 ",[26,102186,102187],{},"main"," 的函数。",[26,102190,102191],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[19,102194,102195],{"className":30507,"code":101756,"language":30509,"meta":24,"style":24},[26,102196,102197],{"__ignoreMap":24},[29,102198,102199,102201,102203,102205,102207],{"class":31,"line":32},[29,102200,101763],{"class":309},[29,102202,355],{"class":305},[29,102204,101541],{"class":309},[29,102206,101443],{"class":39},[29,102208,316],{"class":309},[171,102210,102211,102212,102215],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[26,102213,102214],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[19,102217,102218],{"className":30507,"code":101780,"language":30509,"meta":24,"style":24},[26,102219,102220],{"__ignoreMap":24},[29,102221,102222,102224,102226],{"class":31,"line":32},[29,102223,101787],{"class":309},[29,102225,355],{"class":305},[29,102227,101555],{"class":309},[171,102229,102230,102231,102233,102234,102236],{},"这行创建仿真数据。",[26,102232,33530],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[26,102235,33530],{}," 都会变化。",[19,102238,102240],{"className":30507,"code":102239,"language":30509,"meta":24,"style":24},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[26,102241,102242,102252,102262],{"__ignoreMap":24},[29,102243,102244,102246,102248,102250],{"class":31,"line":32},[29,102245,30544],{"class":39},[29,102247,310],{"class":309},[29,102249,101568],{"class":103},[29,102251,101571],{"class":309},[29,102253,102254,102256,102258,102260],{"class":31,"line":43},[29,102255,30544],{"class":39},[29,102257,310],{"class":309},[29,102259,101580],{"class":103},[29,102261,101583],{"class":309},[29,102263,102264,102266,102268,102270],{"class":31,"line":51},[29,102265,30544],{"class":39},[29,102267,310],{"class":309},[29,102269,101592],{"class":103},[29,102271,101595],{"class":309},[171,102273,102274,102276,102277,102280,102281,102284,102285,102288,102289,102292],{},[26,102275,30544],{}," 用来输出信息。",[26,102278,102279],{},"model.nq"," 是位置变量数量，",[26,102282,102283],{},"model.nv"," 是速度变量数量，",[26,102286,102287],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[26,102290,102291],{},"nu"," 是 0。",[19,102294,102296],{"className":30507,"code":102295,"language":30509,"meta":24,"style":24},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[26,102297,102298,102308],{"__ignoreMap":24},[29,102299,102300,102302,102304,102306],{"class":31,"line":32},[29,102301,30544],{"class":39},[29,102303,310],{"class":309},[29,102305,101604],{"class":103},[29,102307,101607],{"class":309},[29,102309,102310,102312,102314,102316],{"class":31,"line":43},[29,102311,30544],{"class":39},[29,102313,310],{"class":309},[29,102315,101616],{"class":103},[29,102317,101619],{"class":309},[171,102319,102320,102321,102323,102324,102326,102327,102330],{},"这里打印初始时间和初始位置。",[26,102322,101196],{}," 一开始是 0。",[26,102325,101199],{}," 是位置数组。",[26,102328,102329],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[19,102332,102333],{"className":30507,"code":101805,"language":30509,"meta":24,"style":24},[26,102334,102335,102351],{"__ignoreMap":24},[29,102336,102337,102339,102341,102343,102345,102347,102349],{"class":31,"line":32},[29,102338,3200],{"class":305},[29,102340,101630],{"class":309},[29,102342,26172],{"class":305},[29,102344,32572],{"class":39},[29,102346,310],{"class":309},[29,102348,619],{"class":39},[29,102350,30915],{"class":309},[29,102352,102353],{"class":31,"line":43},[29,102354,101828],{"class":309},[171,102356,102357,102359,102360,102363,102364,102366,102367,102369],{},[26,102358,3200],{}," 是循环。",[26,102361,102362],{},"range(100)"," 表示循环 100 次。",[26,102365,1300],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[26,102368,101344],{},"，仿真就前进一步。",[19,102371,102373],{"className":30507,"code":102372,"language":30509,"meta":24,"style":24},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[26,102374,102375,102385],{"__ignoreMap":24},[29,102376,102377,102379,102381,102383],{"class":31,"line":32},[29,102378,30544],{"class":39},[29,102380,310],{"class":309},[29,102382,101658],{"class":103},[29,102384,101607],{"class":309},[29,102386,102387,102389,102391,102393],{"class":31,"line":43},[29,102388,30544],{"class":39},[29,102390,310],{"class":309},[29,102392,101669],{"class":103},[29,102394,101619],{"class":309},[171,102396,102397],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[19,102399,102401],{"className":30507,"code":102400,"language":30509,"meta":24,"style":24},"if __name__ == \"__main__\":\n    main()\n",[26,102402,102403,102415],{"__ignoreMap":24},[29,102404,102405,102407,102409,102411,102413],{"class":31,"line":32},[29,102406,1707],{"class":305},[29,102408,31349],{"class":39},[29,102410,101688],{"class":305},[29,102412,101691],{"class":103},[29,102414,3914],{"class":309},[29,102416,102417],{"class":31,"line":43},[29,102418,101698],{"class":309},[171,102420,102421,102422,102425,102426,28514],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[26,102423,102424],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[26,102427,102424],{},[171,102429,102430],{},"运行:",[19,102432,102434],{"className":21,"code":102433,"language":23,"meta":24,"style":24},"python ch1_first_sim.py\n",[26,102435,102436],{"__ignoreMap":24},[29,102437,102438,102440],{"class":31,"line":32},[29,102439,30509],{"class":35},[29,102441,101415],{"class":103},[14,102443,102445],{"id":102444},"_5运行结果说明","5.运行结果说明",[171,102447,102448],{},"你应该看到类似输出:",[19,102450,102453],{"className":102451,"code":102452,"language":5362,"meta":24},[5360],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[26,102454,102452],{"__ignoreMap":24},[171,102456,102457,102459,102460,102463,102464,28514],{},[26,102458,101749],{}," 有 7 个位置变量: ",[26,102461,102462],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[26,102465,102466],{},"vx vy vz wx wy wz",[171,102468,102469,102470,102473],{},"你还会看到 ",[26,102471,102472],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102475,102477],{"id":102476},"_6验证步骤","6.验证步骤",[171,102479,102480],{},"确认版本:",[19,102482,102483],{"className":21,"code":101068,"language":23,"meta":24,"style":24},[26,102484,102485],{"__ignoreMap":24},[29,102486,102487,102489,102491],{"class":31,"line":32},[29,102488,30509],{"class":35},[29,102490,30487],{"class":39},[29,102492,101079],{"class":103},[171,102494,102495],{},"确认导入的是官方 bindings:",[19,102497,102499],{"className":21,"code":102498,"language":23,"meta":24,"style":24},"python -c \"import mujoco; print(mujoco)\"\n",[26,102500,102501],{"__ignoreMap":24},[29,102502,102503,102505,102507],{"class":31,"line":32},[29,102504,30509],{"class":35},[29,102506,30487],{"class":39},[29,102508,102509],{"class":103}," \"import mujoco; print(mujoco)\"\n",[171,102511,102512],{},"运行程序:",[19,102514,102515],{"className":21,"code":102433,"language":23,"meta":24,"style":24},[26,102516,102517],{"__ignoreMap":24},[29,102518,102519,102521],{"class":31,"line":32},[29,102520,30509],{"class":35},[29,102522,101415],{"class":103},[171,102524,102525,102526,102529,102530,28514],{},"检查 ",[26,102527,102528],{},"final time"," 是否约等于 ",[26,102531,102532],{},"1.0",[171,102534,102535],{},"再做几个小实验：",[259,102537,102538,102548,102556,102569],{},[178,102539,102540,102541,102543,102544,102547],{},"把 ",[26,102542,102068],{}," 改成 ",[26,102545,102546],{},"pos=\"0 0 2\"","，观察初始高度变化。",[178,102549,102540,102550,102543,102552,102555],{},[26,102551,101957],{},[26,102553,102554],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[178,102557,102540,102558,102543,102560,102563,102564,102566,102567,28514],{},[26,102559,101953],{},[26,102561,102562],{},"timestep=\"0.005\"","，观察 100 步后的 ",[26,102565,102528],{}," 是否变成约 ",[26,102568,35458],{},[178,102570,102571,102572,102575],{},"删除 ",[26,102573,102574],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[171,102577,102578],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102580,102582],{"id":102581},"_7常见错误与解决方案","7.常见错误与解决方案",[275,102584,102586],{"id":102585},"modulenotfounderror-no-module-named-mujoco",[26,102587,102588],{},"ModuleNotFoundError: No module named 'mujoco'",[171,102590,102591],{},"解决:",[19,102593,102595],{"className":21,"code":102594,"language":23,"meta":24,"style":24},"pip install \"mujoco>=2.3\"\n",[26,102596,102597],{"__ignoreMap":24},[29,102598,102599,102601,102603],{"class":31,"line":32},[29,102600,24004],{"class":35},[29,102602,24007],{"class":103},[29,102604,102605],{"class":103}," \"mujoco>=2.3\"\n",[275,102607,102609],{"id":102608},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[171,102611,102612],{},"先安装系统依赖:",[19,102614,102616],{"className":21,"code":102615,"language":23,"meta":24,"style":24},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[26,102617,102618],{"__ignoreMap":24},[29,102619,102620,102622,102624,102626,102628,102631,102633,102636,102638,102641,102643],{"class":31,"line":32},[29,102621,24749],{"class":35},[29,102623,26444],{"class":103},[29,102625,24007],{"class":103},[29,102627,26529],{"class":39},[29,102629,102630],{"class":103}," mesa-libGL",[29,102632,100943],{"class":103},[29,102634,102635],{"class":103}," glfw",[29,102637,100963],{"class":103},[29,102639,102640],{"class":103}," libX11",[29,102642,100976],{"class":103},[29,102644,102645],{"class":103}," libXrandr\n",[275,102647,102649],{"id":102648},"xml-解析失败","XML 解析失败",[171,102651,102652],{},"检查:",[259,102654,102655,102658,102661,102667],{},[178,102656,102657],{},"标签是否闭合",[178,102659,102660],{},"属性是否带引号",[178,102662,102663,102664],{},"根节点是否是 ",[26,102665,102666],{},"\u003Cmujoco>",[178,102668,102669,102671,102672,102675],{},[26,102670,51929],{}," 是否放在 ",[26,102673,102674],{},"\u003Cworldbody>"," 内部",[275,102677,102679,102681,102682],{"id":102678},"final-time-不是严格等于-10",[26,102680,102528],{}," 不是严格等于 ",[26,102683,102532],{},[171,102685,102686],{},"这通常不是错误。浮点数计算可能得到：",[19,102688,102691],{"className":102689,"code":102690,"language":5362,"meta":24},[5360],"1.0000000000000007\n",[26,102692,102690],{"__ignoreMap":24},[171,102694,102695,102696,102698],{},"只要接近 ",[26,102697,102532],{}," 就正常。",[275,102700,102701],{"id":102701},"方块没有掉下来",[171,102703,102704],{},"检查：",[259,102706,102707,102713,102719,102724],{},[178,102708,102709,102710],{},"方块 body 里是否有 ",[26,102711,102712],{},"\u003Cfreejoint\u002F>",[178,102714,102715,102716],{},"重力是否是 ",[26,102717,102718],{},"0 0 -9.81",[178,102720,102721,102722],{},"是否真的调用了 ",[26,102723,100814],{},[178,102725,102726,102727,102729,102730],{},"你看的是否是 ",[26,102728,102472],{},"，不是 ",[26,102731,102732],{},"initial qpos",[14,102734,102736],{"id":102735},"_8本章小结","8.本章小结",[171,102738,102739],{},"本章你已经完成了 MuJoCo 的最小闭环：",[19,102741,102744],{"className":102742,"code":102743,"language":5362,"meta":24},[5360],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[26,102745,102743],{"__ignoreMap":24},[171,102747,102748],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[223,102750,102751],{},"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":24,"searchDepth":43,"depth":43,"links":102753},[102754,102755,102756,102761,102765,102766,102767,102775],{"id":100775,"depth":43,"text":100776},{"id":100898,"depth":43,"text":100899},{"id":101173,"depth":43,"text":101174,"children":102757},[102758,102759,102760],{"id":101211,"depth":51,"text":101212},{"id":101305,"depth":51,"text":101306},{"id":101357,"depth":51,"text":101358},{"id":101381,"depth":43,"text":101382,"children":102762},[102763,102764],{"id":101701,"depth":51,"text":101701},{"id":101837,"depth":51,"text":101837},{"id":102444,"depth":43,"text":102445},{"id":102476,"depth":43,"text":102477},{"id":102581,"depth":43,"text":102582,"children":102768},[102769,102770,102771,102772,102774],{"id":102585,"depth":51,"text":102588},{"id":102608,"depth":51,"text":102609},{"id":102648,"depth":51,"text":102649},{"id":102678,"depth":51,"text":102773},"final time 不是严格等于 1.0",{"id":102701,"depth":51,"text":102701},{"id":102735,"depth":43,"text":102736},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100767,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102782,"title":102783,"body":102784,"description":24,"extension":231,"meta":104440,"navigation":233,"path":104441,"seo":104442,"stem":104443,"__hash__":104444},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102785,"toc":104416},[102786,102789,102791,102794,102797,102814,102909,102912,102918,102920,102922,102946,102949,102963,102966,103007,103009,103022,103024,103027,103075,103087,103090,103093,103099,103112,103179,103182,103201,103204,103207,103213,103215,103224,103227,103231,103240,103322,103331,103335,103341,103355,103365,103367,103697,103700,103712,103714,103725,103727,103730,103748,103751,103754,103772,103783,103786,103801,103811,103813,103834,103851,103871,103877,103917,103933,103949,103955,103958,103982,103998,104003,104033,104050,104075,104078,104093,104102,104117,104126,104141,104148,104150,104160,104173,104180,104183,104222,104229,104231,104283,104285,104291,104294,104301,104308,104311,104313,104331,104334,104337,104371,104383,104385,104388,104410,104413],[10,102787,102783],{"id":102788},"_2xml-与-mjcf-物理建模基础",[14,102790,100776],{"id":100775},[171,102792,102793],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[171,102795,102796],{},"本章结束后，你应该能看懂一个简单模型里：",[259,102798,102799,102802,102805,102808,102811],{},[178,102800,102801],{},"地面在哪里。",[178,102803,102804],{},"物体初始位置在哪里。",[178,102806,102807],{},"几何体是什么形状。",[178,102809,102810],{},"哪些 body 可以自由运动。",[178,102812,102813],{},"如何用名字在 Python 里找到 XML 中的对象。",[445,102815,102816,102826],{},[448,102817,102818],{},[451,102819,102820,102823],{},[454,102821,102822],{"align":23911},"标签",[454,102824,102825],{"align":23911},"作用",[492,102827,102828,102837,102847,102856,102866,102876,102889,102899],{},[451,102829,102830,102834],{},[497,102831,102832],{"align":23911},[26,102833,102666],{},[497,102835,102836],{"align":23911},"根节点",[451,102838,102839,102844],{},[497,102840,102841],{"align":23911},[26,102842,102843],{},"\u003Coption>",[497,102845,102846],{"align":23911},"仿真参数",[451,102848,102849,102853],{},[497,102850,102851],{"align":23911},[26,102852,102674],{},[497,102854,102855],{"align":23911},"世界中的物体",[451,102857,102858,102863],{},[497,102859,102860],{"align":23911},[26,102861,102862],{},"\u003Cbody>",[497,102864,102865],{"align":23911},"刚体",[451,102867,102868,102873],{},[497,102869,102870],{"align":23911},[26,102871,102872],{},"\u003Cgeom>",[497,102874,102875],{"align":23911},"几何体、碰撞体、可视体",[451,102877,102878,102886],{},[497,102879,102880,205,102883],{"align":23911},[26,102881,102882],{},"\u003Cjoint>",[26,102884,102885],{},"\u003Cfreejoint>",[497,102887,102888],{"align":23911},"关节",[451,102890,102891,102896],{},[497,102892,102893],{"align":23911},[26,102894,102895],{},"\u003Csite>",[497,102897,102898],{"align":23911},"标记点",[451,102900,102901,102906],{},[497,102902,102903],{"align":23911},[26,102904,102905],{},"\u003Cactuator>",[497,102907,102908],{"align":23911},"控制器",[171,102910,102911],{},"初学时可以先记住：",[19,102913,102916],{"className":102914,"code":102915,"language":5362,"meta":24},[5360],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[26,102917,102915],{"__ignoreMap":24},[14,102919,100899],{"id":100898},[171,102921,100902],{},[19,102923,102925],{"className":21,"code":102924,"language":23,"meta":24,"style":24},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[26,102926,102927],{"__ignoreMap":24},[29,102928,102929,102931,102933,102935,102937,102939,102941,102943],{"class":31,"line":32},[29,102930,24749],{"class":35},[29,102932,26444],{"class":103},[29,102934,24007],{"class":103},[29,102936,26529],{"class":39},[29,102938,102630],{"class":103},[29,102940,100943],{"class":103},[29,102942,102635],{"class":103},[29,102944,102945],{"class":103}," glfw-devel\n",[171,102947,102948],{},"pip:",[19,102950,102951],{"className":21,"code":101048,"language":23,"meta":24,"style":24},[26,102952,102953],{"__ignoreMap":24},[29,102954,102955,102957,102959,102961],{"class":31,"line":32},[29,102956,24004],{"class":35},[29,102958,24007],{"class":103},[29,102960,101059],{"class":103},[29,102962,101062],{"class":103},[171,102964,102965],{},"conda:",[19,102967,102969],{"className":21,"code":102968,"language":23,"meta":24,"style":24},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[26,102970,102971,102988,102997],{"__ignoreMap":24},[29,102972,102973,102975,102977,102979,102982,102984,102986],{"class":31,"line":32},[29,102974,30459],{"class":35},[29,102976,29305],{"class":103},[29,102978,25244],{"class":39},[29,102980,102981],{"class":103}," mujoco-xml",[29,102983,101104],{"class":103},[29,102985,101107],{"class":39},[29,102987,101110],{"class":39},[29,102989,102990,102992,102994],{"class":31,"line":43},[29,102991,30459],{"class":35},[29,102993,101117],{"class":103},[29,102995,102996],{"class":103}," mujoco-xml\n",[29,102998,102999,103001,103003,103005],{"class":31,"line":51},[29,103000,24004],{"class":35},[29,103002,24007],{"class":103},[29,103004,101059],{"class":103},[29,103006,101062],{"class":103},[171,103008,101133],{},[259,103010,103011,103014,103019],{},[178,103012,103013],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[178,103015,103016,103017,28514],{},"本章使用基础标签，适用于 ",[26,103018,101156],{},[178,103020,103021],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103023,101174],{"id":101173},[171,103025,103026],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[19,103028,103030],{"className":53196,"code":103029,"language":53198,"meta":24,"style":24},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[26,103031,103032,103046,103054,103059,103067],{"__ignoreMap":24},[29,103033,103034,103036,103038,103040,103042,103044],{"class":31,"line":32},[29,103035,1218],{"class":309},[29,103037,101150],{"class":51429},[29,103039,101904],{"class":35},[29,103041,355],{"class":309},[29,103043,62808],{"class":103},[29,103045,51436],{"class":309},[29,103047,103048,103050,103052],{"class":31,"line":43},[29,103049,52273],{"class":309},[29,103051,101970],{"class":51429},[29,103053,51436],{"class":309},[29,103055,103056],{"class":31,"line":51},[29,103057,103058],{"class":309},"    ...\n",[29,103060,103061,103063,103065],{"class":31,"line":59},[29,103062,52546],{"class":309},[29,103064,101970],{"class":51429},[29,103066,51436],{"class":309},[29,103068,103069,103071,103073],{"class":31,"line":67},[29,103070,51914],{"class":309},[29,103072,101150],{"class":51429},[29,103074,51436],{"class":309},[171,103076,103077,103079,103080,103082,103083,103086],{},[26,103078,51929],{}," 表示刚体。",[26,103081,101249],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[26,103084,103085],{},"joint"," 表示刚体相对父刚体如何运动。",[275,103088,103089],{"id":103089},"层级结构非常重要",[171,103091,103092],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[19,103094,103097],{"className":103095,"code":103096,"language":5362,"meta":24},[5360],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[26,103098,103096],{"__ignoreMap":24},[171,103100,103101,101147,103104,103107,103108,103111],{},[26,103102,103103],{},"red_box_geom",[26,103105,103106],{},"box_center"," 都属于 ",[26,103109,103110],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[19,103113,103115],{"className":53196,"code":103114,"language":53198,"meta":24,"style":24},"\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",[26,103116,103117,103137,103151,103171],{"__ignoreMap":24},[29,103118,103119,103121,103123,103125,103127,103129,103131,103133,103135],{"class":31,"line":32},[29,103120,1218],{"class":309},[29,103122,51929],{"class":51429},[29,103124,15095],{"class":35},[29,103126,355],{"class":309},[29,103128,53620],{"class":103},[29,103130,101235],{"class":35},[29,103132,355],{"class":309},[29,103134,101240],{"class":103},[29,103136,51436],{"class":309},[29,103138,103139,103141,103143,103145,103147,103149],{"class":31,"line":43},[29,103140,52273],{"class":309},[29,103142,101749],{"class":51429},[29,103144,15095],{"class":35},[29,103146,355],{"class":309},[29,103148,102090],{"class":103},[29,103150,101273],{"class":309},[29,103152,103153,103155,103157,103159,103161,103163,103165,103167,103169],{"class":31,"line":51},[29,103154,52273],{"class":309},[29,103156,101249],{"class":51429},[29,103158,53953],{"class":35},[29,103160,355],{"class":309},[29,103162,53620],{"class":103},[29,103164,101265],{"class":35},[29,103166,355],{"class":309},[29,103168,101270],{"class":103},[29,103170,101273],{"class":309},[29,103172,103173,103175,103177],{"class":31,"line":59},[29,103174,51914],{"class":309},[29,103176,51929],{"class":51429},[29,103178,51436],{"class":309},[171,103180,103181],{},"含义:",[259,103183,103184,103190,103195,103198],{},[178,103185,103186,103187,103189],{},"创建名为 ",[26,103188,53843],{}," 的刚体",[178,103191,103192,103193],{},"初始位置在世界坐标 ",[26,103194,101298],{},[178,103196,103197],{},"它有一个自由关节",[178,103199,103200],{},"它有一个盒子几何体",[275,103202,103203],{"id":103203},"坐标怎么理解",[171,103205,103206],{},"MuJoCo 默认使用三维坐标：",[19,103208,103211],{"className":103209,"code":103210,"language":5362,"meta":24},[5360],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[26,103212,103210],{"__ignoreMap":24},[171,103214,14808],{},[19,103216,103218],{"className":53196,"code":103217,"language":53198,"meta":24,"style":24},"pos=\"0 0 1\"\n",[26,103219,103220],{"__ignoreMap":24},[29,103221,103222],{"class":31,"line":32},[29,103223,103217],{"class":309},[171,103225,103226],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[275,103228,103230],{"id":103229},"geom-的-size-怎么理解","geom 的 size 怎么理解",[171,103232,103233,103234,82659,103237,103239],{},"不同 ",[26,103235,103236],{},"type",[26,103238,31625],{}," 含义不同：",[445,103241,103242,103257],{},[448,103243,103244],{},[451,103245,103246,103250,103255],{},[454,103247,103248],{"align":23911},[26,103249,103236],{},[454,103251,103252,103254],{"align":23911},[26,103253,31625],{}," 示例",[454,103256,100829],{"align":23911},[492,103258,103259,103273,103288,103307],{},[451,103260,103261,103265,103270],{},[497,103262,103263],{"align":23911},[26,103264,53843],{},[497,103266,103267],{"align":23911},[26,103268,103269],{},"size=\"0.1 0.2 0.3\"",[497,103271,103272],{"align":23911},"x\u002Fy\u002Fz 半边长，不是完整长度",[451,103274,103275,103280,103285],{},[497,103276,103277],{"align":23911},[26,103278,103279],{},"sphere",[497,103281,103282],{"align":23911},[26,103283,103284],{},"size=\"0.1\"",[497,103286,103287],{"align":23911},"球半径",[451,103289,103290,103295,103300],{},[497,103291,103292],{"align":23911},[26,103293,103294],{},"capsule",[497,103296,103297],{"align":23911},[26,103298,103299],{},"size=\"0.03\"",[497,103301,103302,103303,103306],{"align":23911},"胶囊半径，长度常用 ",[26,103304,103305],{},"fromto"," 指定",[451,103308,103309,103314,103319],{},[497,103310,103311],{"align":23911},[26,103312,103313],{},"plane",[497,103315,103316],{"align":23911},[26,103317,103318],{},"size=\"3 3 0.1\"",[497,103320,103321],{"align":23911},"可视平面大小，通常当地面",[171,103323,103324,103325,103327,103328,103330],{},"最容易踩坑的是 box：",[26,103326,102153],{}," 表示边长大约是 ",[26,103329,32166],{},"，因为 MuJoCo 用的是半边长。",[275,103332,103334],{"id":103333},"site-是什么","site 是什么",[171,103336,103337,103340],{},[26,103338,103339],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[259,103342,103343,103346,103349,103352],{},[178,103344,103345],{},"标记机械臂末端。",[178,103347,103348],{},"标记目标位置。",[178,103350,103351],{},"放传感器或相机参考点。",[178,103353,103354],{},"在 Python 中读取某个关键点的世界坐标。",[171,103356,103357,103358,101147,103361,103364],{},"在后面的 Reacher 任务中，",[26,103359,103360],{},"tip",[26,103362,103363],{},"target"," 就会用 site 表示。",[14,103366,101382],{"id":101381},[19,103368,103370],{"className":30507,"code":103369,"language":30509,"meta":24,"style":24},"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",[26,103371,103372,103378,103388,103392,103396,103404,103409,103413,103417,103421,103426,103430,103435,103440,103445,103450,103454,103458,103462,103466,103470,103474,103486,103498,103506,103510,103525,103540,103544,103557,103572,103585,103598,103602,103618,103622,103626,103637,103649,103661,103673,103677,103681,103693],{"__ignoreMap":24},[29,103373,103374,103376],{"class":31,"line":32},[29,103375,30521],{"class":305},[29,103377,101430],{"class":309},[29,103379,103380,103382,103384,103386],{"class":31,"line":43},[29,103381,30521],{"class":305},[29,103383,31509],{"class":309},[29,103385,31512],{"class":305},[29,103387,31515],{"class":309},[29,103389,103390],{"class":31,"line":51},[29,103391,2575],{"emptyLinePlaceholder":233},[29,103393,103394],{"class":31,"line":59},[29,103395,2575],{"emptyLinePlaceholder":233},[29,103397,103398,103400,103402],{"class":31,"line":67},[29,103399,101443],{"class":39},[29,103401,13739],{"class":305},[29,103403,101448],{"class":103},[29,103405,103406],{"class":31,"line":75},[29,103407,103408],{"class":103},"\u003Cmujoco model=\"xml_basic\">\n",[29,103410,103411],{"class":31,"line":83},[29,103412,101458],{"class":103},[29,103414,103415],{"class":31,"line":158},[29,103416,2575],{"emptyLinePlaceholder":233},[29,103418,103419],{"class":31,"line":166},[29,103420,101467],{"class":103},[29,103422,103423],{"class":31,"line":1505},[29,103424,103425],{"class":103},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[29,103427,103428],{"class":31,"line":1788},[29,103429,2575],{"emptyLinePlaceholder":233},[29,103431,103432],{"class":31,"line":1793},[29,103433,103434],{"class":103},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[29,103436,103437],{"class":31,"line":1799},[29,103438,103439],{"class":103},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[29,103441,103442],{"class":31,"line":1804},[29,103443,103444],{"class":103},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[29,103446,103447],{"class":31,"line":1818},[29,103448,103449],{"class":103},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[29,103451,103452],{"class":31,"line":1823},[29,103453,101496],{"class":103},[29,103455,103456],{"class":31,"line":1829},[29,103457,101501],{"class":103},[29,103459,103460],{"class":31,"line":1850},[29,103461,101506],{"class":103},[29,103463,103464],{"class":31,"line":1855},[29,103465,95827],{"class":103},[29,103467,103468],{"class":31,"line":1869},[29,103469,2575],{"emptyLinePlaceholder":233},[29,103471,103472],{"class":31,"line":1874},[29,103473,2575],{"emptyLinePlaceholder":233},[29,103475,103476,103478,103480,103482,103484],{"class":31,"line":1903},[29,103477,32076],{"class":305},[29,103479,2148],{"class":35},[29,103481,101527],{"class":309},[29,103483,95815],{"class":39},[29,103485,3914],{"class":309},[29,103487,103488,103490,103492,103494,103496],{"class":31,"line":1908},[29,103489,101536],{"class":309},[29,103491,355],{"class":305},[29,103493,101541],{"class":309},[29,103495,101443],{"class":39},[29,103497,316],{"class":309},[29,103499,103500,103502,103504],{"class":31,"line":1925},[29,103501,101550],{"class":309},[29,103503,355],{"class":305},[29,103505,101555],{"class":309},[29,103507,103508],{"class":31,"line":1930},[29,103509,2575],{"emptyLinePlaceholder":233},[29,103511,103512,103515,103517,103520,103523],{"class":31,"line":1935},[29,103513,103514],{"class":309},"    box_body_id ",[29,103516,355],{"class":305},[29,103518,103519],{"class":309}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[29,103521,103522],{"class":103},"\"red_box\"",[29,103524,316],{"class":309},[29,103526,103527,103530,103532,103535,103538],{"class":31,"line":1940},[29,103528,103529],{"class":309},"    site_id ",[29,103531,355],{"class":305},[29,103533,103534],{"class":309}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[29,103536,103537],{"class":103},"\"box_center\"",[29,103539,316],{"class":309},[29,103541,103542],{"class":31,"line":1954},[29,103543,2575],{"emptyLinePlaceholder":233},[29,103545,103546,103548,103551,103553,103555],{"class":31,"line":1959},[29,103547,3276],{"class":305},[29,103549,103550],{"class":309}," box_body_id ",[29,103552,1218],{"class":305},[29,103554,4268],{"class":39},[29,103556,3914],{"class":309},[29,103558,103559,103562,103565,103567,103570],{"class":31,"line":2752},[29,103560,103561],{"class":305},"        raise",[29,103563,103564],{"class":39}," RuntimeError",[29,103566,310],{"class":309},[29,103568,103569],{"class":103},"\"body red_box not found\"",[29,103571,316],{"class":309},[29,103573,103574,103576,103579,103581,103583],{"class":31,"line":2766},[29,103575,3276],{"class":305},[29,103577,103578],{"class":309}," site_id ",[29,103580,1218],{"class":305},[29,103582,4268],{"class":39},[29,103584,3914],{"class":309},[29,103586,103587,103589,103591,103593,103596],{"class":31,"line":2774},[29,103588,103561],{"class":305},[29,103590,103564],{"class":39},[29,103592,310],{"class":309},[29,103594,103595],{"class":103},"\"site box_center not found\"",[29,103597,316],{"class":309},[29,103599,103600],{"class":31,"line":2779},[29,103601,2575],{"emptyLinePlaceholder":233},[29,103603,103604,103606,103608,103610,103612,103614,103616],{"class":31,"line":2785},[29,103605,3376],{"class":305},[29,103607,101630],{"class":309},[29,103609,26172],{"class":305},[29,103611,32572],{"class":39},[29,103613,310],{"class":309},[29,103615,1898],{"class":39},[29,103617,30915],{"class":309},[29,103619,103620],{"class":31,"line":2791},[29,103621,101645],{"class":309},[29,103623,103624],{"class":31,"line":2796},[29,103625,2575],{"emptyLinePlaceholder":233},[29,103627,103628,103630,103632,103635],{"class":31,"line":8123},[29,103629,31428],{"class":39},[29,103631,310],{"class":309},[29,103633,103634],{"class":103},"\"simulation time:\"",[29,103636,101607],{"class":309},[29,103638,103639,103641,103643,103646],{"class":31,"line":8147},[29,103640,31428],{"class":39},[29,103642,310],{"class":309},[29,103644,103645],{"class":103},"\"box body position:\"",[29,103647,103648],{"class":309},", data.xpos[box_body_id].copy())\n",[29,103650,103651,103653,103655,103658],{"class":31,"line":8152},[29,103652,31428],{"class":39},[29,103654,310],{"class":309},[29,103656,103657],{"class":103},"\"site position:\"",[29,103659,103660],{"class":309},", data.site_xpos[site_id].copy())\n",[29,103662,103663,103665,103667,103670],{"class":31,"line":8158},[29,103664,31428],{"class":39},[29,103666,310],{"class":309},[29,103668,103669],{"class":103},"\"box qpos:\"",[29,103671,103672],{"class":309},", np.array(data.qpos))\n",[29,103674,103675],{"class":31,"line":8185},[29,103676,2575],{"emptyLinePlaceholder":233},[29,103678,103679],{"class":31,"line":8190},[29,103680,2575],{"emptyLinePlaceholder":233},[29,103682,103683,103685,103687,103689,103691],{"class":31,"line":8196},[29,103684,1707],{"class":305},[29,103686,31349],{"class":39},[29,103688,101688],{"class":305},[29,103690,101691],{"class":103},[29,103692,3914],{"class":309},[29,103694,103695],{"class":31,"line":8208},[29,103696,101698],{"class":309},[171,103698,103699],{},"保存为：",[19,103701,103703],{"className":21,"code":103702,"language":23,"meta":24,"style":24},"touch ch2_xml_basic.py\n",[26,103704,103705],{"__ignoreMap":24},[29,103706,103707,103709],{"class":31,"line":32},[29,103708,101412],{"class":35},[29,103710,103711],{"class":103}," ch2_xml_basic.py\n",[171,103713,102430],{},[19,103715,103717],{"className":21,"code":103716,"language":23,"meta":24,"style":24},"python ch2_xml_basic.py\n",[26,103718,103719],{"__ignoreMap":24},[29,103720,103721,103723],{"class":31,"line":32},[29,103722,30509],{"class":35},[29,103724,103711],{"class":103},[275,103726,101701],{"id":101701},[171,103728,103729],{},"用名字查找 body：",[19,103731,103733],{"className":30507,"code":103732,"language":30509,"meta":24,"style":24},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[26,103734,103735],{"__ignoreMap":24},[29,103736,103737,103740,103742,103744,103746],{"class":31,"line":32},[29,103738,103739],{"class":309},"box_body_id ",[29,103741,355],{"class":305},[29,103743,103519],{"class":309},[29,103745,103522],{"class":103},[29,103747,316],{"class":309},[171,103749,103750],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[171,103752,103753],{},"用名字查找 site：",[19,103755,103757],{"className":30507,"code":103756,"language":30509,"meta":24,"style":24},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[26,103758,103759],{"__ignoreMap":24},[29,103760,103761,103764,103766,103768,103770],{"class":31,"line":32},[29,103762,103763],{"class":309},"site_id ",[29,103765,355],{"class":305},[29,103767,103534],{"class":309},[29,103769,103537],{"class":103},[29,103771,316],{"class":309},[171,103773,103774,103775,103778,103779,103782],{},"注意第二个参数是对象类型。查 body 就用 ",[26,103776,103777],{},"mjOBJ_BODY","，查 site 就用 ",[26,103780,103781],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[171,103784,103785],{},"读取世界坐标：",[19,103787,103789],{"className":30507,"code":103788,"language":30509,"meta":24,"style":24},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[26,103790,103791,103796],{"__ignoreMap":24},[29,103792,103793],{"class":31,"line":32},[29,103794,103795],{"class":309},"data.xpos[box_body_id]\n",[29,103797,103798],{"class":31,"line":43},[29,103799,103800],{"class":309},"data.site_xpos[site_id]\n",[171,103802,103803,103806,103807,103810],{},[26,103804,103805],{},"xpos"," 是 body 的世界坐标，",[26,103808,103809],{},"site_xpos"," 是 site 的世界坐标。",[275,103812,101837],{"id":101837},[19,103814,103816],{"className":30507,"code":103815,"language":30509,"meta":24,"style":24},"import mujoco\nimport numpy as np\n",[26,103817,103818,103824],{"__ignoreMap":24},[29,103819,103820,103822],{"class":31,"line":32},[29,103821,30521],{"class":305},[29,103823,101430],{"class":309},[29,103825,103826,103828,103830,103832],{"class":31,"line":43},[29,103827,30521],{"class":305},[29,103829,31509],{"class":309},[29,103831,31512],{"class":305},[29,103833,31515],{"class":309},[171,103835,103836,103837,103840,103841,103844,103845,520,103848,28514],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[26,103838,103839],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[26,103842,103843],{},"as np"," 是习惯写法，后面就可以写 ",[26,103846,103847],{},"np.array(...)",[26,103849,103850],{},"np.round(...)",[19,103852,103853],{"className":30507,"code":101724,"language":30509,"meta":24,"style":24},[26,103854,103855,103863,103867],{"__ignoreMap":24},[29,103856,103857,103859,103861],{"class":31,"line":32},[29,103858,101443],{"class":39},[29,103860,13739],{"class":305},[29,103862,101448],{"class":103},[29,103864,103865],{"class":31,"line":43},[29,103866,101739],{"class":103},[29,103868,103869],{"class":31,"line":51},[29,103870,95827],{"class":103},[171,103872,103873,103874,28514],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[26,103875,103876],{},"mujoco.MjModel.from_xml_string(XML)",[19,103878,103880],{"className":53196,"code":103879,"language":53198,"meta":24,"style":24},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[26,103881,103882],{"__ignoreMap":24},[29,103883,103884,103886,103888,103890,103892,103894,103896,103898,103901,103903,103905,103908,103910,103912,103915],{"class":31,"line":32},[29,103885,1218],{"class":309},[29,103887,103339],{"class":51429},[29,103889,15095],{"class":35},[29,103891,355],{"class":309},[29,103893,103537],{"class":103},[29,103895,101235],{"class":35},[29,103897,355],{"class":309},[29,103899,103900],{"class":103},"\"0 0 0\"",[29,103902,101265],{"class":35},[29,103904,355],{"class":309},[29,103906,103907],{"class":103},"\"0.03\"",[29,103909,78896],{"class":35},[29,103911,355],{"class":309},[29,103913,103914],{"class":103},"\"0 1 0 1\"",[29,103916,101273],{"class":309},[171,103918,103919,103921,103922,103925,103926,103928,103929,103932],{},[26,103920,103339],{}," 是标记点。",[26,103923,103924],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[26,103927,103299],{}," 表示显示出来的小球大小。",[26,103930,103931],{},"rgba=\"0 1 0 1\""," 表示绿色。",[19,103934,103935],{"className":30507,"code":103732,"language":30509,"meta":24,"style":24},[26,103936,103937],{"__ignoreMap":24},[29,103938,103939,103941,103943,103945,103947],{"class":31,"line":32},[29,103940,103739],{"class":309},[29,103942,355],{"class":305},[29,103944,103519],{"class":309},[29,103946,103522],{"class":103},[29,103948,316],{"class":309},[171,103950,103951,103952,103954],{},"这行的作用是：根据名字 ",[26,103953,103522],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[171,103956,103957],{},"拆开看：",[259,103959,103960,103966,103971,103977],{},[178,103961,103962,103965],{},[26,103963,103964],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[178,103967,103968,103970],{},[26,103969,102214],{}," 是被查询的模型。",[178,103972,103973,103976],{},[26,103974,103975],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[178,103978,103979,103981],{},[26,103980,103522],{}," 是 XML 里写的名字。",[19,103983,103984],{"className":30507,"code":103756,"language":30509,"meta":24,"style":24},[26,103985,103986],{"__ignoreMap":24},[29,103987,103988,103990,103992,103994,103996],{"class":31,"line":32},[29,103989,103763],{"class":309},[29,103991,355],{"class":305},[29,103993,103534],{"class":309},[29,103995,103537],{"class":103},[29,103997,316],{"class":309},[171,103999,104000,104001,28514],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[26,104002,103537],{},[19,104004,104006],{"className":30507,"code":104005,"language":30509,"meta":24,"style":24},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[26,104007,104008,104020],{"__ignoreMap":24},[29,104009,104010,104012,104014,104016,104018],{"class":31,"line":32},[29,104011,1707],{"class":305},[29,104013,103550],{"class":309},[29,104015,1218],{"class":305},[29,104017,4268],{"class":39},[29,104019,3914],{"class":309},[29,104021,104022,104025,104027,104029,104031],{"class":31,"line":43},[29,104023,104024],{"class":305},"    raise",[29,104026,103564],{"class":39},[29,104028,310],{"class":309},[29,104030,103569],{"class":103},[29,104032,316],{"class":309},[171,104034,104035,104037,104038,104041,104042,104045,104046,104049],{},[26,104036,1707],{}," 是条件判断。",[26,104039,104040],{},"mj_name2id"," 找不到对象时会返回 ",[26,104043,104044],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[26,104047,104048],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[19,104051,104053],{"className":30507,"code":104052,"language":30509,"meta":24,"style":24},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[26,104054,104055,104071],{"__ignoreMap":24},[29,104056,104057,104059,104061,104063,104065,104067,104069],{"class":31,"line":32},[29,104058,3200],{"class":305},[29,104060,101630],{"class":309},[29,104062,26172],{"class":305},[29,104064,32572],{"class":39},[29,104066,310],{"class":309},[29,104068,1898],{"class":39},[29,104070,30915],{"class":309},[29,104072,104073],{"class":31,"line":43},[29,104074,101828],{"class":309},[171,104076,104077],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[19,104079,104081],{"className":30507,"code":104080,"language":30509,"meta":24,"style":24},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[26,104082,104083],{"__ignoreMap":24},[29,104084,104085,104087,104089,104091],{"class":31,"line":32},[29,104086,30544],{"class":39},[29,104088,310],{"class":309},[29,104090,103645],{"class":103},[29,104092,103648],{"class":309},[171,104094,104095,104097,104098,104101],{},[26,104096,101208],{}," 保存所有 body 的世界坐标。",[26,104099,104100],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[19,104103,104105],{"className":30507,"code":104104,"language":30509,"meta":24,"style":24},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[26,104106,104107],{"__ignoreMap":24},[29,104108,104109,104111,104113,104115],{"class":31,"line":32},[29,104110,30544],{"class":39},[29,104112,310],{"class":309},[29,104114,103657],{"class":103},[29,104116,103660],{"class":309},[171,104118,104119,104122,104123,104125],{},[26,104120,104121],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[26,104124,103106],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[19,104127,104129],{"className":30507,"code":104128,"language":30509,"meta":24,"style":24},"print(\"box qpos:\", np.array(data.qpos))\n",[26,104130,104131],{"__ignoreMap":24},[29,104132,104133,104135,104137,104139],{"class":31,"line":32},[29,104134,30544],{"class":39},[29,104136,310],{"class":309},[29,104138,103669],{"class":103},[29,104140,103672],{"class":309},[171,104142,104143,104144,104147],{},"这里打印广义位置数组。",[26,104145,104146],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104149,102445],{"id":102444},[171,104151,104152,104153,104156,104157,28514],{},"程序会输出 ",[26,104154,104155],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[26,104158,104159],{},"qpos",[171,104161,104162,104164,104165,104168,104169,104172],{},[26,104163,104100],{}," 是 body 的世界坐标位置。",[26,104166,104167],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[26,104170,104171],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[171,104174,82351,104175,82659,104177,104179],{},[26,104176,103106],{},[26,104178,103924],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[171,104181,104182],{},"如果你把 site 改成：",[19,104184,104186],{"className":53196,"code":104185,"language":53198,"meta":24,"style":24},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[26,104187,104188],{"__ignoreMap":24},[29,104189,104190,104192,104194,104196,104198,104201,104203,104205,104208,104210,104212,104214,104216,104218,104220],{"class":31,"line":32},[29,104191,1218],{"class":309},[29,104193,103339],{"class":51429},[29,104195,15095],{"class":35},[29,104197,355],{"class":309},[29,104199,104200],{"class":103},"\"box_top\"",[29,104202,101235],{"class":35},[29,104204,355],{"class":309},[29,104206,104207],{"class":103},"\"0 0 0.15\"",[29,104209,101265],{"class":35},[29,104211,355],{"class":309},[29,104213,103907],{"class":103},[29,104215,78896],{"class":35},[29,104217,355],{"class":309},[29,104219,103914],{"class":103},[29,104221,101273],{"class":309},[171,104223,104224,104225,104228],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[26,104226,104227],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104230,102477],{"id":102476},[259,104232,104233,104242,104245,104252,104258,104269],{},[178,104234,102540,104235,104237,104238,102543,104240,28514],{},[26,104236,103110],{}," 的初始高度从 ",[26,104239,525],{},[26,104241,386],{},[178,104243,104244],{},"重新运行程序。",[178,104246,104247,104248,104251],{},"观察 ",[26,104249,104250],{},"box qpos"," 和最终位置是否变化。",[178,104253,104254,104255,104257],{},"故意把 ",[26,104256,103339],{}," 名称改错，确认程序能报错。",[178,104259,102540,104260,104262,104263,102543,104265,104268],{},[26,104261,101249],{}," 的颜色 ",[26,104264,102161],{},[26,104266,104267],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[178,104270,102540,104271,82659,104273,102543,104276,104279,104280,104282],{},[26,104272,103106],{},[26,104274,104275],{},"pos",[26,104277,104278],{},"0 0 0.2","，观察 ",[26,104281,104227],{}," 如何变化。",[14,104284,102582],{"id":102581},[275,104286,104288],{"id":104287},"xml-error-schema-violation",[26,104289,104290],{},"XML Error: Schema violation",[171,104292,104293],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[275,104295,104297,81419,104299],{"id":104296},"mj_name2id-返回-1",[26,104298,104040],{},[26,104300,104044],{},[171,104302,104303,104304,104307],{},"说明名字没有找到。检查 XML 中 ",[26,104305,104306],{},"name=\"...\"","，并确认对象类型正确。",[275,104309,104310],{"id":104310},"物体不下落",[171,104312,102652],{},[259,104314,104315,104320,104325],{},[178,104316,104317,104318],{},"body 是否有 ",[26,104319,101749],{},[178,104321,104322,104323],{},"gravity 是否为 ",[26,104324,102718],{},[178,104326,104327,104328,104330],{},"body 是否被固定在 ",[26,104329,101970],{}," 中",[275,104332,104333],{"id":104333},"坐标看起来不符合预期",[171,104335,104336],{},"先区分两种坐标：",[445,104338,104339,104348],{},[448,104340,104341],{},[451,104342,104343,104346],{},[454,104344,104345],{"align":23911},"坐标",[454,104347,100829],{"align":23911},[492,104349,104350,104360],{},[451,104351,104352,104357],{},[497,104353,104354,104355],{"align":23911},"XML 里的 ",[26,104356,104275],{},[497,104358,104359],{"align":23911},"相对父 body 的局部坐标",[451,104361,104362,104368],{},[497,104363,104364,205,104366],{"align":23911},[26,104365,101208],{},[26,104367,104121],{},[497,104369,104370],{"align":23911},"仿真更新后的世界坐标",[171,104372,104373,104374,104376,104377,82668,104380,104382],{},"如果你修改了 ",[26,104375,101199],{},"，但还没调用 ",[26,104378,104379],{},"mj_forward",[26,104381,101344],{},"，世界坐标可能还没有更新。",[14,104384,102736],{"id":102735},[171,104386,104387],{},"MJCF 建模先掌握四件事：",[259,104389,104390,104395,104400,104405],{},[178,104391,104392,104394],{},[26,104393,51929],{}," 表示刚体层级。",[178,104396,104397,104399],{},[26,104398,101249],{}," 表示形状、碰撞和质量。",[178,104401,104402,104404],{},[26,104403,103085],{}," 决定 body 能不能动、怎么动。",[178,104406,104407,104409],{},[26,104408,103339],{}," 用来标记关键点，方便 Python 读取位置。",[171,104411,104412],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[223,104414,104415],{},"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":24,"searchDepth":43,"depth":43,"links":104417},[104418,104419,104420,104426,104430,104431,104432,104439],{"id":100775,"depth":43,"text":100776},{"id":100898,"depth":43,"text":100899},{"id":101173,"depth":43,"text":101174,"children":104421},[104422,104423,104424,104425],{"id":103089,"depth":51,"text":103089},{"id":103203,"depth":51,"text":103203},{"id":103229,"depth":51,"text":103230},{"id":103333,"depth":51,"text":103334},{"id":101381,"depth":43,"text":101382,"children":104427},[104428,104429],{"id":101701,"depth":51,"text":101701},{"id":101837,"depth":51,"text":101837},{"id":102444,"depth":43,"text":102445},{"id":102476,"depth":43,"text":102477},{"id":102581,"depth":43,"text":102582,"children":104433},[104434,104435,104437,104438],{"id":104287,"depth":51,"text":104290},{"id":104296,"depth":51,"text":104436},"mj_name2id 返回 -1",{"id":104310,"depth":51,"text":104310},{"id":104333,"depth":51,"text":104333},{"id":102735,"depth":43,"text":102736},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102783,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104446,"title":104447,"body":104448,"description":24,"extension":231,"meta":105943,"navigation":233,"path":105944,"seo":105945,"stem":105946,"__hash__":105947},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104449,"toc":105915},[104450,104453,104455,104458,104461,104499,104502,104508,104511,104513,104515,104542,104544,104558,104560,104601,104603,104627,104629,104632,104641,104650,104653,104662,104670,104679,104682,104692,104695,104747,104754,104760,104768,104816,104819,104838,104841,104849,104853,104862,104895,104897,105245,105247,105259,105261,105272,105274,105277,105298,105304,105307,105332,105342,105345,105353,105356,105359,105380,105391,105393,105413,105416,105437,105446,105465,105471,105496,105499,105513,105520,105544,105547,105555,105564,105580,105592,105600,105609,105611,105614,105638,105643,105646,105668,105670,105709,105711,105718,105720,105728,105731,105734,105746,105787,105794,105805,105812,105815,105864,105867,105870,105876,105878,105883,105909,105912],[10,104451,104447],{"id":104452},"_3python-控制接口读取状态与推进仿真",[14,104454,100776],{"id":100775},[171,104456,104457],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[171,104459,104460],{},"你将学习:",[259,104462,104463,104468,104473,104477,104482,104493],{},[178,104464,104465],{},[26,104466,104467],{},"MjModel.from_xml_string",[178,104469,104470],{},[26,104471,104472],{},"MjData(model)",[178,104474,104475],{},[26,104476,101344],{},[178,104478,104479],{},[26,104480,104481],{},"mj_resetData",[178,104483,104484,104485,520,104487,520,104490],{},"读取 ",[26,104486,104159],{},[26,104488,104489],{},"qvel",[26,104491,104492],{},"ctrl",[178,104494,104495,104496],{},"使用 ",[26,104497,104498],{},"model.opt.timestep",[171,104500,104501],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[19,104503,104506],{"className":104504,"code":104505,"language":5362,"meta":24},[5360],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[26,104507,104505],{"__ignoreMap":24},[171,104509,104510],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104512,100899],{"id":100898},[171,104514,100902],{},[19,104516,104518],{"className":21,"code":104517,"language":23,"meta":24,"style":24},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[26,104519,104520],{"__ignoreMap":24},[29,104521,104522,104524,104526,104528,104530,104533,104535,104537,104539],{"class":31,"line":32},[29,104523,24749],{"class":35},[29,104525,26444],{"class":103},[29,104527,24007],{"class":103},[29,104529,26529],{"class":39},[29,104531,104532],{"class":103}," python3",[29,104534,100927],{"class":103},[29,104536,102630],{"class":103},[29,104538,100943],{"class":103},[29,104540,104541],{"class":103}," glfw\n",[171,104543,102948],{},[19,104545,104546],{"className":21,"code":101048,"language":23,"meta":24,"style":24},[26,104547,104548],{"__ignoreMap":24},[29,104549,104550,104552,104554,104556],{"class":31,"line":32},[29,104551,24004],{"class":35},[29,104553,24007],{"class":103},[29,104555,101059],{"class":103},[29,104557,101062],{"class":103},[171,104559,102965],{},[19,104561,104563],{"className":21,"code":104562,"language":23,"meta":24,"style":24},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[26,104564,104565,104582,104591],{"__ignoreMap":24},[29,104566,104567,104569,104571,104573,104576,104578,104580],{"class":31,"line":32},[29,104568,30459],{"class":35},[29,104570,29305],{"class":103},[29,104572,25244],{"class":39},[29,104574,104575],{"class":103}," mujoco-python-api",[29,104577,101104],{"class":103},[29,104579,101107],{"class":39},[29,104581,101110],{"class":39},[29,104583,104584,104586,104588],{"class":31,"line":43},[29,104585,30459],{"class":35},[29,104587,101117],{"class":103},[29,104589,104590],{"class":103}," mujoco-python-api\n",[29,104592,104593,104595,104597,104599],{"class":31,"line":51},[29,104594,24004],{"class":35},[29,104596,24007],{"class":103},[29,104598,101059],{"class":103},[29,104600,101062],{"class":103},[171,104602,101133],{},[259,104604,104605,104612,104621],{},[178,104606,104607,101147,104609,104611],{},[26,104608,100804],{},[26,104610,100809],{}," 是官方 Python bindings 的类名。",[178,104613,104614,104615,104618,104619,28514],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[26,104616,104617],{},"mjModel"," 在 Python 中是 ",[26,104620,100838],{},[178,104622,104623,104624,28514],{},"不要使用 ",[26,104625,104626],{},"sim = mujoco_py.MjSim(...)",[14,104628,101174],{"id":101173},[171,104630,104631],{},"仿真推进核心代码:",[19,104633,104635],{"className":30507,"code":104634,"language":30509,"meta":24,"style":24},"mujoco.mj_step(model, data)\n",[26,104636,104637],{"__ignoreMap":24},[29,104638,104639],{"class":31,"line":32},[29,104640,104634],{"class":309},[171,104642,104643,104644,520,104646,520,104648,28514],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[26,104645,101199],{},[26,104647,101202],{},[26,104649,101196],{},[171,104651,104652],{},"重置仿真:",[19,104654,104656],{"className":30507,"code":104655,"language":30509,"meta":24,"style":24},"mujoco.mj_resetData(model, data)\n",[26,104657,104658],{"__ignoreMap":24},[29,104659,104660],{"class":31,"line":32},[29,104661,104655],{"class":309},[171,104663,104664,104665,82668,104667,104669],{},"如果手动修改了 ",[26,104666,101199],{},[26,104668,101202],{},"，通常应调用:",[19,104671,104673],{"className":30507,"code":104672,"language":30509,"meta":24,"style":24},"mujoco.mj_forward(model, data)\n",[26,104674,104675],{"__ignoreMap":24},[29,104676,104677],{"class":31,"line":32},[29,104678,104672],{"class":309},[171,104680,104681],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[275,104683,104685,520,104687,520,104689,104691],{"id":104684},"qposqvelctrl-是什么",[26,104686,104159],{},[26,104688,104489],{},[26,104690,104492],{}," 是什么",[171,104693,104694],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[445,104696,104697,104709],{},[448,104698,104699],{},[451,104700,104701,104704,104706],{},[454,104702,104703],{"align":23911},"字段",[454,104705,100829],{"align":23911},[454,104707,104708],{"align":23911},"谁来修改",[492,104710,104711,104723,104735],{},[451,104712,104713,104717,104720],{},[497,104714,104715],{"align":23911},[26,104716,101199],{},[497,104718,104719],{"align":23911},"广义位置，例如小车位置、关节角、自由物体位置姿态",[497,104721,104722],{"align":23911},"MuJoCo 更新，也可以手动设置初始状态",[451,104724,104725,104729,104732],{},[497,104726,104727],{"align":23911},[26,104728,101202],{},[497,104730,104731],{"align":23911},"广义速度，例如小车速度、关节角速度",[497,104733,104734],{"align":23911},"MuJoCo 更新，也可以手动清零",[451,104736,104737,104741,104744],{},[497,104738,104739],{"align":23911},[26,104740,101205],{},[497,104742,104743],{"align":23911},"actuator 的控制输入",[497,104745,104746],{"align":23911},"主要由你的控制代码写入",[171,104748,9200,104749,101147,104751,104753],{},[26,104750,104159],{},[26,104752,104489],{}," 不一定同维。自由刚体就是典型例子：",[19,104755,104758],{"className":104756,"code":104757,"language":5362,"meta":24},[5360],"freejoint: qpos 7 维，qvel 6 维\n",[26,104759,104757],{"__ignoreMap":24},[275,104761,104763,101147,104765,104767],{"id":104762},"mj_step-和-mj_forward-的区别",[26,104764,101344],{},[26,104766,104379],{}," 的区别",[445,104769,104770,104783],{},[448,104771,104772],{},[451,104773,104774,104777,104780],{},[454,104775,104776],{"align":23911},"函数",[454,104778,104779],{"align":23911},"是否推进时间",[454,104781,104782],{"align":23911},"什么时候用",[492,104784,104785,104798],{},[451,104786,104787,104792,104795],{},[497,104788,104789],{"align":23911},[26,104790,104791],{},"mj_step(model, data)",[497,104793,104794],{"align":23911},"是",[497,104796,104797],{"align":23911},"正常仿真循环，每调用一次前进一步",[451,104799,104800,104805,104808],{},[497,104801,104802],{"align":23911},[26,104803,104804],{},"mj_forward(model, data)",[497,104806,104807],{"align":23911},"否",[497,104809,104810,104811,520,104813,104815],{"align":23911},"手动改了 ",[26,104812,104159],{},[26,104814,104489],{}," 后，刷新派生量",[171,104817,104818],{},"例如你写：",[19,104820,104822],{"className":30507,"code":104821,"language":30509,"meta":24,"style":24},"data.qpos[2] = 2.0\n",[26,104823,104824],{"__ignoreMap":24},[29,104825,104826,104829,104831,104833,104835],{"class":31,"line":32},[29,104827,104828],{"class":309},"data.qpos[",[29,104830,386],{"class":39},[29,104832,4618],{"class":309},[29,104834,355],{"class":305},[29,104836,104837],{"class":39}," 2.0\n",[171,104839,104840],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[19,104842,104843],{"className":30507,"code":104672,"language":30509,"meta":24,"style":24},[26,104844,104845],{"__ignoreMap":24},[29,104846,104847],{"class":31,"line":32},[29,104848,104672],{"class":309},[275,104850,104852],{"id":104851},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[171,104854,104855,104858,104859,104861],{},[26,104856,104857],{},"mujoco.mj_resetData(model, data)"," 会把 ",[26,104860,33530],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[19,104863,104865],{"className":30507,"code":104864,"language":30509,"meta":24,"style":24},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[26,104866,104867,104871,104881,104891],{"__ignoreMap":24},[29,104868,104869],{"class":31,"line":32},[29,104870,104655],{"class":309},[29,104872,104873,104876,104878],{"class":31,"line":43},[29,104874,104875],{"class":309},"data.qpos[:] ",[29,104877,355],{"class":305},[29,104879,104880],{"class":309}," random_qpos\n",[29,104882,104883,104886,104888],{"class":31,"line":51},[29,104884,104885],{"class":309},"data.qvel[:] ",[29,104887,355],{"class":305},[29,104889,104890],{"class":39}," 0.0\n",[29,104892,104893],{"class":31,"line":59},[29,104894,104672],{"class":309},[14,104896,101382],{"id":101381},[19,104898,104900],{"className":30507,"code":104899,"language":30509,"meta":24,"style":24},"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",[26,104901,104902,104908,104918,104922,104926,104934,104939,104943,104947,104951,104956,104960,104965,104970,104975,104979,104983,104987,104991,104995,104999,105018,105025,105037,105048,105064,105080,105084,105088,105100,105112,105120,105124,105135,105139,105155,105159,105163,105172,105176,105181,105190,105194,105207,105212,105221,105225,105229,105241],{"__ignoreMap":24},[29,104903,104904,104906],{"class":31,"line":32},[29,104905,30521],{"class":305},[29,104907,101430],{"class":309},[29,104909,104910,104912,104914,104916],{"class":31,"line":43},[29,104911,30521],{"class":305},[29,104913,31509],{"class":309},[29,104915,31512],{"class":305},[29,104917,31515],{"class":309},[29,104919,104920],{"class":31,"line":51},[29,104921,2575],{"emptyLinePlaceholder":233},[29,104923,104924],{"class":31,"line":59},[29,104925,2575],{"emptyLinePlaceholder":233},[29,104927,104928,104930,104932],{"class":31,"line":67},[29,104929,101443],{"class":39},[29,104931,13739],{"class":305},[29,104933,101448],{"class":103},[29,104935,104936],{"class":31,"line":75},[29,104937,104938],{"class":103},"\u003Cmujoco model=\"state_api\">\n",[29,104940,104941],{"class":31,"line":83},[29,104942,101458],{"class":103},[29,104944,104945],{"class":31,"line":158},[29,104946,2575],{"emptyLinePlaceholder":233},[29,104948,104949],{"class":31,"line":166},[29,104950,101467],{"class":103},[29,104952,104953],{"class":31,"line":1505},[29,104954,104955],{"class":103},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[29,104957,104958],{"class":31,"line":1788},[29,104959,2575],{"emptyLinePlaceholder":233},[29,104961,104962],{"class":31,"line":1793},[29,104963,104964],{"class":103},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[29,104966,104967],{"class":31,"line":1799},[29,104968,104969],{"class":103},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[29,104971,104972],{"class":31,"line":1804},[29,104973,104974],{"class":103},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[29,104976,104977],{"class":31,"line":1818},[29,104978,101496],{"class":103},[29,104980,104981],{"class":31,"line":1823},[29,104982,101501],{"class":103},[29,104984,104985],{"class":31,"line":1829},[29,104986,101506],{"class":103},[29,104988,104989],{"class":31,"line":1850},[29,104990,95827],{"class":103},[29,104992,104993],{"class":31,"line":1855},[29,104994,2575],{"emptyLinePlaceholder":233},[29,104996,104997],{"class":31,"line":1869},[29,104998,2575],{"emptyLinePlaceholder":233},[29,105000,105001,105003,105006,105009,105011,105014,105016],{"class":31,"line":1874},[29,105002,32076],{"class":305},[29,105004,105005],{"class":35}," print_state",[29,105007,105008],{"class":309},"(prefix: ",[29,105010,1477],{"class":39},[29,105012,105013],{"class":309},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[29,105015,95815],{"class":39},[29,105017,3914],{"class":309},[29,105019,105020,105022],{"class":31,"line":1903},[29,105021,31428],{"class":39},[29,105023,105024],{"class":309},"(prefix)\n",[29,105026,105027,105029,105031,105034],{"class":31,"line":1908},[29,105028,31428],{"class":39},[29,105030,310],{"class":309},[29,105032,105033],{"class":103},"\"  timestep:\"",[29,105035,105036],{"class":309},", model.opt.timestep)\n",[29,105038,105039,105041,105043,105046],{"class":31,"line":1925},[29,105040,31428],{"class":39},[29,105042,310],{"class":309},[29,105044,105045],{"class":103},"\"  time:\"",[29,105047,101607],{"class":309},[29,105049,105050,105052,105054,105057,105060,105062],{"class":31,"line":1930},[29,105051,31428],{"class":39},[29,105053,310],{"class":309},[29,105055,105056],{"class":103},"\"  qpos:\"",[29,105058,105059],{"class":309},", np.round(data.qpos.copy(), ",[29,105061,601],{"class":39},[29,105063,30626],{"class":309},[29,105065,105066,105068,105070,105073,105076,105078],{"class":31,"line":1935},[29,105067,31428],{"class":39},[29,105069,310],{"class":309},[29,105071,105072],{"class":103},"\"  qvel:\"",[29,105074,105075],{"class":309},", np.round(data.qvel.copy(), ",[29,105077,601],{"class":39},[29,105079,30626],{"class":309},[29,105081,105082],{"class":31,"line":1940},[29,105083,2575],{"emptyLinePlaceholder":233},[29,105085,105086],{"class":31,"line":1954},[29,105087,2575],{"emptyLinePlaceholder":233},[29,105089,105090,105092,105094,105096,105098],{"class":31,"line":1959},[29,105091,32076],{"class":305},[29,105093,2148],{"class":35},[29,105095,101527],{"class":309},[29,105097,95815],{"class":39},[29,105099,3914],{"class":309},[29,105101,105102,105104,105106,105108,105110],{"class":31,"line":2752},[29,105103,101536],{"class":309},[29,105105,355],{"class":305},[29,105107,101541],{"class":309},[29,105109,101443],{"class":39},[29,105111,316],{"class":309},[29,105113,105114,105116,105118],{"class":31,"line":2766},[29,105115,101550],{"class":309},[29,105117,355],{"class":305},[29,105119,101555],{"class":309},[29,105121,105122],{"class":31,"line":2774},[29,105123,2575],{"emptyLinePlaceholder":233},[29,105125,105126,105129,105132],{"class":31,"line":2779},[29,105127,105128],{"class":309},"    print_state(",[29,105130,105131],{"class":103},"\"initial\"",[29,105133,105134],{"class":309},", model, data)\n",[29,105136,105137],{"class":31,"line":2785},[29,105138,2575],{"emptyLinePlaceholder":233},[29,105140,105141,105143,105145,105147,105149,105151,105153],{"class":31,"line":2791},[29,105142,3376],{"class":305},[29,105144,101630],{"class":309},[29,105146,26172],{"class":305},[29,105148,32572],{"class":39},[29,105150,310],{"class":309},[29,105152,964],{"class":39},[29,105154,30915],{"class":309},[29,105156,105157],{"class":31,"line":2796},[29,105158,101645],{"class":309},[29,105160,105161],{"class":31,"line":8123},[29,105162,2575],{"emptyLinePlaceholder":233},[29,105164,105165,105167,105170],{"class":31,"line":8147},[29,105166,105128],{"class":309},[29,105168,105169],{"class":103},"\"after 50 steps\"",[29,105171,105134],{"class":309},[29,105173,105174],{"class":31,"line":8152},[29,105175,2575],{"emptyLinePlaceholder":233},[29,105177,105178],{"class":31,"line":8158},[29,105179,105180],{"class":309},"    mujoco.mj_resetData(model, data)\n",[29,105182,105183,105185,105188],{"class":31,"line":8185},[29,105184,105128],{"class":309},[29,105186,105187],{"class":103},"\"after reset\"",[29,105189,105134],{"class":309},[29,105191,105192],{"class":31,"line":8190},[29,105193,2575],{"emptyLinePlaceholder":233},[29,105195,105196,105199,105201,105203,105205],{"class":31,"line":8196},[29,105197,105198],{"class":309},"    data.qpos[",[29,105200,386],{"class":39},[29,105202,4618],{"class":309},[29,105204,355],{"class":305},[29,105206,104837],{"class":39},[29,105208,105209],{"class":31,"line":8208},[29,105210,105211],{"class":309},"    mujoco.mj_forward(model, data)\n",[29,105213,105214,105216,105219],{"class":31,"line":8220},[29,105215,105128],{"class":309},[29,105217,105218],{"class":103},"\"after manual qpos edit\"",[29,105220,105134],{"class":309},[29,105222,105223],{"class":31,"line":8232},[29,105224,2575],{"emptyLinePlaceholder":233},[29,105226,105227],{"class":31,"line":9891},[29,105228,2575],{"emptyLinePlaceholder":233},[29,105230,105231,105233,105235,105237,105239],{"class":31,"line":9916},[29,105232,1707],{"class":305},[29,105234,31349],{"class":39},[29,105236,101688],{"class":305},[29,105238,101691],{"class":103},[29,105240,3914],{"class":309},[29,105242,105243],{"class":31,"line":9939},[29,105244,101698],{"class":309},[171,105246,103699],{},[19,105248,105250],{"className":21,"code":105249,"language":23,"meta":24,"style":24},"touch ch3_python_state.py\n",[26,105251,105252],{"__ignoreMap":24},[29,105253,105254,105256],{"class":31,"line":32},[29,105255,101412],{"class":35},[29,105257,105258],{"class":103}," ch3_python_state.py\n",[171,105260,102430],{},[19,105262,105264],{"className":21,"code":105263,"language":23,"meta":24,"style":24},"python ch3_python_state.py\n",[26,105265,105266],{"__ignoreMap":24},[29,105267,105268,105270],{"class":31,"line":32},[29,105269,30509],{"class":35},[29,105271,105258],{"class":103},[275,105273,101701],{"id":101701},[171,105275,105276],{},"打印状态的函数：",[19,105278,105280],{"className":30507,"code":105279,"language":30509,"meta":24,"style":24},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[26,105281,105282],{"__ignoreMap":24},[29,105283,105284,105286,105288,105290,105292,105294,105296],{"class":31,"line":32},[29,105285,32076],{"class":305},[29,105287,105005],{"class":35},[29,105289,105008],{"class":309},[29,105291,1477],{"class":39},[29,105293,105013],{"class":309},[29,105295,95815],{"class":39},[29,105297,3914],{"class":309},[171,105299,105300,105301,105303],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[26,105302,33530],{}," 里发生了什么。",[171,105305,105306],{},"推进 50 步：",[19,105308,105310],{"className":30507,"code":105309,"language":30509,"meta":24,"style":24},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[26,105311,105312,105328],{"__ignoreMap":24},[29,105313,105314,105316,105318,105320,105322,105324,105326],{"class":31,"line":32},[29,105315,3200],{"class":305},[29,105317,101630],{"class":309},[29,105319,26172],{"class":305},[29,105321,32572],{"class":39},[29,105323,310],{"class":309},[29,105325,964],{"class":39},[29,105327,30915],{"class":309},[29,105329,105330],{"class":31,"line":43},[29,105331,101828],{"class":309},[171,105333,105334,105335,105338,105339,105341],{},"由于 ",[26,105336,105337],{},"timestep=0.01","，所以 50 步后时间约为 ",[26,105340,35458],{}," 秒。",[171,105343,105344],{},"重置：",[19,105346,105347],{"className":30507,"code":104655,"language":30509,"meta":24,"style":24},[26,105348,105349],{"__ignoreMap":24},[29,105350,105351],{"class":31,"line":32},[29,105352,104655],{"class":309},[171,105354,105355],{},"这会把时间、位置、速度恢复到初始状态。",[171,105357,105358],{},"手动改高度：",[19,105360,105362],{"className":30507,"code":105361,"language":30509,"meta":24,"style":24},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[26,105363,105364,105376],{"__ignoreMap":24},[29,105365,105366,105368,105370,105372,105374],{"class":31,"line":32},[29,105367,104828],{"class":309},[29,105369,386],{"class":39},[29,105371,4618],{"class":309},[29,105373,355],{"class":305},[29,105375,104837],{"class":39},[29,105377,105378],{"class":31,"line":43},[29,105379,104672],{"class":309},[171,105381,105382,105383,105386,105387,105390],{},"这个例子里 ",[26,105384,105385],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[26,105388,105389],{},"2.0"," 表示把小球放到更高的位置。",[275,105392,101837],{"id":101837},[19,105394,105395],{"className":30507,"code":105279,"language":30509,"meta":24,"style":24},[26,105396,105397],{"__ignoreMap":24},[29,105398,105399,105401,105403,105405,105407,105409,105411],{"class":31,"line":32},[29,105400,32076],{"class":305},[29,105402,105005],{"class":35},[29,105404,105008],{"class":309},[29,105406,1477],{"class":39},[29,105408,105013],{"class":309},[29,105410,95815],{"class":39},[29,105412,3914],{"class":309},[171,105414,105415],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[259,105417,105418,105427,105432],{},[178,105419,105420,105423,105424,105426],{},[26,105421,105422],{},"prefix","：一段文字，比如 ",[26,105425,105131],{},"，用来说明现在打印的是哪个阶段。",[178,105428,105429,105431],{},[26,105430,102214],{},"：MuJoCo 模型。",[178,105433,105434,105436],{},[26,105435,33530],{},"：MuJoCo 当前状态。",[171,105438,105439,520,105442,105445],{},[26,105440,105441],{},"prefix: str",[26,105443,105444],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[19,105447,105449],{"className":30507,"code":105448,"language":30509,"meta":24,"style":24},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[26,105450,105451],{"__ignoreMap":24},[29,105452,105453,105455,105457,105459,105461,105463],{"class":31,"line":32},[29,105454,30544],{"class":39},[29,105456,310],{"class":309},[29,105458,105056],{"class":103},[29,105460,105059],{"class":309},[29,105462,601],{"class":39},[29,105464,30626],{"class":309},[171,105466,105467,105470],{},[26,105468,105469],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[19,105472,105474],{"className":30507,"code":105473,"language":30509,"meta":24,"style":24},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[26,105475,105476,105488],{"__ignoreMap":24},[29,105477,105478,105480,105482,105484,105486],{"class":31,"line":32},[29,105479,101763],{"class":309},[29,105481,355],{"class":305},[29,105483,101541],{"class":309},[29,105485,101443],{"class":39},[29,105487,316],{"class":309},[29,105489,105490,105492,105494],{"class":31,"line":43},[29,105491,101787],{"class":309},[29,105493,355],{"class":305},[29,105495,101555],{"class":309},[171,105497,105498],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[19,105500,105502],{"className":30507,"code":105501,"language":30509,"meta":24,"style":24},"print_state(\"initial\", model, data)\n",[26,105503,105504],{"__ignoreMap":24},[29,105505,105506,105509,105511],{"class":31,"line":32},[29,105507,105508],{"class":309},"print_state(",[29,105510,105131],{"class":103},[29,105512,105134],{"class":309},[171,105514,105515,105516,105519],{},"调用刚才定义的 ",[26,105517,105518],{},"print_state"," 函数，打印初始状态。",[19,105521,105522],{"className":30507,"code":105309,"language":30509,"meta":24,"style":24},[26,105523,105524,105540],{"__ignoreMap":24},[29,105525,105526,105528,105530,105532,105534,105536,105538],{"class":31,"line":32},[29,105527,3200],{"class":305},[29,105529,101630],{"class":309},[29,105531,26172],{"class":305},[29,105533,32572],{"class":39},[29,105535,310],{"class":309},[29,105537,964],{"class":39},[29,105539,30915],{"class":309},[29,105541,105542],{"class":31,"line":43},[29,105543,101828],{"class":309},[171,105545,105546],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[19,105548,105549],{"className":30507,"code":104655,"language":30509,"meta":24,"style":24},[26,105550,105551],{"__ignoreMap":24},[29,105552,105553],{"class":31,"line":32},[29,105554,104655],{"class":309},[171,105556,105557,105558,105560,105561,105563],{},"重置 ",[26,105559,33530],{},"。注意它不会重新创建 ",[26,105562,102214],{},"，因为模型结构没有变，只是状态回到初始值。",[19,105565,105566],{"className":30507,"code":104821,"language":30509,"meta":24,"style":24},[26,105567,105568],{"__ignoreMap":24},[29,105569,105570,105572,105574,105576,105578],{"class":31,"line":32},[29,105571,104828],{"class":309},[29,105573,386],{"class":39},[29,105575,4618],{"class":309},[29,105577,355],{"class":305},[29,105579,104837],{"class":39},[171,105581,105582,105583,520,105586,520,105589,105591],{},"这行是“手动改状态”。在 freejoint 中，",[26,105584,105585],{},"qpos[0]",[26,105587,105588],{},"qpos[1]",[26,105590,105385],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[19,105593,105594],{"className":30507,"code":104672,"language":30509,"meta":24,"style":24},[26,105595,105596],{"__ignoreMap":24},[29,105597,105598],{"class":31,"line":32},[29,105599,104672],{"class":309},[171,105601,105602,105603,105605,105606,105608],{},"手动改完 ",[26,105604,104159],{}," 后，调用 ",[26,105607,104379],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105610,102445],{"id":102444},[171,105612,105613],{},"你会看到:",[259,105615,105616,105621,105626,105629],{},[178,105617,105618,105619],{},"初始时间为 ",[26,105620,499],{},[178,105622,105623,105624],{},"50 步后时间约为 ",[26,105625,35458],{},[178,105627,105628],{},"reset 后状态恢复",[178,105630,105631,105632,105635,105636],{},"手动修改 ",[26,105633,105634],{},"data.qpos[2]"," 后，小球高度变为 ",[26,105637,105389],{},[171,105639,105640,105642],{},[26,105641,105385],{}," 在这个例子中表示自由刚体的 z 坐标。",[171,105644,105645],{},"输出里可以重点看三件事：",[259,105647,105648,105656,105661],{},[178,105649,105650,105652,105653,105655],{},[26,105651,2562],{}," 是否随着 ",[26,105654,101344],{}," 增加。",[178,105657,105658,105660],{},[26,105659,104159],{}," 的 z 坐标是否因为下落而变化。",[178,105662,105663,105665,105666,28514],{},[26,105664,104481],{}," 后时间是否回到 ",[26,105667,499],{},[14,105669,102477],{"id":102476},[259,105671,105672,105678,105684,105690,105693,105702],{},[178,105673,105674,105675,28514],{},"修改 timestep 为 ",[26,105676,105677],{},"0.005",[178,105679,105680,105681,28514],{},"重新运行，检查 50 步后时间是否约为 ",[26,105682,105683],{},"0.25",[178,105685,105686,105687,28514],{},"修改重力为 ",[26,105688,105689],{},"0 0 -1.0",[178,105691,105692],{},"观察小球下降速度是否变慢。",[178,105694,102540,105695,102543,105698,105701],{},[26,105696,105697],{},"data.qpos[2] = 2.0",[26,105699,105700],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[178,105703,105704,105705,105708],{},"注释掉 ",[26,105706,105707],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105710,102582],{"id":102581},[275,105712,105714,105715,105717],{"id":105713},"修改-dataqpos-后位置没有更新","修改 ",[26,105716,101199],{}," 后位置没有更新",[171,105719,102591],{},[19,105721,105722],{"className":30507,"code":104672,"language":30509,"meta":24,"style":24},[26,105723,105724],{"__ignoreMap":24},[29,105725,105726],{"class":31,"line":32},[29,105727,104672],{"class":309},[275,105729,105730],{"id":105730},"数组维度看不懂",[171,105732,105733],{},"打印模型维度:",[19,105735,105737],{"className":30507,"code":105736,"language":30509,"meta":24,"style":24},"print(model.nq, model.nv, model.nu)\n",[26,105738,105739],{"__ignoreMap":24},[29,105740,105741,105743],{"class":31,"line":32},[29,105742,30544],{"class":39},[29,105744,105745],{"class":309},"(model.nq, model.nv, model.nu)\n",[445,105747,105748,105756],{},[448,105749,105750],{},[451,105751,105752,105754],{},[454,105753,104703],{"align":23911},[454,105755,100829],{"align":23911},[492,105757,105758,105768,105778],{},[451,105759,105760,105765],{},[497,105761,105762],{"align":23911},[26,105763,105764],{},"nq",[497,105766,105767],{"align":23911},"位置变量数量",[451,105769,105770,105775],{},[497,105771,105772],{"align":23911},[26,105773,105774],{},"nv",[497,105776,105777],{"align":23911},"速度变量数量",[451,105779,105780,105784],{},[497,105781,105782],{"align":23911},[26,105783,102291],{},[497,105785,105786],{"align":23911},"控制输入数量",[275,105788,105790,105791,105793],{"id":105789},"误以为-qpos-一定等于关节数","误以为 ",[26,105792,104159],{}," 一定等于关节数",[171,105795,105796,105797,82659,105799,105801,105802,105804],{},"不是。例如 ",[26,105798,101749],{},[26,105800,104159],{}," 是 7 维，但 ",[26,105803,104489],{}," 是 6 维。",[275,105806,105808,105809,105811],{"id":105807},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[26,105810,104159],{}," 的第几位",[171,105813,105814],{},"初学时可以先打印：",[19,105816,105818],{"className":30507,"code":105817,"language":30509,"meta":24,"style":24},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[26,105819,105820,105830,105840,105852],{"__ignoreMap":24},[29,105821,105822,105824,105826,105828],{"class":31,"line":32},[29,105823,30544],{"class":39},[29,105825,310],{"class":309},[29,105827,101568],{"class":103},[29,105829,101571],{"class":309},[29,105831,105832,105834,105836,105838],{"class":31,"line":43},[29,105833,30544],{"class":39},[29,105835,310],{"class":309},[29,105837,101580],{"class":103},[29,105839,101583],{"class":309},[29,105841,105842,105844,105846,105849],{"class":31,"line":51},[29,105843,30544],{"class":39},[29,105845,310],{"class":309},[29,105847,105848],{"class":103},"\"qpos:\"",[29,105850,105851],{"class":309},", data.qpos)\n",[29,105853,105854,105856,105858,105861],{"class":31,"line":59},[29,105855,30544],{"class":39},[29,105857,310],{"class":309},[29,105859,105860],{"class":103},"\"qvel:\"",[29,105862,105863],{"class":309},", data.qvel)\n",[171,105865,105866],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[275,105868,105869],{"id":105869},"仿真结果每次都一样",[171,105871,105872,105873,105875],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[26,105874,104159],{},"、目标点或控制输入。",[14,105877,102736],{"id":102735},[171,105879,105880,105881,24791],{},"Python 控制 MuJoCo 的核心就是读写 ",[26,105882,33530],{},[259,105884,105885,105893,105898,105903],{},[178,105886,105887,105888,101147,105890,105892],{},"用 ",[26,105889,101199],{},[26,105891,101202],{}," 读取状态。",[178,105894,105887,105895,105897],{},[26,105896,101205],{}," 写入控制。",[178,105899,105887,105900,105902],{},[26,105901,101344],{}," 推进时间。",[178,105904,105905,105906,105908],{},"手动改状态后用 ",[26,105907,104379],{}," 刷新派生量。",[171,105910,105911],{},"理解这一章后，就可以进入关节和 actuator 控制。",[223,105913,105914],{},"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":24,"searchDepth":43,"depth":43,"links":105916},[105917,105918,105919,105926,105930,105931,105932,105942],{"id":100775,"depth":43,"text":100776},{"id":100898,"depth":43,"text":100899},{"id":101173,"depth":43,"text":101174,"children":105920},[105921,105923,105925],{"id":104684,"depth":51,"text":105922},"qpos、qvel、ctrl 是什么",{"id":104762,"depth":51,"text":105924},"mj_step 和 mj_forward 的区别",{"id":104851,"depth":51,"text":104852},{"id":101381,"depth":43,"text":101382,"children":105927},[105928,105929],{"id":101701,"depth":51,"text":101701},{"id":101837,"depth":51,"text":101837},{"id":102444,"depth":43,"text":102445},{"id":102476,"depth":43,"text":102477},{"id":102581,"depth":43,"text":102582,"children":105933},[105934,105936,105937,105939,105941],{"id":105713,"depth":51,"text":105935},"修改 data.qpos 后位置没有更新",{"id":105730,"depth":51,"text":105730},{"id":105789,"depth":51,"text":105938},"误以为 qpos 一定等于关节数",{"id":105807,"depth":51,"text":105940},"不知道某个元素在 qpos 的第几位",{"id":105869,"depth":51,"text":105869},{"id":102735,"depth":43,"text":102736},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104447,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105949,"title":105950,"body":105951,"description":24,"extension":231,"meta":107641,"navigation":233,"path":107642,"seo":107643,"stem":107644,"__hash__":107645},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105952,"toc":107617},[105953,105956,105958,105961,105963,105988,105991,106010,106013,106015,106017,106041,106043,106057,106059,106100,106102,106126,106128,106131,106165,106167,106180,106183,106251,106260,106264,106267,106301,106307,106310,106314,106353,106356,106376,106380,106423,106425,106454,106457,106463,106466,106468,106862,106864,106876,106878,106889,106891,106894,106923,106931,106934,106969,106972,106974,106982,106985,106987,106998,107008,107028,107031,107067,107079,107127,107146,107188,107201,107229,107234,107255,107265,107283,107286,107320,107323,107343,107346,107365,107371,107373,107376,107382,107388,107398,107401,107407,107416,107418,107464,107466,107472,107478,107481,107484,107504,107507,107513,107519,107521,107544,107547,107550,107559,107562,107600,107602,107605,107611,107614],[10,105954,105950],{"id":105955},"_4关节actuator-与力控制",[14,105957,100776],{"id":100775},[171,105959,105960],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[171,105962,104460],{},[259,105964,105965,105971,105976,105980,105985],{},[178,105966,105967,105970],{},[26,105968,105969],{},"hinge"," 关节",[178,105972,105973],{},[26,105974,105975],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[178,105977,105978],{},[26,105979,101205],{},[178,105981,105982],{},[26,105983,105984],{},"ctrlrange",[178,105986,105987],{},"读取关节角和角速度",[171,105989,105990],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[19,105992,105994],{"className":30507,"code":105993,"language":30509,"meta":24,"style":24},"data.ctrl[0] = ...\n",[26,105995,105996],{"__ignoreMap":24},[29,105997,105998,106001,106003,106005,106007],{"class":31,"line":32},[29,105999,106000],{"class":309},"data.ctrl[",[29,106002,499],{"class":39},[29,106004,4618],{"class":309},[29,106006,355],{"class":305},[29,106008,106009],{"class":39}," ...\n",[171,106011,106012],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106014,100899],{"id":100898},[171,106016,100902],{},[19,106018,106019],{"className":21,"code":104517,"language":23,"meta":24,"style":24},[26,106020,106021],{"__ignoreMap":24},[29,106022,106023,106025,106027,106029,106031,106033,106035,106037,106039],{"class":31,"line":32},[29,106024,24749],{"class":35},[29,106026,26444],{"class":103},[29,106028,24007],{"class":103},[29,106030,26529],{"class":39},[29,106032,104532],{"class":103},[29,106034,100927],{"class":103},[29,106036,102630],{"class":103},[29,106038,100943],{"class":103},[29,106040,104541],{"class":103},[171,106042,102948],{},[19,106044,106045],{"className":21,"code":101048,"language":23,"meta":24,"style":24},[26,106046,106047],{"__ignoreMap":24},[29,106048,106049,106051,106053,106055],{"class":31,"line":32},[29,106050,24004],{"class":35},[29,106052,24007],{"class":103},[29,106054,101059],{"class":103},[29,106056,101062],{"class":103},[171,106058,102965],{},[19,106060,106062],{"className":21,"code":106061,"language":23,"meta":24,"style":24},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[26,106063,106064,106081,106090],{"__ignoreMap":24},[29,106065,106066,106068,106070,106072,106075,106077,106079],{"class":31,"line":32},[29,106067,30459],{"class":35},[29,106069,29305],{"class":103},[29,106071,25244],{"class":39},[29,106073,106074],{"class":103}," mujoco-control",[29,106076,101104],{"class":103},[29,106078,101107],{"class":39},[29,106080,101110],{"class":39},[29,106082,106083,106085,106087],{"class":31,"line":43},[29,106084,30459],{"class":35},[29,106086,101117],{"class":103},[29,106088,106089],{"class":103}," mujoco-control\n",[29,106091,106092,106094,106096,106098],{"class":31,"line":51},[29,106093,24004],{"class":35},[29,106095,24007],{"class":103},[29,106097,101059],{"class":103},[29,106099,101062],{"class":103},[171,106101,101133],{},[259,106103,106104,106110,106117,106123],{},[178,106105,106106,106109],{},[26,106107,106108],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[178,106111,106112,106114,106115,28514],{},[26,106113,101205],{}," 长度等于 ",[26,106116,102287],{},[178,106118,82351,106119,106122],{},[26,106120,106121],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[178,106124,106125],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106127,101174],{"id":101173},[171,106129,106130],{},"关节决定 body 如何运动:",[19,106132,106134],{"className":53196,"code":106133,"language":53198,"meta":24,"style":24},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[26,106135,106136],{"__ignoreMap":24},[29,106137,106138,106140,106142,106144,106146,106149,106151,106153,106155,106158,106160,106163],{"class":31,"line":32},[29,106139,1218],{"class":309},[29,106141,103085],{"class":51429},[29,106143,15095],{"class":35},[29,106145,355],{"class":309},[29,106147,106148],{"class":103},"\"hinge\"",[29,106150,53953],{"class":35},[29,106152,355],{"class":309},[29,106154,106148],{"class":103},[29,106156,106157],{"class":35}," axis",[29,106159,355],{"class":309},[29,106161,106162],{"class":103},"\"0 1 0\"",[29,106164,101273],{"class":309},[171,106166,103181],{},[259,106168,106169,106174,106177],{},[178,106170,106171,106172],{},"名字是 ",[26,106173,105969],{},[178,106175,106176],{},"类型是旋转关节",[178,106178,106179],{},"绕 y 轴旋转",[171,106181,106182],{},"actuator 决定如何施加控制:",[19,106184,106186],{"className":53196,"code":106185,"language":53198,"meta":24,"style":24},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[26,106187,106188,106197,106243],{"__ignoreMap":24},[29,106189,106190,106192,106195],{"class":31,"line":32},[29,106191,1218],{"class":309},[29,106193,106194],{"class":51429},"actuator",[29,106196,51436],{"class":309},[29,106198,106199,106201,106204,106206,106208,106211,106214,106216,106218,106221,106223,106225,106228,106230,106233,106236,106238,106241],{"class":31,"line":43},[29,106200,52273],{"class":309},[29,106202,106203],{"class":51429},"motor",[29,106205,15095],{"class":35},[29,106207,355],{"class":309},[29,106209,106210],{"class":103},"\"hinge_motor\"",[29,106212,106213],{"class":35}," joint",[29,106215,355],{"class":309},[29,106217,106148],{"class":103},[29,106219,106220],{"class":35}," gear",[29,106222,355],{"class":309},[29,106224,3853],{"class":103},[29,106226,106227],{"class":35}," ctrlrange",[29,106229,355],{"class":309},[29,106231,106232],{"class":103},"\"-2 2\"",[29,106234,106235],{"class":35}," ctrllimited",[29,106237,355],{"class":309},[29,106239,106240],{"class":103},"\"true\"",[29,106242,101273],{"class":309},[29,106244,106245,106247,106249],{"class":31,"line":51},[29,106246,51914],{"class":309},[29,106248,106194],{"class":51429},[29,106250,51436],{"class":309},[171,106252,106253,106256,106257,28514],{},[26,106254,106255],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[26,106258,106259],{},"[-2, 2]",[275,106261,106263],{"id":106262},"joint-和-actuator-的关系","joint 和 actuator 的关系",[171,106265,106266],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[445,106268,106269,106279],{},[448,106270,106271],{},[451,106272,106273,106275,106277],{},[454,106274,25882],{"align":23911},[454,106276,102825],{"align":23911},[454,106278,100863],{"align":23911},[492,106280,106281,106291],{},[451,106282,106283,106285,106288],{},[497,106284,103085],{"align":23911},[497,106286,106287],{"align":23911},"定义能怎么动",[497,106289,106290],{"align":23911},"门轴允许门旋转",[451,106292,106293,106295,106298],{},[497,106294,106194],{"align":23911},[497,106296,106297],{"align":23911},"定义怎么施力或控制",[497,106299,106300],{"align":23911},"人推门、马达带动门",[171,106302,106303,106304,106306],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[26,106305,101205],{}," 主动控制它。",[171,106308,106309],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[275,106311,106313],{"id":106312},"hinge-joint","hinge joint",[19,106315,106317],{"className":53196,"code":106316,"language":53198,"meta":24,"style":24},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[26,106318,106319],{"__ignoreMap":24},[29,106320,106321,106323,106325,106327,106329,106331,106333,106335,106337,106339,106341,106343,106346,106348,106351],{"class":31,"line":32},[29,106322,1218],{"class":309},[29,106324,103085],{"class":51429},[29,106326,15095],{"class":35},[29,106328,355],{"class":309},[29,106330,106148],{"class":103},[29,106332,53953],{"class":35},[29,106334,355],{"class":309},[29,106336,106148],{"class":103},[29,106338,106157],{"class":35},[29,106340,355],{"class":309},[29,106342,106162],{"class":103},[29,106344,106345],{"class":35}," damping",[29,106347,355],{"class":309},[29,106349,106350],{"class":103},"\"0.1\"",[29,106352,101273],{"class":309},[171,106354,106355],{},"含义：",[259,106357,106358,106364,106370],{},[178,106359,106360,106363],{},[26,106361,106362],{},"type=\"hinge\"","：只能绕一个轴旋转。",[178,106365,106366,106369],{},[26,106367,106368],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[178,106371,106372,106375],{},[26,106373,106374],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[275,106377,106379],{"id":106378},"motor-actuator","motor actuator",[19,106381,106383],{"className":53196,"code":106382,"language":53198,"meta":24,"style":24},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[26,106384,106385],{"__ignoreMap":24},[29,106386,106387,106389,106391,106393,106395,106397,106399,106401,106403,106405,106407,106409,106411,106413,106415,106417,106419,106421],{"class":31,"line":32},[29,106388,1218],{"class":309},[29,106390,106203],{"class":51429},[29,106392,15095],{"class":35},[29,106394,355],{"class":309},[29,106396,106210],{"class":103},[29,106398,106213],{"class":35},[29,106400,355],{"class":309},[29,106402,106148],{"class":103},[29,106404,106220],{"class":35},[29,106406,355],{"class":309},[29,106408,3853],{"class":103},[29,106410,106227],{"class":35},[29,106412,355],{"class":309},[29,106414,106232],{"class":103},[29,106416,106235],{"class":35},[29,106418,355],{"class":309},[29,106420,106240],{"class":103},[29,106422,101273],{"class":309},[171,106424,106355],{},[259,106426,106427,106436,106442,106448],{},[178,106428,106429,106432,106433,106435],{},[26,106430,106431],{},"joint=\"hinge\"","：这个电机作用在名为 ",[26,106434,105969],{}," 的关节上。",[178,106437,106438,106441],{},[26,106439,106440],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[178,106443,106444,106447],{},[26,106445,106446],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[178,106449,106450,106453],{},[26,106451,106452],{},"ctrllimited=\"true\"","：启用控制范围限制。",[171,106455,106456],{},"简单理解：",[19,106458,106461],{"className":106459,"code":106460,"language":5362,"meta":24},[5360],"实际施加效果 ≈ data.ctrl[0] * gear\n",[26,106462,106460],{"__ignoreMap":24},[171,106464,106465],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106467,101382],{"id":101381},[19,106469,106471],{"className":30507,"code":106470,"language":30509,"meta":24,"style":24},"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",[26,106472,106473,106480,106484,106490,106500,106504,106508,106516,106521,106526,106530,106534,106539,106544,106548,106553,106558,106563,106568,106572,106576,106580,106585,106590,106595,106599,106603,106607,106611,106623,106635,106643,106647,106657,106667,106677,106681,106694,106707,106711,106728,106742,106777,106781,106785,106796,106811,106826,106838,106842,106846,106858],{"__ignoreMap":24},[29,106474,106475,106477],{"class":31,"line":32},[29,106476,30521],{"class":305},[29,106478,106479],{"class":309}," math\n",[29,106481,106482],{"class":31,"line":43},[29,106483,2575],{"emptyLinePlaceholder":233},[29,106485,106486,106488],{"class":31,"line":51},[29,106487,30521],{"class":305},[29,106489,101430],{"class":309},[29,106491,106492,106494,106496,106498],{"class":31,"line":59},[29,106493,30521],{"class":305},[29,106495,31509],{"class":309},[29,106497,31512],{"class":305},[29,106499,31515],{"class":309},[29,106501,106502],{"class":31,"line":67},[29,106503,2575],{"emptyLinePlaceholder":233},[29,106505,106506],{"class":31,"line":75},[29,106507,2575],{"emptyLinePlaceholder":233},[29,106509,106510,106512,106514],{"class":31,"line":83},[29,106511,101443],{"class":39},[29,106513,13739],{"class":305},[29,106515,101448],{"class":103},[29,106517,106518],{"class":31,"line":158},[29,106519,106520],{"class":103},"\u003Cmujoco model=\"one_link_motor\">\n",[29,106522,106523],{"class":31,"line":166},[29,106524,106525],{"class":103},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[29,106527,106528],{"class":31,"line":1505},[29,106529,2575],{"emptyLinePlaceholder":233},[29,106531,106532],{"class":31,"line":1788},[29,106533,101467],{"class":103},[29,106535,106536],{"class":31,"line":1793},[29,106537,106538],{"class":103},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[29,106540,106541],{"class":31,"line":1799},[29,106542,106543],{"class":103},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[29,106545,106546],{"class":31,"line":1804},[29,106547,2575],{"emptyLinePlaceholder":233},[29,106549,106550],{"class":31,"line":1818},[29,106551,106552],{"class":103},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[29,106554,106555],{"class":31,"line":1823},[29,106556,106557],{"class":103},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[29,106559,106560],{"class":31,"line":1829},[29,106561,106562],{"class":103},"        \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",[29,106564,106565],{"class":31,"line":1850},[29,106566,106567],{"class":103},"      \u003C\u002Fbody>\n",[29,106569,106570],{"class":31,"line":1855},[29,106571,101496],{"class":103},[29,106573,106574],{"class":31,"line":1869},[29,106575,101501],{"class":103},[29,106577,106578],{"class":31,"line":1874},[29,106579,2575],{"emptyLinePlaceholder":233},[29,106581,106582],{"class":31,"line":1903},[29,106583,106584],{"class":103},"  \u003Cactuator>\n",[29,106586,106587],{"class":31,"line":1908},[29,106588,106589],{"class":103},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[29,106591,106592],{"class":31,"line":1925},[29,106593,106594],{"class":103},"  \u003C\u002Factuator>\n",[29,106596,106597],{"class":31,"line":1930},[29,106598,101506],{"class":103},[29,106600,106601],{"class":31,"line":1935},[29,106602,95827],{"class":103},[29,106604,106605],{"class":31,"line":1940},[29,106606,2575],{"emptyLinePlaceholder":233},[29,106608,106609],{"class":31,"line":1954},[29,106610,2575],{"emptyLinePlaceholder":233},[29,106612,106613,106615,106617,106619,106621],{"class":31,"line":1959},[29,106614,32076],{"class":305},[29,106616,2148],{"class":35},[29,106618,101527],{"class":309},[29,106620,95815],{"class":39},[29,106622,3914],{"class":309},[29,106624,106625,106627,106629,106631,106633],{"class":31,"line":2752},[29,106626,101536],{"class":309},[29,106628,355],{"class":305},[29,106630,101541],{"class":309},[29,106632,101443],{"class":39},[29,106634,316],{"class":309},[29,106636,106637,106639,106641],{"class":31,"line":2766},[29,106638,101550],{"class":309},[29,106640,355],{"class":305},[29,106642,101555],{"class":309},[29,106644,106645],{"class":31,"line":2774},[29,106646,2575],{"emptyLinePlaceholder":233},[29,106648,106649,106651,106653,106655],{"class":31,"line":2779},[29,106650,31428],{"class":39},[29,106652,310],{"class":309},[29,106654,101568],{"class":103},[29,106656,101571],{"class":309},[29,106658,106659,106661,106663,106665],{"class":31,"line":2785},[29,106660,31428],{"class":39},[29,106662,310],{"class":309},[29,106664,101580],{"class":103},[29,106666,101583],{"class":309},[29,106668,106669,106671,106673,106675],{"class":31,"line":2791},[29,106670,31428],{"class":39},[29,106672,310],{"class":309},[29,106674,101592],{"class":103},[29,106676,101595],{"class":309},[29,106678,106679],{"class":31,"line":2796},[29,106680,2575],{"emptyLinePlaceholder":233},[29,106682,106683,106685,106688,106690,106692],{"class":31,"line":8123},[29,106684,3276],{"class":305},[29,106686,106687],{"class":309}," model.nu ",[29,106689,21123],{"class":305},[29,106691,25247],{"class":39},[29,106693,3914],{"class":309},[29,106695,106696,106698,106700,106702,106705],{"class":31,"line":8147},[29,106697,103561],{"class":305},[29,106699,103564],{"class":39},[29,106701,310],{"class":309},[29,106703,106704],{"class":103},"\"expected exactly one actuator\"",[29,106706,316],{"class":309},[29,106708,106709],{"class":31,"line":8152},[29,106710,2575],{"emptyLinePlaceholder":233},[29,106712,106713,106715,106717,106719,106721,106723,106726],{"class":31,"line":8158},[29,106714,3376],{"class":305},[29,106716,31745],{"class":309},[29,106718,26172],{"class":305},[29,106720,32572],{"class":39},[29,106722,310],{"class":309},[29,106724,106725],{"class":39},"2000",[29,106727,30915],{"class":309},[29,106729,106730,106733,106735,106737,106739],{"class":31,"line":8185},[29,106731,106732],{"class":309},"        t ",[29,106734,355],{"class":305},[29,106736,31745],{"class":309},[29,106738,763],{"class":305},[29,106740,106741],{"class":309}," model.opt.timestep\n",[29,106743,106744,106747,106749,106751,106753,106756,106758,106761,106763,106765,106768,106770,106772,106774],{"class":31,"line":8190},[29,106745,106746],{"class":309},"        data.ctrl[",[29,106748,499],{"class":39},[29,106750,4618],{"class":309},[29,106752,355],{"class":305},[29,106754,106755],{"class":39}," 1.5",[29,106757,6693],{"class":305},[29,106759,106760],{"class":309}," math.sin(",[29,106762,105389],{"class":39},[29,106764,6693],{"class":305},[29,106766,106767],{"class":309}," math.pi ",[29,106769,763],{"class":305},[29,106771,61996],{"class":39},[29,106773,6693],{"class":305},[29,106775,106776],{"class":309}," t)\n",[29,106778,106779],{"class":31,"line":8196},[29,106780,101645],{"class":309},[29,106782,106783],{"class":31,"line":8208},[29,106784,2575],{"emptyLinePlaceholder":233},[29,106786,106787,106789,106791,106794],{"class":31,"line":8220},[29,106788,31428],{"class":39},[29,106790,310],{"class":309},[29,106792,106793],{"class":103},"\"time:\"",[29,106795,101607],{"class":309},[29,106797,106798,106800,106802,106805,106807,106809],{"class":31,"line":8232},[29,106799,31428],{"class":39},[29,106801,310],{"class":309},[29,106803,106804],{"class":103},"\"joint qpos:\"",[29,106806,105059],{"class":309},[29,106808,601],{"class":39},[29,106810,30626],{"class":309},[29,106812,106813,106815,106817,106820,106822,106824],{"class":31,"line":9891},[29,106814,31428],{"class":39},[29,106816,310],{"class":309},[29,106818,106819],{"class":103},"\"joint qvel:\"",[29,106821,105075],{"class":309},[29,106823,601],{"class":39},[29,106825,30626],{"class":309},[29,106827,106828,106830,106832,106835],{"class":31,"line":9916},[29,106829,31428],{"class":39},[29,106831,310],{"class":309},[29,106833,106834],{"class":103},"\"last ctrl:\"",[29,106836,106837],{"class":309},", data.ctrl.copy())\n",[29,106839,106840],{"class":31,"line":9939},[29,106841,2575],{"emptyLinePlaceholder":233},[29,106843,106844],{"class":31,"line":9963},[29,106845,2575],{"emptyLinePlaceholder":233},[29,106847,106848,106850,106852,106854,106856],{"class":31,"line":9968},[29,106849,1707],{"class":305},[29,106851,31349],{"class":39},[29,106853,101688],{"class":305},[29,106855,101691],{"class":103},[29,106857,3914],{"class":309},[29,106859,106860],{"class":31,"line":9973},[29,106861,101698],{"class":309},[171,106863,103699],{},[19,106865,106867],{"className":21,"code":106866,"language":23,"meta":24,"style":24},"touch ch4_joint_motor.py\n",[26,106868,106869],{"__ignoreMap":24},[29,106870,106871,106873],{"class":31,"line":32},[29,106872,101412],{"class":35},[29,106874,106875],{"class":103}," ch4_joint_motor.py\n",[171,106877,102430],{},[19,106879,106881],{"className":21,"code":106880,"language":23,"meta":24,"style":24},"python ch4_joint_motor.py\n",[26,106882,106883],{"__ignoreMap":24},[29,106884,106885,106887],{"class":31,"line":32},[29,106886,30509],{"class":35},[29,106888,106875],{"class":103},[275,106890,101701],{"id":101701},[171,106892,106893],{},"检查 actuator 数量：",[19,106895,106897],{"className":30507,"code":106896,"language":30509,"meta":24,"style":24},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[26,106898,106899,106911],{"__ignoreMap":24},[29,106900,106901,106903,106905,106907,106909],{"class":31,"line":32},[29,106902,1707],{"class":305},[29,106904,106687],{"class":309},[29,106906,21123],{"class":305},[29,106908,25247],{"class":39},[29,106910,3914],{"class":309},[29,106912,106913,106915,106917,106919,106921],{"class":31,"line":43},[29,106914,104024],{"class":305},[29,106916,103564],{"class":39},[29,106918,310],{"class":309},[29,106920,106704],{"class":103},[29,106922,316],{"class":309},[171,106924,106925,106927,106928,106930],{},[26,106926,102287],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[26,106929,101205],{}," 长度应该是 1。",[171,106932,106933],{},"产生正弦控制信号：",[19,106935,106937],{"className":30507,"code":106936,"language":30509,"meta":24,"style":24},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[26,106938,106939],{"__ignoreMap":24},[29,106940,106941,106943,106945,106947,106949,106951,106953,106955,106957,106959,106961,106963,106965,106967],{"class":31,"line":32},[29,106942,106000],{"class":309},[29,106944,499],{"class":39},[29,106946,4618],{"class":309},[29,106948,355],{"class":305},[29,106950,106755],{"class":39},[29,106952,6693],{"class":305},[29,106954,106760],{"class":309},[29,106956,105389],{"class":39},[29,106958,6693],{"class":305},[29,106960,106767],{"class":309},[29,106962,763],{"class":305},[29,106964,61996],{"class":39},[29,106966,6693],{"class":305},[29,106968,106776],{"class":309},[171,106970,106971],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[171,106973,101802],{},[19,106975,106976],{"className":30507,"code":104634,"language":30509,"meta":24,"style":24},[26,106977,106978],{"__ignoreMap":24},[29,106979,106980],{"class":31,"line":32},[29,106981,104634],{"class":309},[171,106983,106984],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[275,106986,101837],{"id":101837},[19,106988,106990],{"className":30507,"code":106989,"language":30509,"meta":24,"style":24},"import math\n",[26,106991,106992],{"__ignoreMap":24},[29,106993,106994,106996],{"class":31,"line":32},[29,106995,30521],{"class":305},[29,106997,106479],{"class":309},[171,106999,107000,107001,101147,107004,107007],{},"导入 Python 标准库里的数学模块。后面要用 ",[26,107002,107003],{},"math.sin",[26,107005,107006],{},"math.pi"," 生成周期变化的控制信号。",[19,107009,107010],{"className":30507,"code":103815,"language":30509,"meta":24,"style":24},[26,107011,107012,107018],{"__ignoreMap":24},[29,107013,107014,107016],{"class":31,"line":32},[29,107015,30521],{"class":305},[29,107017,101430],{"class":309},[29,107019,107020,107022,107024,107026],{"class":31,"line":43},[29,107021,30521],{"class":305},[29,107023,31509],{"class":309},[29,107025,31512],{"class":305},[29,107027,31515],{"class":309},[171,107029,107030],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[19,107032,107033],{"className":53196,"code":106316,"language":53198,"meta":24,"style":24},[26,107034,107035],{"__ignoreMap":24},[29,107036,107037,107039,107041,107043,107045,107047,107049,107051,107053,107055,107057,107059,107061,107063,107065],{"class":31,"line":32},[29,107038,1218],{"class":309},[29,107040,103085],{"class":51429},[29,107042,15095],{"class":35},[29,107044,355],{"class":309},[29,107046,106148],{"class":103},[29,107048,53953],{"class":35},[29,107050,355],{"class":309},[29,107052,106148],{"class":103},[29,107054,106157],{"class":35},[29,107056,355],{"class":309},[29,107058,106162],{"class":103},[29,107060,106345],{"class":35},[29,107062,355],{"class":309},[29,107064,106350],{"class":103},[29,107066,101273],{"class":309},[171,107068,107069,107070,107072,107073,107075,107076,107078],{},"这行定义关节。",[26,107071,105969],{}," 表示旋转关节。",[26,107074,106368],{}," 表示绕 y 轴旋转。",[26,107077,106374],{}," 表示有一点阻尼，运动不会完全无损耗。",[19,107080,107082],{"className":53196,"code":107081,"language":53198,"meta":24,"style":24},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[26,107083,107084],{"__ignoreMap":24},[29,107085,107086,107088,107090,107092,107094,107097,107099,107101,107104,107107,107109,107112,107114,107116,107118,107120,107122,107125],{"class":31,"line":32},[29,107087,1218],{"class":309},[29,107089,101249],{"class":51429},[29,107091,15095],{"class":35},[29,107093,355],{"class":309},[29,107095,107096],{"class":103},"\"link_geom\"",[29,107098,53953],{"class":35},[29,107100,355],{"class":309},[29,107102,107103],{"class":103},"\"capsule\"",[29,107105,107106],{"class":35}," fromto",[29,107108,355],{"class":309},[29,107110,107111],{"class":103},"\"0 0 0 0 0 0.5\"",[29,107113,101265],{"class":35},[29,107115,355],{"class":309},[29,107117,103907],{"class":103},[29,107119,102130],{"class":35},[29,107121,355],{"class":309},[29,107123,107124],{"class":103},"\"0.5\"",[29,107126,101273],{"class":309},[171,107128,107129,107130,107132,107133,107135,107136,107139,107140,28514,107143,107145],{},"这行定义摆杆的形状。",[26,107131,103294],{}," 是胶囊体，适合表示杆子。",[26,107134,103305],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[26,107137,107138],{},"(0,0,0)"," 延伸到 ",[26,107141,107142],{},"(0,0,0.5)",[26,107144,103299],{}," 是半径。",[19,107147,107148],{"className":53196,"code":106382,"language":53198,"meta":24,"style":24},[26,107149,107150],{"__ignoreMap":24},[29,107151,107152,107154,107156,107158,107160,107162,107164,107166,107168,107170,107172,107174,107176,107178,107180,107182,107184,107186],{"class":31,"line":32},[29,107153,1218],{"class":309},[29,107155,106203],{"class":51429},[29,107157,15095],{"class":35},[29,107159,355],{"class":309},[29,107161,106210],{"class":103},[29,107163,106213],{"class":35},[29,107165,355],{"class":309},[29,107167,106148],{"class":103},[29,107169,106220],{"class":35},[29,107171,355],{"class":309},[29,107173,3853],{"class":103},[29,107175,106227],{"class":35},[29,107177,355],{"class":309},[29,107179,106232],{"class":103},[29,107181,106235],{"class":35},[29,107183,355],{"class":309},[29,107185,106240],{"class":103},[29,107187,101273],{"class":309},[171,107189,107190,107191,107193,107194,107197,107198,107200],{},"这行定义电机。它作用在 ",[26,107192,105969],{}," 关节上。",[26,107195,107196],{},"gear"," 可以理解成放大倍数。",[26,107199,105984],{}," 限制控制输入范围。",[19,107202,107203],{"className":30507,"code":106896,"language":30509,"meta":24,"style":24},[26,107204,107205,107217],{"__ignoreMap":24},[29,107206,107207,107209,107211,107213,107215],{"class":31,"line":32},[29,107208,1707],{"class":305},[29,107210,106687],{"class":309},[29,107212,21123],{"class":305},[29,107214,25247],{"class":39},[29,107216,3914],{"class":309},[29,107218,107219,107221,107223,107225,107227],{"class":31,"line":43},[29,107220,104024],{"class":305},[29,107222,103564],{"class":39},[29,107224,310],{"class":309},[29,107226,106704],{"class":103},[29,107228,316],{"class":309},[171,107230,107231,107233],{},[26,107232,102287],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[19,107235,107237],{"className":30507,"code":107236,"language":30509,"meta":24,"style":24},"for step in range(2000):\n",[26,107238,107239],{"__ignoreMap":24},[29,107240,107241,107243,107245,107247,107249,107251,107253],{"class":31,"line":32},[29,107242,3200],{"class":305},[29,107244,31745],{"class":309},[29,107246,26172],{"class":305},[29,107248,32572],{"class":39},[29,107250,310],{"class":309},[29,107252,106725],{"class":39},[29,107254,30915],{"class":309},[171,107256,107257,107258,107260,107261,107264],{},"循环 2000 步。这里没有用 ",[26,107259,1300],{},"，而是用 ",[26,107262,107263],{},"step","，因为后面要用当前步数计算时间。",[19,107266,107268],{"className":30507,"code":107267,"language":30509,"meta":24,"style":24},"t = step * model.opt.timestep\n",[26,107269,107270],{"__ignoreMap":24},[29,107271,107272,107275,107277,107279,107281],{"class":31,"line":32},[29,107273,107274],{"class":309},"t ",[29,107276,355],{"class":305},[29,107278,31745],{"class":309},[29,107280,763],{"class":305},[29,107282,106741],{"class":309},[171,107284,107285],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[19,107287,107288],{"className":30507,"code":106936,"language":30509,"meta":24,"style":24},[26,107289,107290],{"__ignoreMap":24},[29,107291,107292,107294,107296,107298,107300,107302,107304,107306,107308,107310,107312,107314,107316,107318],{"class":31,"line":32},[29,107293,106000],{"class":309},[29,107295,499],{"class":39},[29,107297,4618],{"class":309},[29,107299,355],{"class":305},[29,107301,106755],{"class":39},[29,107303,6693],{"class":305},[29,107305,106760],{"class":309},[29,107307,105389],{"class":39},[29,107309,6693],{"class":305},[29,107311,106767],{"class":309},[29,107313,763],{"class":305},[29,107315,61996],{"class":39},[29,107317,6693],{"class":305},[29,107319,106776],{"class":309},[171,107321,107322],{},"这行给电机输入一个正弦波。拆开看：",[259,107324,107325,107331,107337],{},[178,107326,107327,107330],{},[26,107328,107329],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[178,107332,107333,107336],{},[26,107334,107335],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[178,107338,107339,107342],{},[26,107340,107341],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[171,107344,107345],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[19,107347,107349],{"className":30507,"code":107348,"language":30509,"meta":24,"style":24},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[26,107350,107351],{"__ignoreMap":24},[29,107352,107353,107355,107357,107359,107361,107363],{"class":31,"line":32},[29,107354,30544],{"class":39},[29,107356,310],{"class":309},[29,107358,106804],{"class":103},[29,107360,105059],{"class":309},[29,107362,601],{"class":39},[29,107364,30626],{"class":309},[171,107366,107367,107368,107370],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[26,107369,101199],{}," 只有一个数。",[14,107372,102445],{"id":102444},[171,107374,107375],{},"输出类似:",[19,107377,107380],{"className":107378,"code":107379,"language":5362,"meta":24},[5360],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[26,107381,107379],{"__ignoreMap":24},[171,107383,107384,107385,107387],{},"这里 ",[26,107386,106255],{}," 是电机输入。",[171,107389,107390,107393,107394,107397],{},[26,107391,107392],{},"joint qpos"," 是关节角度，单位通常是弧度。",[26,107395,107396],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[171,107399,107400],{},"角度单位提示：",[19,107402,107405],{"className":107403,"code":107404,"language":5362,"meta":24},[5360],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[26,107406,107404],{"__ignoreMap":24},[171,107408,107409,107410,107412,107413,107415],{},"如果你看到 ",[26,107411,104159],{}," 是 ",[26,107414,35458],{},"，大约就是 28.6 度。",[14,107417,102477],{"id":102476},[259,107419,107420,107427,107430,107437,107440,107448,107456],{},[178,107421,102540,107422,102543,107424,28514],{},[26,107423,106440],{},[26,107425,107426],{},"gear=\"5\"",[178,107428,107429],{},"重新运行，观察关节运动是否更剧烈。",[178,107431,102540,107432,102543,107434,28514],{},[26,107433,105984],{},[26,107435,107436],{},"-0.2 0.2",[178,107438,107439],{},"重新运行，观察控制能力是否变弱。",[178,107441,107442,107443,107445,107446,28514],{},"去掉 actuator，确认 ",[26,107444,102287],{}," 变成 ",[26,107447,499],{},[178,107449,102540,107450,102543,107452,107455],{},[26,107451,106374],{},[26,107453,107454],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[178,107457,102540,107458,102543,107460,107463],{},[26,107459,106368],{},[26,107461,107462],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107465,102582],{"id":102581},[275,107467,107469],{"id":107468},"indexerror-index-0-is-out-of-bounds",[26,107470,107471],{},"IndexError: index 0 is out of bounds",[171,107473,107474,107475,107477],{},"原因是 ",[26,107476,106121],{},"，没有 actuator。",[275,107479,107480],{"id":107480},"关节几乎不动",[171,107482,107483],{},"可能原因:",[259,107485,107486,107491,107495,107501],{},[178,107487,107488,107490],{},[26,107489,107196],{}," 太小",[178,107492,107493,107490],{},[26,107494,105984],{},[178,107496,107497,107500],{},[26,107498,107499],{},"damping"," 太大",[178,107502,107503],{},"重力方向导致运动不明显",[275,107505,107506],{"id":107506},"模型编译失败",[171,107508,107509,107510,107512],{},"检查 actuator 引用的 ",[26,107511,106431],{}," 是否存在，joint 名称是否拼写一致。",[275,107514,107516,107518],{"id":107515},"datactrl0-写了但没有效果",[26,107517,106255],{}," 写了但没有效果",[171,107520,102704],{},[259,107522,107523,107528,107531,107536,107541],{},[178,107524,107525,107527],{},[26,107526,102287],{}," 是否大于 0。",[178,107529,107530],{},"motor 是否引用了正确 joint。",[178,107532,107533,107535],{},[26,107534,107196],{}," 是否太小。",[178,107537,107538,107540],{},[26,107539,105984],{}," 是否把输入限制得太小。",[178,107542,107543],{},"body 是否真的有可动 joint。",[275,107545,107546],{"id":107546},"控制输入超过范围会怎样",[171,107548,107549],{},"如果设置了：",[19,107551,107553],{"className":53196,"code":107552,"language":53198,"meta":24,"style":24},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[26,107554,107555],{"__ignoreMap":24},[29,107556,107557],{"class":31,"line":32},[29,107558,107552],{"class":309},[171,107560,107561],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[19,107563,107565],{"className":30507,"code":107564,"language":30509,"meta":24,"style":24},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[26,107566,107567,107587],{"__ignoreMap":24},[29,107568,107569,107572,107574,107577,107579,107581,107583,107585],{"class":31,"line":32},[29,107570,107571],{"class":309},"action ",[29,107573,355],{"class":305},[29,107575,107576],{"class":309}," np.clip(action, ",[29,107578,840],{"class":305},[29,107580,105389],{"class":39},[29,107582,12610],{"class":309},[29,107584,105389],{"class":39},[29,107586,316],{"class":309},[29,107588,107589,107591,107593,107595,107597],{"class":31,"line":43},[29,107590,106000],{"class":309},[29,107592,499],{"class":39},[29,107594,4618],{"class":309},[29,107596,355],{"class":305},[29,107598,107599],{"class":309}," action\n",[14,107601,102736],{"id":102735},[171,107603,107604],{},"这一章建立了控制任务的基本形式：",[19,107606,107609],{"className":107607,"code":107608,"language":5362,"meta":24},[5360],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[26,107610,107608],{"__ignoreMap":24},[171,107612,107613],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[223,107615,107616],{},"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":24,"searchDepth":43,"depth":43,"links":107618},[107619,107620,107621,107626,107630,107631,107632,107640],{"id":100775,"depth":43,"text":100776},{"id":100898,"depth":43,"text":100899},{"id":101173,"depth":43,"text":101174,"children":107622},[107623,107624,107625],{"id":106262,"depth":51,"text":106263},{"id":106312,"depth":51,"text":106313},{"id":106378,"depth":51,"text":106379},{"id":101381,"depth":43,"text":101382,"children":107627},[107628,107629],{"id":101701,"depth":51,"text":101701},{"id":101837,"depth":51,"text":101837},{"id":102444,"depth":43,"text":102445},{"id":102476,"depth":43,"text":102477},{"id":102581,"depth":43,"text":102582,"children":107633},[107634,107635,107636,107637,107639],{"id":107468,"depth":51,"text":107471},{"id":107480,"depth":51,"text":107480},{"id":107506,"depth":51,"text":107506},{"id":107515,"depth":51,"text":107638},"data.ctrl[0] 写了但没有效果",{"id":107546,"depth":51,"text":107546},{"id":102735,"depth":43,"text":102736},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105950,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107647,"title":107648,"body":107649,"description":24,"extension":231,"meta":109558,"navigation":233,"path":109559,"seo":109560,"stem":109561,"__hash__":109562},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107650,"toc":109534},[107651,107654,107656,107659,107667,107670,107687,107690,107715,107718,107764,107766,107768,107823,107825,107844,107846,107889,107892,107909,107912,107928,107938,107945,107947,107950,107953,107987,107990,108038,108042,108045,108059,108068,108072,108075,108100,108103,108107,108120,108123,108129,108132,108147,108149,108152,108412,108414,108426,108429,108741,108743,108755,108757,108760,108775,108780,108783,108805,108808,108811,108845,108848,108852,108863,108866,108883,108886,108900,108907,108927,108934,108948,108951,108963,108978,108998,109001,109023,109026,109030,109045,109056,109071,109074,109104,109120,109149,109157,109181,109184,109202,109212,109224,109231,109240,109246,109255,109258,109260,109269,109272,109287,109289,109292,109303,109306,109317,109320,109338,109340,109357,109360,109388,109390,109394,109397,109427,109433,109436,109440,109448,109451,109453,109474,109477,109480,109496,109499,109515,109517,109520,109531],[10,107652,107648],{"id":107653},"_5viewer-可视化与-renderer-离屏渲染",[14,107655,100776],{"id":100775},[171,107657,107658],{},"本章掌握两类可视化方式:",[259,107660,107661,107664],{},[178,107662,107663],{},"交互式 viewer: 适合人工观察仿真",[178,107665,107666],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[171,107668,107669],{},"使用官方接口:",[19,107671,107673],{"className":30507,"code":107672,"language":30509,"meta":24,"style":24},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[26,107674,107675,107682],{"__ignoreMap":24},[29,107676,107677,107679],{"class":31,"line":32},[29,107678,30521],{"class":305},[29,107680,107681],{"class":309}," mujoco.viewer\n",[29,107683,107684],{"class":31,"line":43},[29,107685,107686],{"class":309},"mujoco.viewer.launch_passive(model, data)\n",[171,107688,107689],{},"以及:",[19,107691,107693],{"className":30507,"code":107692,"language":30509,"meta":24,"style":24},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[26,107694,107695,107705],{"__ignoreMap":24},[29,107696,107697,107700,107702],{"class":31,"line":32},[29,107698,107699],{"class":309},"renderer ",[29,107701,355],{"class":305},[29,107703,107704],{"class":309}," mujoco.Renderer(model)\n",[29,107706,107707,107710,107712],{"class":31,"line":43},[29,107708,107709],{"class":309},"image ",[29,107711,355],{"class":305},[29,107713,107714],{"class":309}," renderer.render()\n",[171,107716,107717],{},"新手建议先理解二者区别：",[445,107719,107720,107736],{},[448,107721,107722],{},[451,107723,107724,107727,107730,107733],{},[454,107725,107726],{"align":23911},"工具",[454,107728,107729],{"align":23911},"用途",[454,107731,107732],{"align":23911},"是否打开窗口",[454,107734,107735],{"align":23911},"常见场景",[492,107737,107738,107751],{},[451,107739,107740,107743,107746,107748],{},[497,107741,107742],{"align":23911},"Viewer",[497,107744,107745],{"align":23911},"人眼实时观察仿真",[497,107747,104794],{"align":23911},[497,107749,107750],{"align":23911},"调试模型、看控制效果",[451,107752,107753,107756,107759,107761],{},[497,107754,107755],{"align":23911},"Renderer",[497,107757,107758],{"align":23911},"生成图像数组",[497,107760,104807],{"align":23911},[497,107762,107763],{"align":23911},"保存图片、训练视觉策略、服务器批量采集",[14,107765,100899],{"id":100898},[171,107767,100902],{},[19,107769,107771],{"className":21,"code":107770,"language":23,"meta":24,"style":24},"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",[26,107772,107773,107785,107795,107803,107811],{"__ignoreMap":24},[29,107774,107775,107777,107779,107781,107783],{"class":31,"line":32},[29,107776,24749],{"class":35},[29,107778,26444],{"class":103},[29,107780,24007],{"class":103},[29,107782,26529],{"class":39},[29,107784,40],{"class":39},[29,107786,107787,107789,107791,107793],{"class":31,"line":43},[29,107788,100937],{"class":103},[29,107790,100940],{"class":103},[29,107792,100943],{"class":103},[29,107794,40],{"class":39},[29,107796,107797,107799,107801],{"class":31,"line":51},[29,107798,100950],{"class":103},[29,107800,100953],{"class":103},[29,107802,40],{"class":39},[29,107804,107805,107807,107809],{"class":31,"line":59},[29,107806,100960],{"class":103},[29,107808,100963],{"class":103},[29,107810,40],{"class":39},[29,107812,107813,107815,107817,107819,107821],{"class":31,"line":67},[29,107814,100970],{"class":103},[29,107816,100973],{"class":103},[29,107818,100976],{"class":103},[29,107820,100979],{"class":103},[29,107822,102645],{"class":103},[171,107824,102948],{},[19,107826,107828],{"className":21,"code":107827,"language":23,"meta":24,"style":24},"pip install \"mujoco>=2.3\" numpy pillow\n",[26,107829,107830],{"__ignoreMap":24},[29,107831,107832,107834,107836,107838,107841],{"class":31,"line":32},[29,107833,24004],{"class":35},[29,107835,24007],{"class":103},[29,107837,101059],{"class":103},[29,107839,107840],{"class":103}," numpy",[29,107842,107843],{"class":103}," pillow\n",[171,107845,102965],{},[19,107847,107849],{"className":21,"code":107848,"language":23,"meta":24,"style":24},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[26,107850,107851,107868,107877],{"__ignoreMap":24},[29,107852,107853,107855,107857,107859,107862,107864,107866],{"class":31,"line":32},[29,107854,30459],{"class":35},[29,107856,29305],{"class":103},[29,107858,25244],{"class":39},[29,107860,107861],{"class":103}," mujoco-render",[29,107863,101104],{"class":103},[29,107865,101107],{"class":39},[29,107867,101110],{"class":39},[29,107869,107870,107872,107874],{"class":31,"line":43},[29,107871,30459],{"class":35},[29,107873,101117],{"class":103},[29,107875,107876],{"class":103}," mujoco-render\n",[29,107878,107879,107881,107883,107885,107887],{"class":31,"line":51},[29,107880,24004],{"class":35},[29,107882,24007],{"class":103},[29,107884,101059],{"class":103},[29,107886,107840],{"class":103},[29,107888,107843],{"class":103},[171,107890,107891],{},"离屏渲染后端:",[19,107893,107895],{"className":21,"code":107894,"language":23,"meta":24,"style":24},"export MUJOCO_GL=egl\n",[26,107896,107897],{"__ignoreMap":24},[29,107898,107899,107901,107904,107906],{"class":31,"line":32},[29,107900,25171],{"class":305},[29,107902,107903],{"class":309}," MUJOCO_GL",[29,107905,355],{"class":305},[29,107907,107908],{"class":309},"egl\n",[171,107910,107911],{},"或:",[19,107913,107915],{"className":21,"code":107914,"language":23,"meta":24,"style":24},"export MUJOCO_GL=osmesa\n",[26,107916,107917],{"__ignoreMap":24},[29,107918,107919,107921,107923,107925],{"class":31,"line":32},[29,107920,25171],{"class":305},[29,107922,107903],{"class":309},[29,107924,355],{"class":305},[29,107926,107927],{"class":309},"osmesa\n",[171,107929,107930,107931,107934,107935,28514],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[26,107932,107933],{},"egl"," 失败，再尝试 ",[26,107936,107937],{},"osmesa",[171,107939,107940,107941,107944],{},"如果你在本机桌面环境运行，通常先不要设置 ",[26,107942,107943],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,107946,101174],{"id":101173},[171,107948,107949],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[171,107951,107952],{},"典型 viewer 流程:",[19,107954,107956],{"className":30507,"code":107955,"language":30509,"meta":24,"style":24},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[26,107957,107958,107971,107978,107982],{"__ignoreMap":24},[29,107959,107960,107963,107966,107968],{"class":31,"line":32},[29,107961,107962],{"class":305},"with",[29,107964,107965],{"class":309}," mujoco.viewer.launch_passive(model, data) ",[29,107967,31512],{"class":305},[29,107969,107970],{"class":309}," viewer:\n",[29,107972,107973,107975],{"class":31,"line":43},[29,107974,2426],{"class":305},[29,107976,107977],{"class":309}," viewer.is_running():\n",[29,107979,107980],{"class":31,"line":51},[29,107981,101645],{"class":309},[29,107983,107984],{"class":31,"line":59},[29,107985,107986],{"class":309},"        viewer.sync()\n",[171,107988,107989],{},"典型 renderer 流程:",[19,107991,107993],{"className":30507,"code":107992,"language":30509,"meta":24,"style":24},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[26,107994,107995,108021,108025,108030],{"__ignoreMap":24},[29,107996,107997,107999,108001,108004,108006,108008,108010,108012,108014,108016,108019],{"class":31,"line":32},[29,107998,107699],{"class":309},[29,108000,355],{"class":305},[29,108002,108003],{"class":309}," mujoco.Renderer(model, ",[29,108005,208],{"class":5391},[29,108007,355],{"class":305},[29,108009,42471],{"class":39},[29,108011,12610],{"class":309},[29,108013,204],{"class":5391},[29,108015,355],{"class":305},[29,108017,108018],{"class":39},"640",[29,108020,316],{"class":309},[29,108022,108023],{"class":31,"line":43},[29,108024,104634],{"class":309},[29,108026,108027],{"class":31,"line":51},[29,108028,108029],{"class":309},"renderer.update_scene(data)\n",[29,108031,108032,108034,108036],{"class":31,"line":59},[29,108033,107709],{"class":309},[29,108035,355],{"class":305},[29,108037,107714],{"class":309},[275,108039,108041],{"id":108040},"viewer-的同步逻辑","viewer 的同步逻辑",[171,108043,108044],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[19,108046,108048],{"className":30507,"code":108047,"language":30509,"meta":24,"style":24},"mujoco.mj_step(model, data)\nviewer.sync()\n",[26,108049,108050,108054],{"__ignoreMap":24},[29,108051,108052],{"class":31,"line":32},[29,108053,104634],{"class":309},[29,108055,108056],{"class":31,"line":43},[29,108057,108058],{"class":309},"viewer.sync()\n",[171,108060,108061,108063,108064,108067],{},[26,108062,101344],{}," 负责算物理，",[26,108065,108066],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[275,108069,108071],{"id":108070},"为什么要-sleep","为什么要 sleep",[171,108073,108074],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[19,108076,108078],{"className":30507,"code":108077,"language":30509,"meta":24,"style":24},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[26,108079,108080],{"__ignoreMap":24},[29,108081,108082,108085,108087,108090,108092,108095,108097],{"class":31,"line":32},[29,108083,108084],{"class":309},"sleep_time ",[29,108086,355],{"class":305},[29,108088,108089],{"class":309}," model.opt.timestep ",[29,108091,840],{"class":305},[29,108093,108094],{"class":309}," (time.time() ",[29,108096,840],{"class":305},[29,108098,108099],{"class":309}," step_start)\n",[171,108101,108102],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[275,108104,108106],{"id":108105},"renderer-输出是什么","renderer 输出是什么",[19,108108,108110],{"className":30507,"code":108109,"language":30509,"meta":24,"style":24},"image = renderer.render()\n",[26,108111,108112],{"__ignoreMap":24},[29,108113,108114,108116,108118],{"class":31,"line":32},[29,108115,107709],{"class":309},[29,108117,355],{"class":305},[29,108119,107714],{"class":309},[171,108121,108122],{},"得到的是 NumPy 数组，形状通常是：",[19,108124,108127],{"className":108125,"code":108126,"language":5362,"meta":24},[5360],"(height, width, 3)\n",[26,108128,108126],{"__ignoreMap":24},[171,108130,108131],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[19,108133,108135],{"className":30507,"code":108134,"language":30509,"meta":24,"style":24},"Image.fromarray(image).save(\"render_output.png\")\n",[26,108136,108137],{"__ignoreMap":24},[29,108138,108139,108142,108145],{"class":31,"line":32},[29,108140,108141],{"class":309},"Image.fromarray(image).save(",[29,108143,108144],{"class":103},"\"render_output.png\"",[29,108146,316],{"class":309},[14,108148,101382],{"id":101381},[171,108150,108151],{},"交互式 Viewer:",[19,108153,108155],{"className":30507,"code":108154,"language":30509,"meta":24,"style":24},"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",[26,108156,108157,108163,108167,108173,108179,108183,108187,108195,108200,108204,108208,108212,108217,108222,108226,108230,108234,108239,108243,108247,108251,108255,108259,108263,108275,108287,108295,108299,108309,108329,108339,108344,108349,108353,108370,108383,108388,108392,108396,108408],{"__ignoreMap":24},[29,108158,108159,108161],{"class":31,"line":32},[29,108160,30521],{"class":305},[29,108162,31958],{"class":309},[29,108164,108165],{"class":31,"line":43},[29,108166,2575],{"emptyLinePlaceholder":233},[29,108168,108169,108171],{"class":31,"line":51},[29,108170,30521],{"class":305},[29,108172,101430],{"class":309},[29,108174,108175,108177],{"class":31,"line":59},[29,108176,30521],{"class":305},[29,108178,107681],{"class":309},[29,108180,108181],{"class":31,"line":67},[29,108182,2575],{"emptyLinePlaceholder":233},[29,108184,108185],{"class":31,"line":75},[29,108186,2575],{"emptyLinePlaceholder":233},[29,108188,108189,108191,108193],{"class":31,"line":83},[29,108190,101443],{"class":39},[29,108192,13739],{"class":305},[29,108194,101448],{"class":103},[29,108196,108197],{"class":31,"line":158},[29,108198,108199],{"class":103},"\u003Cmujoco model=\"viewer_demo\">\n",[29,108201,108202],{"class":31,"line":166},[29,108203,101458],{"class":103},[29,108205,108206],{"class":31,"line":1505},[29,108207,2575],{"emptyLinePlaceholder":233},[29,108209,108210],{"class":31,"line":1788},[29,108211,101467],{"class":103},[29,108213,108214],{"class":31,"line":1793},[29,108215,108216],{"class":103},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[29,108218,108219],{"class":31,"line":1799},[29,108220,108221],{"class":103},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[29,108223,108224],{"class":31,"line":1804},[29,108225,2575],{"emptyLinePlaceholder":233},[29,108227,108228],{"class":31,"line":1818},[29,108229,101481],{"class":103},[29,108231,108232],{"class":31,"line":1823},[29,108233,101486],{"class":103},[29,108235,108236],{"class":31,"line":1829},[29,108237,108238],{"class":103},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[29,108240,108241],{"class":31,"line":1850},[29,108242,101496],{"class":103},[29,108244,108245],{"class":31,"line":1855},[29,108246,101501],{"class":103},[29,108248,108249],{"class":31,"line":1869},[29,108250,101506],{"class":103},[29,108252,108253],{"class":31,"line":1874},[29,108254,95827],{"class":103},[29,108256,108257],{"class":31,"line":1903},[29,108258,2575],{"emptyLinePlaceholder":233},[29,108260,108261],{"class":31,"line":1908},[29,108262,2575],{"emptyLinePlaceholder":233},[29,108264,108265,108267,108269,108271,108273],{"class":31,"line":1925},[29,108266,32076],{"class":305},[29,108268,2148],{"class":35},[29,108270,101527],{"class":309},[29,108272,95815],{"class":39},[29,108274,3914],{"class":309},[29,108276,108277,108279,108281,108283,108285],{"class":31,"line":1930},[29,108278,101536],{"class":309},[29,108280,355],{"class":305},[29,108282,101541],{"class":309},[29,108284,101443],{"class":39},[29,108286,316],{"class":309},[29,108288,108289,108291,108293],{"class":31,"line":1935},[29,108290,101550],{"class":309},[29,108292,355],{"class":305},[29,108294,101555],{"class":309},[29,108296,108297],{"class":31,"line":1940},[29,108298,2575],{"emptyLinePlaceholder":233},[29,108300,108301,108303,108305,108307],{"class":31,"line":1954},[29,108302,34307],{"class":305},[29,108304,107965],{"class":309},[29,108306,31512],{"class":305},[29,108308,107970],{"class":309},[29,108310,108311,108314,108317,108319,108322,108324,108327],{"class":31,"line":1959},[29,108312,108313],{"class":305},"        while",[29,108315,108316],{"class":309}," viewer.is_running() ",[29,108318,30591],{"class":305},[29,108320,108321],{"class":309}," data.time ",[29,108323,1218],{"class":305},[29,108325,108326],{"class":39}," 5.0",[29,108328,3914],{"class":309},[29,108330,108331,108334,108336],{"class":31,"line":2752},[29,108332,108333],{"class":309},"            step_start ",[29,108335,355],{"class":305},[29,108337,108338],{"class":309}," time.time()\n",[29,108340,108341],{"class":31,"line":2766},[29,108342,108343],{"class":309},"            mujoco.mj_step(model, data)\n",[29,108345,108346],{"class":31,"line":2774},[29,108347,108348],{"class":309},"            viewer.sync()\n",[29,108350,108351],{"class":31,"line":2779},[29,108352,2575],{"emptyLinePlaceholder":233},[29,108354,108355,108358,108360,108362,108364,108366,108368],{"class":31,"line":2785},[29,108356,108357],{"class":309},"            sleep_time ",[29,108359,355],{"class":305},[29,108361,108089],{"class":309},[29,108363,840],{"class":305},[29,108365,108094],{"class":309},[29,108367,840],{"class":305},[29,108369,108099],{"class":309},[29,108371,108372,108374,108377,108379,108381],{"class":31,"line":2791},[29,108373,4817],{"class":305},[29,108375,108376],{"class":309}," sleep_time ",[29,108378,1268],{"class":305},[29,108380,4268],{"class":39},[29,108382,3914],{"class":309},[29,108384,108385],{"class":31,"line":2796},[29,108386,108387],{"class":309},"                time.sleep(sleep_time)\n",[29,108389,108390],{"class":31,"line":8123},[29,108391,2575],{"emptyLinePlaceholder":233},[29,108393,108394],{"class":31,"line":8147},[29,108395,2575],{"emptyLinePlaceholder":233},[29,108397,108398,108400,108402,108404,108406],{"class":31,"line":8152},[29,108399,1707],{"class":305},[29,108401,31349],{"class":39},[29,108403,101688],{"class":305},[29,108405,101691],{"class":103},[29,108407,3914],{"class":309},[29,108409,108410],{"class":31,"line":8158},[29,108411,101698],{"class":309},[171,108413,103699],{},[19,108415,108417],{"className":21,"code":108416,"language":23,"meta":24,"style":24},"touch ch5_viewer.py\n",[26,108418,108419],{"__ignoreMap":24},[29,108420,108421,108423],{"class":31,"line":32},[29,108422,101412],{"class":35},[29,108424,108425],{"class":103}," ch5_viewer.py\n",[171,108427,108428],{},"离屏 Renderer 保存图片:",[19,108430,108432],{"className":30507,"code":108431,"language":30509,"meta":24,"style":24},"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",[26,108433,108434,108446,108450,108456,108466,108470,108474,108482,108487,108491,108495,108499,108503,108508,108512,108516,108520,108524,108528,108532,108536,108540,108544,108548,108552,108564,108576,108584,108609,108613,108629,108633,108637,108652,108661,108665,108679,108684,108689,108693,108705,108717,108721,108725,108737],{"__ignoreMap":24},[29,108435,108436,108438,108441,108443],{"class":31,"line":32},[29,108437,30866],{"class":305},[29,108439,108440],{"class":309}," pathlib ",[29,108442,30521],{"class":305},[29,108444,108445],{"class":309}," Path\n",[29,108447,108448],{"class":31,"line":43},[29,108449,2575],{"emptyLinePlaceholder":233},[29,108451,108452,108454],{"class":31,"line":51},[29,108453,30521],{"class":305},[29,108455,101430],{"class":309},[29,108457,108458,108460,108462,108464],{"class":31,"line":59},[29,108459,30866],{"class":305},[29,108461,47392],{"class":39},[29,108463,47395],{"class":305},[29,108465,47398],{"class":309},[29,108467,108468],{"class":31,"line":67},[29,108469,2575],{"emptyLinePlaceholder":233},[29,108471,108472],{"class":31,"line":75},[29,108473,2575],{"emptyLinePlaceholder":233},[29,108475,108476,108478,108480],{"class":31,"line":83},[29,108477,101443],{"class":39},[29,108479,13739],{"class":305},[29,108481,101448],{"class":103},[29,108483,108484],{"class":31,"line":158},[29,108485,108486],{"class":103},"\u003Cmujoco model=\"renderer_demo\">\n",[29,108488,108489],{"class":31,"line":166},[29,108490,101458],{"class":103},[29,108492,108493],{"class":31,"line":1505},[29,108494,2575],{"emptyLinePlaceholder":233},[29,108496,108497],{"class":31,"line":1788},[29,108498,101467],{"class":103},[29,108500,108501],{"class":31,"line":1793},[29,108502,108216],{"class":103},[29,108504,108505],{"class":31,"line":1799},[29,108506,108507],{"class":103},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[29,108509,108510],{"class":31,"line":1804},[29,108511,108221],{"class":103},[29,108513,108514],{"class":31,"line":1818},[29,108515,2575],{"emptyLinePlaceholder":233},[29,108517,108518],{"class":31,"line":1823},[29,108519,101481],{"class":103},[29,108521,108522],{"class":31,"line":1829},[29,108523,101486],{"class":103},[29,108525,108526],{"class":31,"line":1850},[29,108527,108238],{"class":103},[29,108529,108530],{"class":31,"line":1855},[29,108531,101496],{"class":103},[29,108533,108534],{"class":31,"line":1869},[29,108535,101501],{"class":103},[29,108537,108538],{"class":31,"line":1874},[29,108539,101506],{"class":103},[29,108541,108542],{"class":31,"line":1903},[29,108543,95827],{"class":103},[29,108545,108546],{"class":31,"line":1908},[29,108547,2575],{"emptyLinePlaceholder":233},[29,108549,108550],{"class":31,"line":1925},[29,108551,2575],{"emptyLinePlaceholder":233},[29,108553,108554,108556,108558,108560,108562],{"class":31,"line":1930},[29,108555,32076],{"class":305},[29,108557,2148],{"class":35},[29,108559,101527],{"class":309},[29,108561,95815],{"class":39},[29,108563,3914],{"class":309},[29,108565,108566,108568,108570,108572,108574],{"class":31,"line":1935},[29,108567,101536],{"class":309},[29,108569,355],{"class":305},[29,108571,101541],{"class":309},[29,108573,101443],{"class":39},[29,108575,316],{"class":309},[29,108577,108578,108580,108582],{"class":31,"line":1940},[29,108579,101550],{"class":309},[29,108581,355],{"class":305},[29,108583,101555],{"class":309},[29,108585,108586,108589,108591,108593,108595,108597,108599,108601,108603,108605,108607],{"class":31,"line":1954},[29,108587,108588],{"class":309},"    renderer ",[29,108590,355],{"class":305},[29,108592,108003],{"class":309},[29,108594,208],{"class":5391},[29,108596,355],{"class":305},[29,108598,42471],{"class":39},[29,108600,12610],{"class":309},[29,108602,204],{"class":5391},[29,108604,355],{"class":305},[29,108606,108018],{"class":39},[29,108608,316],{"class":309},[29,108610,108611],{"class":31,"line":1959},[29,108612,2575],{"emptyLinePlaceholder":233},[29,108614,108615,108617,108619,108621,108623,108625,108627],{"class":31,"line":2752},[29,108616,3376],{"class":305},[29,108618,101630],{"class":309},[29,108620,26172],{"class":305},[29,108622,32572],{"class":39},[29,108624,310],{"class":309},[29,108626,619],{"class":39},[29,108628,30915],{"class":309},[29,108630,108631],{"class":31,"line":2766},[29,108632,101645],{"class":309},[29,108634,108635],{"class":31,"line":2774},[29,108636,2575],{"emptyLinePlaceholder":233},[29,108638,108639,108642,108645,108647,108650],{"class":31,"line":2779},[29,108640,108641],{"class":309},"    renderer.update_scene(data, ",[29,108643,108644],{"class":5391},"camera",[29,108646,355],{"class":305},[29,108648,108649],{"class":103},"\"fixed_camera\"",[29,108651,316],{"class":309},[29,108653,108654,108657,108659],{"class":31,"line":2785},[29,108655,108656],{"class":309},"    image ",[29,108658,355],{"class":305},[29,108660,107714],{"class":309},[29,108662,108663],{"class":31,"line":2791},[29,108664,2575],{"emptyLinePlaceholder":233},[29,108666,108667,108670,108672,108675,108677],{"class":31,"line":2796},[29,108668,108669],{"class":309},"    output_path ",[29,108671,355],{"class":305},[29,108673,108674],{"class":309}," Path(",[29,108676,108144],{"class":103},[29,108678,316],{"class":309},[29,108680,108681],{"class":31,"line":8123},[29,108682,108683],{"class":309},"    Image.fromarray(image).save(output_path)\n",[29,108685,108686],{"class":31,"line":8147},[29,108687,108688],{"class":309},"    renderer.close()\n",[29,108690,108691],{"class":31,"line":8152},[29,108692,2575],{"emptyLinePlaceholder":233},[29,108694,108695,108697,108699,108702],{"class":31,"line":8158},[29,108696,31428],{"class":39},[29,108698,310],{"class":309},[29,108700,108701],{"class":103},"\"saved:\"",[29,108703,108704],{"class":309},", output_path.resolve())\n",[29,108706,108707,108709,108711,108714],{"class":31,"line":8185},[29,108708,31428],{"class":39},[29,108710,310],{"class":309},[29,108712,108713],{"class":103},"\"image shape:\"",[29,108715,108716],{"class":309},", image.shape)\n",[29,108718,108719],{"class":31,"line":8190},[29,108720,2575],{"emptyLinePlaceholder":233},[29,108722,108723],{"class":31,"line":8196},[29,108724,2575],{"emptyLinePlaceholder":233},[29,108726,108727,108729,108731,108733,108735],{"class":31,"line":8208},[29,108728,1707],{"class":305},[29,108730,31349],{"class":39},[29,108732,101688],{"class":305},[29,108734,101691],{"class":103},[29,108736,3914],{"class":309},[29,108738,108739],{"class":31,"line":8220},[29,108740,101698],{"class":309},[171,108742,103699],{},[19,108744,108746],{"className":21,"code":108745,"language":23,"meta":24,"style":24},"touch ch5_renderer.py\n",[26,108747,108748],{"__ignoreMap":24},[29,108749,108750,108752],{"class":31,"line":32},[29,108751,101412],{"class":35},[29,108753,108754],{"class":103}," ch5_renderer.py\n",[275,108756,101701],{"id":101701},[171,108758,108759],{},"viewer 上下文：",[19,108761,108763],{"className":30507,"code":108762,"language":30509,"meta":24,"style":24},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[26,108764,108765],{"__ignoreMap":24},[29,108766,108767,108769,108771,108773],{"class":31,"line":32},[29,108768,107962],{"class":305},[29,108770,107965],{"class":309},[29,108772,31512],{"class":305},[29,108774,107970],{"class":309},[171,108776,108777,108779],{},[26,108778,107962],{}," 语句会创建窗口，并在退出时自动清理资源。",[171,108781,108782],{},"窗口循环：",[19,108784,108786],{"className":30507,"code":108785,"language":30509,"meta":24,"style":24},"while viewer.is_running() and data.time \u003C 5.0:\n",[26,108787,108788],{"__ignoreMap":24},[29,108789,108790,108793,108795,108797,108799,108801,108803],{"class":31,"line":32},[29,108791,108792],{"class":305},"while",[29,108794,108316],{"class":309},[29,108796,30591],{"class":305},[29,108798,108321],{"class":309},[29,108800,1218],{"class":305},[29,108802,108326],{"class":39},[29,108804,3914],{"class":309},[171,108806,108807],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[171,108809,108810],{},"固定相机：",[19,108812,108814],{"className":53196,"code":108813,"language":53198,"meta":24,"style":24},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[26,108815,108816],{"__ignoreMap":24},[29,108817,108818,108820,108822,108824,108826,108828,108830,108832,108835,108838,108840,108843],{"class":31,"line":32},[29,108819,1218],{"class":309},[29,108821,108644],{"class":51429},[29,108823,15095],{"class":35},[29,108825,355],{"class":309},[29,108827,108649],{"class":103},[29,108829,101235],{"class":35},[29,108831,355],{"class":309},[29,108833,108834],{"class":103},"\"1.5 -2.0 1.2\"",[29,108836,108837],{"class":35}," xyaxes",[29,108839,355],{"class":309},[29,108841,108842],{"class":103},"\"1 0.75 0 0 0 1\"",[29,108844,101273],{"class":309},[171,108846,108847],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[275,108849,108851],{"id":108850},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[19,108853,108855],{"className":30507,"code":108854,"language":30509,"meta":24,"style":24},"import time\n",[26,108856,108857],{"__ignoreMap":24},[29,108858,108859,108861],{"class":31,"line":32},[29,108860,30521],{"class":305},[29,108862,31958],{"class":309},[171,108864,108865],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[19,108867,108869],{"className":30507,"code":108868,"language":30509,"meta":24,"style":24},"import mujoco\nimport mujoco.viewer\n",[26,108870,108871,108877],{"__ignoreMap":24},[29,108872,108873,108875],{"class":31,"line":32},[29,108874,30521],{"class":305},[29,108876,101430],{"class":309},[29,108878,108879,108881],{"class":31,"line":43},[29,108880,30521],{"class":305},[29,108882,107681],{"class":309},[171,108884,108885],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[19,108887,108888],{"className":30507,"code":108762,"language":30509,"meta":24,"style":24},[26,108889,108890],{"__ignoreMap":24},[29,108891,108892,108894,108896,108898],{"class":31,"line":32},[29,108893,107962],{"class":305},[29,108895,107965],{"class":309},[29,108897,31512],{"class":305},[29,108899,107970],{"class":309},[171,108901,108902,108903,108906],{},"打开一个 viewer 窗口。",[26,108904,108905],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[19,108908,108909],{"className":30507,"code":108785,"language":30509,"meta":24,"style":24},[26,108910,108911],{"__ignoreMap":24},[29,108912,108913,108915,108917,108919,108921,108923,108925],{"class":31,"line":32},[29,108914,108792],{"class":305},[29,108916,108316],{"class":309},[29,108918,30591],{"class":305},[29,108920,108321],{"class":309},[29,108922,1218],{"class":305},[29,108924,108326],{"class":39},[29,108926,3914],{"class":309},[171,108928,108929,108930,108933],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[26,108931,108932],{},"viewer.is_running()"," 会变成 false，循环结束。",[19,108935,108937],{"className":30507,"code":108936,"language":30509,"meta":24,"style":24},"step_start = time.time()\n",[26,108938,108939],{"__ignoreMap":24},[29,108940,108941,108944,108946],{"class":31,"line":32},[29,108942,108943],{"class":309},"step_start ",[29,108945,355],{"class":305},[29,108947,108338],{"class":309},[171,108949,108950],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[19,108952,108953],{"className":30507,"code":108047,"language":30509,"meta":24,"style":24},[26,108954,108955,108959],{"__ignoreMap":24},[29,108956,108957],{"class":31,"line":32},[29,108958,104634],{"class":309},[29,108960,108961],{"class":31,"line":43},[29,108962,108058],{"class":309},[171,108964,108965,108967,108968,108970,108971,108973,108974,108977],{},[26,108966,101344],{}," 推进物理仿真。",[26,108969,108066],{}," 把最新的 ",[26,108972,33530],{}," 同步到窗口里显示。没有 ",[26,108975,108976],{},"sync()","，窗口可能看不到最新状态。",[19,108979,108980],{"className":30507,"code":108077,"language":30509,"meta":24,"style":24},[26,108981,108982],{"__ignoreMap":24},[29,108983,108984,108986,108988,108990,108992,108994,108996],{"class":31,"line":32},[29,108985,108084],{"class":309},[29,108987,355],{"class":305},[29,108989,108089],{"class":309},[29,108991,840],{"class":305},[29,108993,108094],{"class":309},[29,108995,840],{"class":305},[29,108997,108099],{"class":309},[171,108999,109000],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[19,109002,109004],{"className":30507,"code":109003,"language":30509,"meta":24,"style":24},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[26,109005,109006,109018],{"__ignoreMap":24},[29,109007,109008,109010,109012,109014,109016],{"class":31,"line":32},[29,109009,1707],{"class":305},[29,109011,108376],{"class":309},[29,109013,1268],{"class":305},[29,109015,4268],{"class":39},[29,109017,3914],{"class":309},[29,109019,109020],{"class":31,"line":43},[29,109021,109022],{"class":309},"    time.sleep(sleep_time)\n",[171,109024,109025],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[275,109027,109029],{"id":109028},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[19,109031,109033],{"className":30507,"code":109032,"language":30509,"meta":24,"style":24},"from pathlib import Path\n",[26,109034,109035],{"__ignoreMap":24},[29,109036,109037,109039,109041,109043],{"class":31,"line":32},[29,109038,30866],{"class":305},[29,109040,108440],{"class":309},[29,109042,30521],{"class":305},[29,109044,108445],{"class":309},[171,109046,109047,109048,109051,109052,109055],{},"导入 ",[26,109049,109050],{},"Path","，用来处理文件路径。相比直接写字符串，",[26,109053,109054],{},"Path(\"render_output.png\")"," 更清晰。",[19,109057,109059],{"className":30507,"code":109058,"language":30509,"meta":24,"style":24},"from PIL import Image\n",[26,109060,109061],{"__ignoreMap":24},[29,109062,109063,109065,109067,109069],{"class":31,"line":32},[29,109064,30866],{"class":305},[29,109066,47392],{"class":39},[29,109068,47395],{"class":305},[29,109070,47398],{"class":309},[171,109072,109073],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[19,109075,109076],{"className":53196,"code":108813,"language":53198,"meta":24,"style":24},[26,109077,109078],{"__ignoreMap":24},[29,109079,109080,109082,109084,109086,109088,109090,109092,109094,109096,109098,109100,109102],{"class":31,"line":32},[29,109081,1218],{"class":309},[29,109083,108644],{"class":51429},[29,109085,15095],{"class":35},[29,109087,355],{"class":309},[29,109089,108649],{"class":103},[29,109091,101235],{"class":35},[29,109093,355],{"class":309},[29,109095,108834],{"class":103},[29,109097,108837],{"class":35},[29,109099,355],{"class":309},[29,109101,108842],{"class":103},[29,109103,101273],{"class":309},[171,109105,109106,109107,109109,109110,109112,109113,109116,109117,109119],{},"定义一个相机。",[26,109108,79939],{}," 是相机名字。",[26,109111,104275],{}," 是相机在世界里的位置。",[26,109114,109115],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[26,109118,104275],{}," 来调视角。",[19,109121,109123],{"className":30507,"code":109122,"language":30509,"meta":24,"style":24},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[26,109124,109125],{"__ignoreMap":24},[29,109126,109127,109129,109131,109133,109135,109137,109139,109141,109143,109145,109147],{"class":31,"line":32},[29,109128,107699],{"class":309},[29,109130,355],{"class":305},[29,109132,108003],{"class":309},[29,109134,208],{"class":5391},[29,109136,355],{"class":305},[29,109138,42471],{"class":39},[29,109140,12610],{"class":309},[29,109142,204],{"class":5391},[29,109144,355],{"class":305},[29,109146,108018],{"class":39},[29,109148,316],{"class":309},[171,109150,109151,109152,101147,109154,109156],{},"创建离屏渲染器。",[26,109153,208],{},[26,109155,204],{}," 决定输出图片大小。",[19,109158,109159],{"className":30507,"code":101805,"language":30509,"meta":24,"style":24},[26,109160,109161,109177],{"__ignoreMap":24},[29,109162,109163,109165,109167,109169,109171,109173,109175],{"class":31,"line":32},[29,109164,3200],{"class":305},[29,109166,101630],{"class":309},[29,109168,26172],{"class":305},[29,109170,32572],{"class":39},[29,109172,310],{"class":309},[29,109174,619],{"class":39},[29,109176,30915],{"class":309},[29,109178,109179],{"class":31,"line":43},[29,109180,101828],{"class":309},[171,109182,109183],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[19,109185,109187],{"className":30507,"code":109186,"language":30509,"meta":24,"style":24},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[26,109188,109189],{"__ignoreMap":24},[29,109190,109191,109194,109196,109198,109200],{"class":31,"line":32},[29,109192,109193],{"class":309},"renderer.update_scene(data, ",[29,109195,108644],{"class":5391},[29,109197,355],{"class":305},[29,109199,108649],{"class":103},[29,109201,316],{"class":309},[171,109203,109204,109205,109207,109208,109211],{},"告诉 renderer：用当前 ",[26,109206,33530],{}," 的状态更新画面，并使用名为 ",[26,109209,109210],{},"fixed_camera"," 的相机视角。",[19,109213,109214],{"className":30507,"code":108109,"language":30509,"meta":24,"style":24},[26,109215,109216],{"__ignoreMap":24},[29,109217,109218,109220,109222],{"class":31,"line":32},[29,109219,107709],{"class":309},[29,109221,355],{"class":305},[29,109223,107714],{"class":309},[171,109225,109226,109227,109230],{},"真正渲染出图像。",[26,109228,109229],{},"image"," 是一个 NumPy 数组，不是文件。",[19,109232,109234],{"className":30507,"code":109233,"language":30509,"meta":24,"style":24},"Image.fromarray(image).save(output_path)\n",[26,109235,109236],{"__ignoreMap":24},[29,109237,109238],{"class":31,"line":32},[29,109239,109233],{"class":309},[171,109241,109242,109243,28514],{},"把数组转换成图片，并保存到 ",[26,109244,109245],{},"render_output.png",[19,109247,109249],{"className":30507,"code":109248,"language":30509,"meta":24,"style":24},"renderer.close()\n",[26,109250,109251],{"__ignoreMap":24},[29,109252,109253],{"class":31,"line":32},[29,109254,109248],{"class":309},[171,109256,109257],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109259,102445],{"id":102444},[171,109261,109262,109263,109265,109266,28514],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[26,109264,109245],{},"，并输出图像数组形状，例如 ",[26,109267,109268],{},"(480, 640, 3)",[171,109270,109271],{},"如果图片里看不到方块，先检查：",[259,109273,109274,109277,109280],{},[178,109275,109276],{},"方块是否掉到相机视野外。",[178,109278,109279],{},"camera 位置是否合理。",[178,109281,109282,109283,109286],{},"是否在 ",[26,109284,109285],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109288,102477],{"id":102476},[171,109290,109291],{},"运行 viewer:",[19,109293,109295],{"className":21,"code":109294,"language":23,"meta":24,"style":24},"python ch5_viewer.py\n",[26,109296,109297],{"__ignoreMap":24},[29,109298,109299,109301],{"class":31,"line":32},[29,109300,30509],{"class":35},[29,109302,108425],{"class":103},[171,109304,109305],{},"运行 renderer:",[19,109307,109309],{"className":21,"code":109308,"language":23,"meta":24,"style":24},"python ch5_renderer.py\n",[26,109310,109311],{"__ignoreMap":24},[29,109312,109313,109315],{"class":31,"line":32},[29,109314,30509],{"class":35},[29,109316,108754],{"class":103},[171,109318,109319],{},"如果在服务器上运行:",[19,109321,109323],{"className":21,"code":109322,"language":23,"meta":24,"style":24},"MUJOCO_GL=egl python ch5_renderer.py\n",[26,109324,109325],{"__ignoreMap":24},[29,109326,109327,109329,109331,109333,109336],{"class":31,"line":32},[29,109328,107943],{"class":309},[29,109330,355],{"class":305},[29,109332,107933],{"class":103},[29,109334,109335],{"class":35}," python",[29,109337,108754],{"class":103},[171,109339,107911],{},[19,109341,109343],{"className":21,"code":109342,"language":23,"meta":24,"style":24},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[26,109344,109345],{"__ignoreMap":24},[29,109346,109347,109349,109351,109353,109355],{"class":31,"line":32},[29,109348,107943],{"class":309},[29,109350,355],{"class":305},[29,109352,107937],{"class":103},[29,109354,109335],{"class":35},[29,109356,108754],{"class":103},[171,109358,109359],{},"再做几个练习：",[259,109361,109362,109369,109372,109378],{},[178,109363,109364,109365,109368],{},"把 renderer 分辨率改成 ",[26,109366,109367],{},"height=240, width=320","，观察输出 shape。",[178,109370,109371],{},"把方块颜色改成蓝色，重新保存图片。",[178,109373,109374,109375,109377],{},"把相机 ",[26,109376,104275],{}," 改远一点，观察画面中物体是否变小。",[178,109379,109380,109381,102543,109384,109387],{},"把 viewer 示例中的 ",[26,109382,109383],{},"data.time \u003C 5.0",[26,109385,109386],{},"data.time \u003C 20.0","，观察更长时间。",[14,109389,102582],{"id":102581},[275,109391,109393],{"id":109392},"viewer-窗口打不开","viewer 窗口打不开",[171,109395,109396],{},"安装:",[19,109398,109400],{"className":21,"code":109399,"language":23,"meta":24,"style":24},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[26,109401,109402],{"__ignoreMap":24},[29,109403,109404,109406,109408,109410,109412,109414,109416,109418,109420,109422,109424],{"class":31,"line":32},[29,109405,24749],{"class":35},[29,109407,26444],{"class":103},[29,109409,24007],{"class":103},[29,109411,26529],{"class":39},[29,109413,102635],{"class":103},[29,109415,100963],{"class":103},[29,109417,102640],{"class":103},[29,109419,100976],{"class":103},[29,109421,100982],{"class":103},[29,109423,100973],{"class":103},[29,109425,109426],{"class":103}," libXinerama\n",[275,109428,109430],{"id":109429},"glfwerror",[26,109431,109432],{},"GLFWError",[171,109434,109435],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[275,109437,109439],{"id":109438},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[171,109441,109442,109443,82668,109445,109447],{},"尝试 ",[26,109444,101166],{},[26,109446,101169],{},"。可能存在版本差异。",[275,109449,109450],{"id":109450},"保存图片是黑的",[171,109452,102704],{},[259,109454,109455,109458,109461,109471],{},[178,109456,109457],{},"XML 里是否有 light。",[178,109459,109460],{},"相机是否对着模型。",[178,109462,109463,109464,109467,109468,28514],{},"是否先 ",[26,109465,109466],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[26,109469,109470],{},"renderer.render()",[178,109472,109473],{},"物体是否已经掉出视野。",[275,109475,109476],{"id":109476},"远程服务器没有显示器",[171,109478,109479],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[19,109481,109482],{"className":21,"code":109322,"language":23,"meta":24,"style":24},[26,109483,109484],{"__ignoreMap":24},[29,109485,109486,109488,109490,109492,109494],{"class":31,"line":32},[29,109487,107943],{"class":309},[29,109489,355],{"class":305},[29,109491,107933],{"class":103},[29,109493,109335],{"class":35},[29,109495,108754],{"class":103},[171,109497,109498],{},"如果 EGL 不可用，再尝试：",[19,109500,109501],{"className":21,"code":109342,"language":23,"meta":24,"style":24},[26,109502,109503],{"__ignoreMap":24},[29,109504,109505,109507,109509,109511,109513],{"class":31,"line":32},[29,109506,107943],{"class":309},[29,109508,355],{"class":305},[29,109510,107937],{"class":103},[29,109512,109335],{"class":35},[29,109514,108754],{"class":103},[14,109516,102736],{"id":102735},[171,109518,109519],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[259,109521,109522,109525,109528],{},[178,109523,109524],{},"先用 viewer 看模型和控制是否正常。",[178,109526,109527],{},"再用 renderer 保存图片或构造视觉观测。",[178,109529,109530],{},"最后把状态、动作、图像、奖励组织成训练数据。",[223,109532,109533],{},"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":24,"searchDepth":43,"depth":43,"links":109535},[109536,109537,109538,109543,109548,109549,109550,109557],{"id":100775,"depth":43,"text":100776},{"id":100898,"depth":43,"text":100899},{"id":101173,"depth":43,"text":101174,"children":109539},[109540,109541,109542],{"id":108040,"depth":51,"text":108041},{"id":108070,"depth":51,"text":108071},{"id":108105,"depth":51,"text":108106},{"id":101381,"depth":43,"text":101382,"children":109544},[109545,109546,109547],{"id":101701,"depth":51,"text":101701},{"id":108850,"depth":51,"text":108851},{"id":109028,"depth":51,"text":109029},{"id":102444,"depth":43,"text":102445},{"id":102476,"depth":43,"text":102477},{"id":102581,"depth":43,"text":102582,"children":109551},[109552,109553,109554,109555,109556],{"id":109392,"depth":51,"text":109393},{"id":109429,"depth":51,"text":109432},{"id":109438,"depth":51,"text":109439},{"id":109450,"depth":51,"text":109450},{"id":109476,"depth":51,"text":109476},{"id":102735,"depth":43,"text":102736},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107648,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109564,"title":109565,"body":109566,"description":24,"extension":231,"meta":111477,"navigation":233,"path":111478,"seo":111479,"stem":111480,"__hash__":111481},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109567,"toc":111453},[109568,109571,109573,109576,109578,109597,109600,109606,109609,109611,109613,109637,109639,109653,109655,109696,109698,109709,109711,109714,109720,109723,109757,109760,109792,109795,109827,109831,109834,109874,109877,109883,109886,109892,109896,109899,109905,109908,109912,109915,109955,109957,109970,109973,109975,110557,110559,110571,110574,110585,110587,110590,110609,110621,110624,110645,110648,110651,110694,110697,110700,110720,110727,110729,110747,110762,110765,110771,110774,110780,110797,110804,110835,110846,110880,110891,110908,110917,110925,110930,110944,110947,110968,110974,110988,110993,111023,111033,111058,111066,111089,111092,111108,111111,111119,111125,111147,111160,111181,111190,111229,111240,111242,111245,111251,111254,111257,111263,111266,111286,111289,111291,111330,111332,111335,111343,111346,111349,111376,111379,111389,111395,111398,111404,111406,111412,111416,111419,111421,111424,111448,111451],[10,109569,109565],{"id":109570},"_6控制任务cartpole",[14,109572,100776],{"id":100775},[171,109574,109575],{},"本章搭建一个最小 Cartpole 控制任务。",[171,109577,104460],{},[259,109579,109580,109583,109585,109588,109591,109594],{},[178,109581,109582],{},"slide joint",[178,109584,106313],{},[178,109586,109587],{},"cart force actuator",[178,109589,109590],{},"状态观测",[178,109592,109593],{},"简单控制循环",[178,109595,109596],{},"reward 设计雏形",[171,109598,109599],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[19,109601,109604],{"className":109602,"code":109603,"language":5362,"meta":24},[5360],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[26,109605,109603],{"__ignoreMap":24},[171,109607,109608],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109610,100899],{"id":100898},[171,109612,100902],{},[19,109614,109615],{"className":21,"code":104517,"language":23,"meta":24,"style":24},[26,109616,109617],{"__ignoreMap":24},[29,109618,109619,109621,109623,109625,109627,109629,109631,109633,109635],{"class":31,"line":32},[29,109620,24749],{"class":35},[29,109622,26444],{"class":103},[29,109624,24007],{"class":103},[29,109626,26529],{"class":39},[29,109628,104532],{"class":103},[29,109630,100927],{"class":103},[29,109632,102630],{"class":103},[29,109634,100943],{"class":103},[29,109636,104541],{"class":103},[171,109638,102948],{},[19,109640,109641],{"className":21,"code":101048,"language":23,"meta":24,"style":24},[26,109642,109643],{"__ignoreMap":24},[29,109644,109645,109647,109649,109651],{"class":31,"line":32},[29,109646,24004],{"class":35},[29,109648,24007],{"class":103},[29,109650,101059],{"class":103},[29,109652,101062],{"class":103},[171,109654,102965],{},[19,109656,109658],{"className":21,"code":109657,"language":23,"meta":24,"style":24},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[26,109659,109660,109677,109686],{"__ignoreMap":24},[29,109661,109662,109664,109666,109668,109671,109673,109675],{"class":31,"line":32},[29,109663,30459],{"class":35},[29,109665,29305],{"class":103},[29,109667,25244],{"class":39},[29,109669,109670],{"class":103}," mujoco-cartpole",[29,109672,101104],{"class":103},[29,109674,101107],{"class":39},[29,109676,101110],{"class":39},[29,109678,109679,109681,109683],{"class":31,"line":43},[29,109680,30459],{"class":35},[29,109682,101117],{"class":103},[29,109684,109685],{"class":103}," mujoco-cartpole\n",[29,109687,109688,109690,109692,109694],{"class":31,"line":51},[29,109689,24004],{"class":35},[29,109691,24007],{"class":103},[29,109693,101059],{"class":103},[29,109695,101062],{"class":103},[171,109697,101133],{},[259,109699,109700,109703,109706],{},[178,109701,109702],{},"本章不依赖 Gymnasium。",[178,109704,109705],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[178,109707,109708],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109710,101174],{"id":101173},[171,109712,109713],{},"Cartpole 的模型结构:",[19,109715,109718],{"className":109716,"code":109717,"language":5362,"meta":24},[5360],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[26,109719,109717],{"__ignoreMap":24},[171,109721,109722],{},"小车通过 slide joint 左右移动:",[19,109724,109726],{"className":53196,"code":109725,"language":53198,"meta":24,"style":24},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[26,109727,109728],{"__ignoreMap":24},[29,109729,109730,109732,109734,109736,109738,109741,109743,109745,109748,109750,109752,109755],{"class":31,"line":32},[29,109731,1218],{"class":309},[29,109733,103085],{"class":51429},[29,109735,15095],{"class":35},[29,109737,355],{"class":309},[29,109739,109740],{"class":103},"\"cart_x\"",[29,109742,53953],{"class":35},[29,109744,355],{"class":309},[29,109746,109747],{"class":103},"\"slide\"",[29,109749,106157],{"class":35},[29,109751,355],{"class":309},[29,109753,109754],{"class":103},"\"1 0 0\"",[29,109756,101273],{"class":309},[171,109758,109759],{},"杆子通过 hinge joint 旋转:",[19,109761,109763],{"className":53196,"code":109762,"language":53198,"meta":24,"style":24},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[26,109764,109765],{"__ignoreMap":24},[29,109766,109767,109769,109771,109773,109775,109778,109780,109782,109784,109786,109788,109790],{"class":31,"line":32},[29,109768,1218],{"class":309},[29,109770,103085],{"class":51429},[29,109772,15095],{"class":35},[29,109774,355],{"class":309},[29,109776,109777],{"class":103},"\"pole_hinge\"",[29,109779,53953],{"class":35},[29,109781,355],{"class":309},[29,109783,106148],{"class":103},[29,109785,106157],{"class":35},[29,109787,355],{"class":309},[29,109789,106162],{"class":103},[29,109791,101273],{"class":309},[171,109793,109794],{},"控制力作用在小车 slide joint 上:",[19,109796,109798],{"className":53196,"code":109797,"language":53198,"meta":24,"style":24},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[26,109799,109800],{"__ignoreMap":24},[29,109801,109802,109804,109806,109808,109810,109813,109815,109817,109819,109821,109823,109825],{"class":31,"line":32},[29,109803,1218],{"class":309},[29,109805,106203],{"class":51429},[29,109807,15095],{"class":35},[29,109809,355],{"class":309},[29,109811,109812],{"class":103},"\"cart_motor\"",[29,109814,106213],{"class":35},[29,109816,355],{"class":309},[29,109818,109740],{"class":103},[29,109820,106220],{"class":35},[29,109822,355],{"class":309},[29,109824,54445],{"class":103},[29,109826,101273],{"class":309},[275,109828,109830],{"id":109829},"cartpole-的状态是什么","Cartpole 的状态是什么",[171,109832,109833],{},"这个简化模型有两个关节：",[445,109835,109836,109847],{},[448,109837,109838],{},[451,109839,109840,109842,109844],{},[454,109841,102888],{"align":23911},[454,109843,23912],{"align":23911},[454,109845,109846],{"align":23911},"对应状态",[492,109848,109849,109862],{},[451,109850,109851,109856,109859],{},[497,109852,109853],{"align":23911},[26,109854,109855],{},"cart_x",[497,109857,109858],{"align":23911},"slide",[497,109860,109861],{"align":23911},"小车 x 位置",[451,109863,109864,109869,109871],{},[497,109865,109866],{"align":23911},[26,109867,109868],{},"pole_hinge",[497,109870,105969],{"align":23911},[497,109872,109873],{"align":23911},"杆子角度",[171,109875,109876],{},"所以：",[19,109878,109881],{"className":109879,"code":109880,"language":5362,"meta":24},[5360],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[26,109882,109880],{"__ignoreMap":24},[171,109884,109885],{},"把它们拼起来就是观测：",[19,109887,109890],{"className":109888,"code":109889,"language":5362,"meta":24},[5360],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[26,109891,109889],{"__ignoreMap":24},[275,109893,109895],{"id":109894},"action-是什么","action 是什么",[171,109897,109898],{},"本章只有一个 actuator：",[19,109900,109903],{"className":109901,"code":109902,"language":5362,"meta":24},[5360],"data.ctrl[0] = action\n",[26,109904,109902],{"__ignoreMap":24},[171,109906,109907],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[275,109909,109911],{"id":109910},"reward-是什么","reward 是什么",[171,109913,109914],{},"奖励函数：",[19,109916,109918],{"className":30507,"code":109917,"language":30509,"meta":24,"style":24},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[26,109919,109920],{"__ignoreMap":24},[29,109921,109922,109924,109927,109929,109931,109933,109936,109938,109941,109943,109945,109947,109950,109952],{"class":31,"line":32},[29,109923,17221],{"class":305},[29,109925,109926],{"class":39}," float",[29,109928,310],{"class":309},[29,109930,102532],{"class":39},[29,109932,52400],{"class":305},[29,109934,109935],{"class":39}," 0.1",[29,109937,6693],{"class":305},[29,109939,109940],{"class":309}," cart_x ",[29,109942,763],{"class":305},[29,109944,109940],{"class":309},[29,109946,840],{"class":305},[29,109948,109949],{"class":309}," pole_angle ",[29,109951,763],{"class":305},[29,109953,109954],{"class":309}," pole_angle)\n",[171,109956,106355],{},[259,109958,109959,109964,109967],{},[178,109960,109961,109962,28514],{},"基础奖励是 ",[26,109963,102532],{},[178,109965,109966],{},"小车离中心越远，扣分越多。",[178,109968,109969],{},"杆子角度越大，扣分越多。",[171,109971,109972],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,109974,101382],{"id":101381},[19,109976,109978],{"className":30507,"code":109977,"language":30509,"meta":24,"style":24},"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",[26,109979,109980,109986,109996,110000,110004,110012,110017,110021,110025,110029,110034,110038,110043,110048,110053,110057,110062,110067,110072,110076,110080,110084,110088,110092,110097,110101,110105,110109,110113,110117,110127,110134,110138,110142,110156,110170,110183,110213,110217,110221,110233,110245,110253,110257,110270,110274,110278,110287,110291,110307,110317,110330,110343,110347,110370,110388,110392,110404,110408,110412,110422,110432,110436,110452,110493,110497,110517,110533,110537,110541,110553],{"__ignoreMap":24},[29,109981,109982,109984],{"class":31,"line":32},[29,109983,30521],{"class":305},[29,109985,101430],{"class":309},[29,109987,109988,109990,109992,109994],{"class":31,"line":43},[29,109989,30521],{"class":305},[29,109991,31509],{"class":309},[29,109993,31512],{"class":305},[29,109995,31515],{"class":309},[29,109997,109998],{"class":31,"line":51},[29,109999,2575],{"emptyLinePlaceholder":233},[29,110001,110002],{"class":31,"line":59},[29,110003,2575],{"emptyLinePlaceholder":233},[29,110005,110006,110008,110010],{"class":31,"line":67},[29,110007,101443],{"class":39},[29,110009,13739],{"class":305},[29,110011,101448],{"class":103},[29,110013,110014],{"class":31,"line":75},[29,110015,110016],{"class":103},"\u003Cmujoco model=\"cartpole\">\n",[29,110018,110019],{"class":31,"line":83},[29,110020,101458],{"class":103},[29,110022,110023],{"class":31,"line":158},[29,110024,2575],{"emptyLinePlaceholder":233},[29,110026,110027],{"class":31,"line":166},[29,110028,101467],{"class":103},[29,110030,110031],{"class":31,"line":1505},[29,110032,110033],{"class":103},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[29,110035,110036],{"class":31,"line":1788},[29,110037,2575],{"emptyLinePlaceholder":233},[29,110039,110040],{"class":31,"line":1793},[29,110041,110042],{"class":103},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[29,110044,110045],{"class":31,"line":1799},[29,110046,110047],{"class":103},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[29,110049,110050],{"class":31,"line":1804},[29,110051,110052],{"class":103},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[29,110054,110055],{"class":31,"line":1818},[29,110056,2575],{"emptyLinePlaceholder":233},[29,110058,110059],{"class":31,"line":1823},[29,110060,110061],{"class":103},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[29,110063,110064],{"class":31,"line":1829},[29,110065,110066],{"class":103},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[29,110068,110069],{"class":31,"line":1850},[29,110070,110071],{"class":103},"        \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",[29,110073,110074],{"class":31,"line":1855},[29,110075,106567],{"class":103},[29,110077,110078],{"class":31,"line":1869},[29,110079,101496],{"class":103},[29,110081,110082],{"class":31,"line":1874},[29,110083,101501],{"class":103},[29,110085,110086],{"class":31,"line":1903},[29,110087,2575],{"emptyLinePlaceholder":233},[29,110089,110090],{"class":31,"line":1908},[29,110091,106584],{"class":103},[29,110093,110094],{"class":31,"line":1925},[29,110095,110096],{"class":103},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[29,110098,110099],{"class":31,"line":1930},[29,110100,106594],{"class":103},[29,110102,110103],{"class":31,"line":1935},[29,110104,101506],{"class":103},[29,110106,110107],{"class":31,"line":1940},[29,110108,95827],{"class":103},[29,110110,110111],{"class":31,"line":1954},[29,110112,2575],{"emptyLinePlaceholder":233},[29,110114,110115],{"class":31,"line":1959},[29,110116,2575],{"emptyLinePlaceholder":233},[29,110118,110119,110121,110124],{"class":31,"line":2752},[29,110120,32076],{"class":305},[29,110122,110123],{"class":35}," get_observation",[29,110125,110126],{"class":309},"(data: mujoco.MjData) -> np.ndarray:\n",[29,110128,110129,110131],{"class":31,"line":2766},[29,110130,4265],{"class":305},[29,110132,110133],{"class":309}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[29,110135,110136],{"class":31,"line":2774},[29,110137,2575],{"emptyLinePlaceholder":233},[29,110139,110140],{"class":31,"line":2779},[29,110141,2575],{"emptyLinePlaceholder":233},[29,110143,110144,110146,110149,110152,110154],{"class":31,"line":2785},[29,110145,32076],{"class":305},[29,110147,110148],{"class":35}," compute_reward",[29,110150,110151],{"class":309},"(obs: np.ndarray) -> ",[29,110153,349],{"class":39},[29,110155,3914],{"class":309},[29,110157,110158,110161,110163,110166,110168],{"class":31,"line":2791},[29,110159,110160],{"class":309},"    cart_x ",[29,110162,355],{"class":305},[29,110164,110165],{"class":309}," obs[",[29,110167,499],{"class":39},[29,110169,33375],{"class":309},[29,110171,110172,110175,110177,110179,110181],{"class":31,"line":2796},[29,110173,110174],{"class":309},"    pole_angle ",[29,110176,355],{"class":305},[29,110178,110165],{"class":309},[29,110180,525],{"class":39},[29,110182,33375],{"class":309},[29,110184,110185,110187,110189,110191,110193,110195,110197,110199,110201,110203,110205,110207,110209,110211],{"class":31,"line":8123},[29,110186,4265],{"class":305},[29,110188,109926],{"class":39},[29,110190,310],{"class":309},[29,110192,102532],{"class":39},[29,110194,52400],{"class":305},[29,110196,109935],{"class":39},[29,110198,6693],{"class":305},[29,110200,109940],{"class":309},[29,110202,763],{"class":305},[29,110204,109940],{"class":309},[29,110206,840],{"class":305},[29,110208,109949],{"class":309},[29,110210,763],{"class":305},[29,110212,109954],{"class":309},[29,110214,110215],{"class":31,"line":8147},[29,110216,2575],{"emptyLinePlaceholder":233},[29,110218,110219],{"class":31,"line":8152},[29,110220,2575],{"emptyLinePlaceholder":233},[29,110222,110223,110225,110227,110229,110231],{"class":31,"line":8158},[29,110224,32076],{"class":305},[29,110226,2148],{"class":35},[29,110228,101527],{"class":309},[29,110230,95815],{"class":39},[29,110232,3914],{"class":309},[29,110234,110235,110237,110239,110241,110243],{"class":31,"line":8185},[29,110236,101536],{"class":309},[29,110238,355],{"class":305},[29,110240,101541],{"class":309},[29,110242,101443],{"class":39},[29,110244,316],{"class":309},[29,110246,110247,110249,110251],{"class":31,"line":8190},[29,110248,101550],{"class":309},[29,110250,355],{"class":305},[29,110252,101555],{"class":309},[29,110254,110255],{"class":31,"line":8196},[29,110256,2575],{"emptyLinePlaceholder":233},[29,110258,110259,110261,110263,110265,110267],{"class":31,"line":8208},[29,110260,105198],{"class":309},[29,110262,525],{"class":39},[29,110264,4618],{"class":309},[29,110266,355],{"class":305},[29,110268,110269],{"class":39}," 0.1\n",[29,110271,110272],{"class":31,"line":8220},[29,110273,105211],{"class":309},[29,110275,110276],{"class":31,"line":8232},[29,110277,2575],{"emptyLinePlaceholder":233},[29,110279,110280,110283,110285],{"class":31,"line":9891},[29,110281,110282],{"class":309},"    total_reward ",[29,110284,355],{"class":305},[29,110286,104890],{"class":39},[29,110288,110289],{"class":31,"line":9916},[29,110290,2575],{"emptyLinePlaceholder":233},[29,110292,110293,110295,110297,110299,110301,110303,110305],{"class":31,"line":9939},[29,110294,3376],{"class":305},[29,110296,31745],{"class":309},[29,110298,26172],{"class":305},[29,110300,32572],{"class":39},[29,110302,310],{"class":309},[29,110304,6585],{"class":39},[29,110306,30915],{"class":309},[29,110308,110309,110312,110314],{"class":31,"line":9963},[29,110310,110311],{"class":309},"        obs ",[29,110313,355],{"class":305},[29,110315,110316],{"class":309}," get_observation(data)\n",[29,110318,110319,110322,110324,110326,110328],{"class":31,"line":9968},[29,110320,110321],{"class":309},"        pole_angle ",[29,110323,355],{"class":305},[29,110325,110165],{"class":309},[29,110327,525],{"class":39},[29,110329,33375],{"class":309},[29,110331,110332,110335,110337,110339,110341],{"class":31,"line":9973},[29,110333,110334],{"class":309},"        pole_angular_velocity ",[29,110336,355],{"class":305},[29,110338,110165],{"class":309},[29,110340,380],{"class":39},[29,110342,33375],{"class":309},[29,110344,110345],{"class":31,"line":9978},[29,110346,2575],{"emptyLinePlaceholder":233},[29,110348,110349,110352,110354,110357,110359,110361,110363,110365,110367],{"class":31,"line":9987},[29,110350,110351],{"class":309},"        action ",[29,110353,355],{"class":305},[29,110355,110356],{"class":39}," 2.0",[29,110358,6693],{"class":305},[29,110360,109949],{"class":309},[29,110362,789],{"class":305},[29,110364,61996],{"class":39},[29,110366,6693],{"class":305},[29,110368,110369],{"class":309}," pole_angular_velocity\n",[29,110371,110372,110374,110376,110378,110380,110382,110384,110386],{"class":31,"line":9992},[29,110373,110351],{"class":309},[29,110375,355],{"class":305},[29,110377,107576],{"class":309},[29,110379,840],{"class":305},[29,110381,102532],{"class":39},[29,110383,12610],{"class":309},[29,110385,102532],{"class":39},[29,110387,316],{"class":309},[29,110389,110390],{"class":31,"line":9998},[29,110391,2575],{"emptyLinePlaceholder":233},[29,110393,110394,110396,110398,110400,110402],{"class":31,"line":10019},[29,110395,106746],{"class":309},[29,110397,499],{"class":39},[29,110399,4618],{"class":309},[29,110401,355],{"class":305},[29,110403,107599],{"class":309},[29,110405,110406],{"class":31,"line":10025},[29,110407,101645],{"class":309},[29,110409,110410],{"class":31,"line":10039},[29,110411,2575],{"emptyLinePlaceholder":233},[29,110413,110414,110417,110419],{"class":31,"line":10045},[29,110415,110416],{"class":309},"        reward ",[29,110418,355],{"class":305},[29,110420,110421],{"class":309}," compute_reward(get_observation(data))\n",[29,110423,110424,110427,110429],{"class":31,"line":10072},[29,110425,110426],{"class":309},"        total_reward ",[29,110428,9652],{"class":305},[29,110430,110431],{"class":309}," reward\n",[29,110433,110434],{"class":31,"line":10081},[29,110435,2575],{"emptyLinePlaceholder":233},[29,110437,110438,110440,110442,110444,110446,110448,110450],{"class":31,"line":10087},[29,110439,2672],{"class":305},[29,110441,31745],{"class":309},[29,110443,636],{"class":305},[29,110445,5929],{"class":39},[29,110447,101688],{"class":305},[29,110449,4268],{"class":39},[29,110451,3914],{"class":309},[29,110453,110454,110456,110458,110461,110464,110467,110470,110472,110475,110478,110480,110482,110484,110486,110489,110491],{"class":31,"line":10095},[29,110455,34779],{"class":39},[29,110457,310],{"class":309},[29,110459,110460],{"class":103},"\"step:\"",[29,110462,110463],{"class":309},", step, ",[29,110465,110466],{"class":103},"\"obs:\"",[29,110468,110469],{"class":309},", np.round(obs, ",[29,110471,380],{"class":39},[29,110473,110474],{"class":309},"), ",[29,110476,110477],{"class":103},"\"action:\"",[29,110479,12610],{"class":309},[29,110481,32147],{"class":39},[29,110483,310],{"class":309},[29,110485,349],{"class":39},[29,110487,110488],{"class":309},"(action), ",[29,110490,380],{"class":39},[29,110492,30626],{"class":309},[29,110494,110495],{"class":31,"line":10100},[29,110496,2575],{"emptyLinePlaceholder":233},[29,110498,110499,110501,110503,110506,110508,110510,110513,110515],{"class":31,"line":16779},[29,110500,31428],{"class":39},[29,110502,310],{"class":309},[29,110504,110505],{"class":103},"\"total_reward:\"",[29,110507,12610],{"class":309},[29,110509,32147],{"class":39},[29,110511,110512],{"class":309},"(total_reward, ",[29,110514,380],{"class":39},[29,110516,30626],{"class":309},[29,110518,110519,110521,110523,110526,110529,110531],{"class":31,"line":16785},[29,110520,31428],{"class":39},[29,110522,310],{"class":309},[29,110524,110525],{"class":103},"\"final obs:\"",[29,110527,110528],{"class":309},", np.round(get_observation(data), ",[29,110530,380],{"class":39},[29,110532,30626],{"class":309},[29,110534,110535],{"class":31,"line":16808},[29,110536,2575],{"emptyLinePlaceholder":233},[29,110538,110539],{"class":31,"line":16814},[29,110540,2575],{"emptyLinePlaceholder":233},[29,110542,110543,110545,110547,110549,110551],{"class":31,"line":16837},[29,110544,1707],{"class":305},[29,110546,31349],{"class":39},[29,110548,101688],{"class":305},[29,110550,101691],{"class":103},[29,110552,3914],{"class":309},[29,110554,110555],{"class":31,"line":16851},[29,110556,101698],{"class":309},[171,110558,103699],{},[19,110560,110562],{"className":21,"code":110561,"language":23,"meta":24,"style":24},"touch ch6_cartpole.py\n",[26,110563,110564],{"__ignoreMap":24},[29,110565,110566,110568],{"class":31,"line":32},[29,110567,101412],{"class":35},[29,110569,110570],{"class":103}," ch6_cartpole.py\n",[171,110572,110573],{},"运行：",[19,110575,110577],{"className":21,"code":110576,"language":23,"meta":24,"style":24},"python ch6_cartpole.py\n",[26,110578,110579],{"__ignoreMap":24},[29,110580,110581,110583],{"class":31,"line":32},[29,110582,30509],{"class":35},[29,110584,110570],{"class":103},[275,110586,101701],{"id":101701},[171,110588,110589],{},"构造观测：",[19,110591,110593],{"className":30507,"code":110592,"language":30509,"meta":24,"style":24},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[26,110594,110595,110603],{"__ignoreMap":24},[29,110596,110597,110599,110601],{"class":31,"line":32},[29,110598,32076],{"class":305},[29,110600,110123],{"class":35},[29,110602,110126],{"class":309},[29,110604,110605,110607],{"class":31,"line":43},[29,110606,4265],{"class":305},[29,110608,110133],{"class":309},[171,110610,110611,110614,110615,110617,110618,110620],{},[26,110612,110613],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[26,110616,104159],{}," 2 维，",[26,110619,104489],{}," 2 维，所以 obs 是 4 维。",[171,110622,110623],{},"设置初始角度：",[19,110625,110627],{"className":30507,"code":110626,"language":30509,"meta":24,"style":24},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[26,110628,110629,110641],{"__ignoreMap":24},[29,110630,110631,110633,110635,110637,110639],{"class":31,"line":32},[29,110632,104828],{"class":309},[29,110634,525],{"class":39},[29,110636,4618],{"class":309},[29,110638,355],{"class":305},[29,110640,110269],{"class":39},[29,110642,110643],{"class":31,"line":43},[29,110644,104672],{"class":309},[171,110646,110647],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[171,110649,110650],{},"简单反馈控制：",[19,110652,110654],{"className":30507,"code":110653,"language":30509,"meta":24,"style":24},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[26,110655,110656,110676],{"__ignoreMap":24},[29,110657,110658,110660,110662,110664,110666,110668,110670,110672,110674],{"class":31,"line":32},[29,110659,107571],{"class":309},[29,110661,355],{"class":305},[29,110663,110356],{"class":39},[29,110665,6693],{"class":305},[29,110667,109949],{"class":309},[29,110669,789],{"class":305},[29,110671,61996],{"class":39},[29,110673,6693],{"class":305},[29,110675,110369],{"class":309},[29,110677,110678,110680,110682,110684,110686,110688,110690,110692],{"class":31,"line":43},[29,110679,107571],{"class":309},[29,110681,355],{"class":305},[29,110683,107576],{"class":309},[29,110685,840],{"class":305},[29,110687,102532],{"class":39},[29,110689,12610],{"class":309},[29,110691,102532],{"class":39},[29,110693,316],{"class":309},[171,110695,110696],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[171,110698,110699],{},"限制动作：",[19,110701,110703],{"className":30507,"code":110702,"language":30509,"meta":24,"style":24},"np.clip(action, -1.0, 1.0)\n",[26,110704,110705],{"__ignoreMap":24},[29,110706,110707,110710,110712,110714,110716,110718],{"class":31,"line":32},[29,110708,110709],{"class":309},"np.clip(action, ",[29,110711,840],{"class":305},[29,110713,102532],{"class":39},[29,110715,12610],{"class":309},[29,110717,102532],{"class":39},[29,110719,316],{"class":309},[171,110721,110722,110723,110726],{},"因为 XML 里 ",[26,110724,110725],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[275,110728,101837],{"id":101837},[19,110730,110731],{"className":30507,"code":110592,"language":30509,"meta":24,"style":24},[26,110732,110733,110741],{"__ignoreMap":24},[29,110734,110735,110737,110739],{"class":31,"line":32},[29,110736,32076],{"class":305},[29,110738,110123],{"class":35},[29,110740,110126],{"class":309},[29,110742,110743,110745],{"class":31,"line":43},[29,110744,4265],{"class":305},[29,110746,110133],{"class":309},[171,110748,110749,110750,110753,110754,110757,110758,110761],{},"这段定义了一个函数，用来获取当前观测。",[26,110751,110752],{},"data.qpos.copy()"," 是位置数组副本，",[26,110755,110756],{},"data.qvel.copy()"," 是速度数组副本。",[26,110759,110760],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[171,110763,110764],{},"在本章模型里：",[19,110766,110769],{"className":110767,"code":110768,"language":5362,"meta":24},[5360],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[26,110770,110768],{"__ignoreMap":24},[171,110772,110773],{},"所以返回的 obs 是：",[19,110775,110778],{"className":110776,"code":110777,"language":5362,"meta":24},[5360],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[26,110779,110777],{"__ignoreMap":24},[19,110781,110783],{"className":30507,"code":110782,"language":30509,"meta":24,"style":24},"def compute_reward(obs: np.ndarray) -> float:\n",[26,110784,110785],{"__ignoreMap":24},[29,110786,110787,110789,110791,110793,110795],{"class":31,"line":32},[29,110788,32076],{"class":305},[29,110790,110148],{"class":35},[29,110792,110151],{"class":309},[29,110794,349],{"class":39},[29,110796,3914],{"class":309},[171,110798,110799,110800,110803],{},"这行定义奖励函数。输入是观测 ",[26,110801,110802],{},"obs","，输出是一个浮点数奖励。",[19,110805,110807],{"className":30507,"code":110806,"language":30509,"meta":24,"style":24},"cart_x = obs[0]\npole_angle = obs[1]\n",[26,110808,110809,110822],{"__ignoreMap":24},[29,110810,110811,110814,110816,110818,110820],{"class":31,"line":32},[29,110812,110813],{"class":309},"cart_x ",[29,110815,355],{"class":305},[29,110817,110165],{"class":309},[29,110819,499],{"class":39},[29,110821,33375],{"class":309},[29,110823,110824,110827,110829,110831,110833],{"class":31,"line":43},[29,110825,110826],{"class":309},"pole_angle ",[29,110828,355],{"class":305},[29,110830,110165],{"class":309},[29,110832,525],{"class":39},[29,110834,33375],{"class":309},[171,110836,110837,110838,110841,110842,110845],{},"数组索引从 0 开始。",[26,110839,110840],{},"obs[0]"," 是第一个元素，也就是小车位置。",[26,110843,110844],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[19,110847,110848],{"className":30507,"code":109917,"language":30509,"meta":24,"style":24},[26,110849,110850],{"__ignoreMap":24},[29,110851,110852,110854,110856,110858,110860,110862,110864,110866,110868,110870,110872,110874,110876,110878],{"class":31,"line":32},[29,110853,17221],{"class":305},[29,110855,109926],{"class":39},[29,110857,310],{"class":309},[29,110859,102532],{"class":39},[29,110861,52400],{"class":305},[29,110863,109935],{"class":39},[29,110865,6693],{"class":305},[29,110867,109940],{"class":309},[29,110869,763],{"class":305},[29,110871,109940],{"class":309},[29,110873,840],{"class":305},[29,110875,109949],{"class":309},[29,110877,763],{"class":305},[29,110879,109954],{"class":309},[171,110881,110882,110883,110886,110887,110890],{},"这行计算奖励。",[26,110884,110885],{},"cart_x * cart_x"," 是小车位置的平方，",[26,110888,110889],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[19,110892,110894],{"className":30507,"code":110893,"language":30509,"meta":24,"style":24},"data.qpos[1] = 0.1\n",[26,110895,110896],{"__ignoreMap":24},[29,110897,110898,110900,110902,110904,110906],{"class":31,"line":32},[29,110899,104828],{"class":309},[29,110901,525],{"class":39},[29,110903,4618],{"class":309},[29,110905,355],{"class":305},[29,110907,110269],{"class":39},[171,110909,110910,110911,110913,110914,110916],{},"手动设置杆子的初始角度。因为 ",[26,110912,105585],{}," 是小车位置，",[26,110915,105588],{}," 是杆子角度，所以这里改的是杆子。",[19,110918,110919],{"className":30507,"code":104672,"language":30509,"meta":24,"style":24},[26,110920,110921],{"__ignoreMap":24},[29,110922,110923],{"class":31,"line":32},[29,110924,104672],{"class":309},[171,110926,105631,110927,110929],{},[26,110928,104159],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[19,110931,110933],{"className":30507,"code":110932,"language":30509,"meta":24,"style":24},"total_reward = 0.0\n",[26,110934,110935],{"__ignoreMap":24},[29,110936,110937,110940,110942],{"class":31,"line":32},[29,110938,110939],{"class":309},"total_reward ",[29,110941,355],{"class":305},[29,110943,104890],{"class":39},[171,110945,110946],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[19,110948,110950],{"className":30507,"code":110949,"language":30509,"meta":24,"style":24},"for step in range(1000):\n",[26,110951,110952],{"__ignoreMap":24},[29,110953,110954,110956,110958,110960,110962,110964,110966],{"class":31,"line":32},[29,110955,3200],{"class":305},[29,110957,31745],{"class":309},[29,110959,26172],{"class":305},[29,110961,32572],{"class":39},[29,110963,310],{"class":309},[29,110965,6585],{"class":39},[29,110967,30915],{"class":309},[171,110969,110970,110971,110973],{},"循环 1000 步。",[26,110972,107263],{}," 是当前步数，从 0 到 999。",[19,110975,110977],{"className":30507,"code":110976,"language":30509,"meta":24,"style":24},"obs = get_observation(data)\n",[26,110978,110979],{"__ignoreMap":24},[29,110980,110981,110984,110986],{"class":31,"line":32},[29,110982,110983],{"class":309},"obs ",[29,110985,355],{"class":305},[29,110987,110316],{"class":309},[171,110989,110990,110991,28514],{},"读取当前状态，保存到 ",[26,110992,110802],{},[19,110994,110996],{"className":30507,"code":110995,"language":30509,"meta":24,"style":24},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[26,110997,110998,111010],{"__ignoreMap":24},[29,110999,111000,111002,111004,111006,111008],{"class":31,"line":32},[29,111001,110826],{"class":309},[29,111003,355],{"class":305},[29,111005,110165],{"class":309},[29,111007,525],{"class":39},[29,111009,33375],{"class":309},[29,111011,111012,111015,111017,111019,111021],{"class":31,"line":43},[29,111013,111014],{"class":309},"pole_angular_velocity ",[29,111016,355],{"class":305},[29,111018,110165],{"class":309},[29,111020,380],{"class":39},[29,111022,33375],{"class":309},[171,111024,111025,111026,111029,111030,28514],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[26,111027,111028],{},"obs[3]","？因为 obs 的顺序是 ",[26,111031,111032],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[19,111034,111036],{"className":30507,"code":111035,"language":30509,"meta":24,"style":24},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[26,111037,111038],{"__ignoreMap":24},[29,111039,111040,111042,111044,111046,111048,111050,111052,111054,111056],{"class":31,"line":32},[29,111041,107571],{"class":309},[29,111043,355],{"class":305},[29,111045,110356],{"class":39},[29,111047,6693],{"class":305},[29,111049,109949],{"class":309},[29,111051,789],{"class":305},[29,111053,61996],{"class":39},[29,111055,6693],{"class":305},[29,111057,110369],{"class":309},[171,111059,111060,111061,101147,111063,111065],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[26,111062,105389],{},[26,111064,35458],{}," 是人为设置的系数，不是固定公式。",[19,111067,111069],{"className":30507,"code":111068,"language":30509,"meta":24,"style":24},"action = np.clip(action, -1.0, 1.0)\n",[26,111070,111071],{"__ignoreMap":24},[29,111072,111073,111075,111077,111079,111081,111083,111085,111087],{"class":31,"line":32},[29,111074,107571],{"class":309},[29,111076,355],{"class":305},[29,111078,107576],{"class":309},[29,111080,840],{"class":305},[29,111082,102532],{"class":39},[29,111084,12610],{"class":309},[29,111086,102532],{"class":39},[29,111088,316],{"class":309},[171,111090,111091],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[19,111093,111094],{"className":30507,"code":109902,"language":30509,"meta":24,"style":24},[26,111095,111096],{"__ignoreMap":24},[29,111097,111098,111100,111102,111104,111106],{"class":31,"line":32},[29,111099,106000],{"class":309},[29,111101,499],{"class":39},[29,111103,4618],{"class":309},[29,111105,355],{"class":305},[29,111107,107599],{"class":309},[171,111109,111110],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[19,111112,111113],{"className":30507,"code":104634,"language":30509,"meta":24,"style":24},[26,111114,111115],{"__ignoreMap":24},[29,111116,111117],{"class":31,"line":32},[29,111118,104634],{"class":309},[171,111120,111121,111122,111124],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[26,111123,106255],{}," 计算小车和杆子的下一刻状态。",[19,111126,111128],{"className":30507,"code":111127,"language":30509,"meta":24,"style":24},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[26,111129,111130,111139],{"__ignoreMap":24},[29,111131,111132,111135,111137],{"class":31,"line":32},[29,111133,111134],{"class":309},"reward ",[29,111136,355],{"class":305},[29,111138,110421],{"class":309},[29,111140,111141,111143,111145],{"class":31,"line":43},[29,111142,110939],{"class":309},[29,111144,9652],{"class":305},[29,111146,110431],{"class":309},[171,111148,111149,111150,111152,111153,111156,111157,28514],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[26,111151,9652],{}," 是简写，",[26,111154,111155],{},"total_reward += reward"," 等价于 ",[26,111158,111159],{},"total_reward = total_reward + reward",[19,111161,111163],{"className":30507,"code":111162,"language":30509,"meta":24,"style":24},"if step % 100 == 0:\n",[26,111164,111165],{"__ignoreMap":24},[29,111166,111167,111169,111171,111173,111175,111177,111179],{"class":31,"line":32},[29,111168,1707],{"class":305},[29,111170,31745],{"class":309},[29,111172,636],{"class":305},[29,111174,5929],{"class":39},[29,111176,101688],{"class":305},[29,111178,4268],{"class":39},[29,111180,3914],{"class":309},[171,111182,111183,111185,111186,111189],{},[26,111184,636],{}," 是取余数。",[26,111187,111188],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[19,111191,111193],{"className":30507,"code":111192,"language":30509,"meta":24,"style":24},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[26,111194,111195],{"__ignoreMap":24},[29,111196,111197,111199,111201,111203,111205,111207,111209,111211,111213,111215,111217,111219,111221,111223,111225,111227],{"class":31,"line":32},[29,111198,30544],{"class":39},[29,111200,310],{"class":309},[29,111202,110460],{"class":103},[29,111204,110463],{"class":309},[29,111206,110466],{"class":103},[29,111208,110469],{"class":309},[29,111210,380],{"class":39},[29,111212,110474],{"class":309},[29,111214,110477],{"class":103},[29,111216,12610],{"class":309},[29,111218,32147],{"class":39},[29,111220,310],{"class":309},[29,111222,349],{"class":39},[29,111224,110488],{"class":309},[29,111226,380],{"class":39},[29,111228,30626],{"class":309},[171,111230,111231,111232,111235,111236,111239],{},"打印当前步数、观测和动作。",[26,111233,111234],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[26,111237,111238],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111241,102445],{"id":102444},[171,111243,111244],{},"观测向量:",[19,111246,111249],{"className":111247,"code":111248,"language":5362,"meta":24},[5360],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[26,111250,111248],{"__ignoreMap":24},[171,111252,111253],{},"控制器是教学用的简单线性反馈，不保证最优。",[171,111255,111256],{},"每隔 100 步会打印一次：",[19,111258,111261],{"className":111259,"code":111260,"language":5362,"meta":24},[5360],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[26,111262,111260],{"__ignoreMap":24},[171,111264,111265],{},"重点观察：",[259,111267,111268,111274,111279],{},[178,111269,111270,111273],{},[26,111271,111272],{},"pole_angle"," 是否越来越大。",[178,111275,111276,111278],{},[26,111277,109855],{}," 是否跑得太远。",[178,111280,111281,111282,82668,111284,28514],{},"action 是否经常被 clip 到 ",[26,111283,104044],{},[26,111285,525],{},[171,111287,111288],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111290,102477],{"id":102476},[259,111292,111293,111299,111302,111308,111318,111324,111327],{},[178,111294,111295,111296,28514],{},"把初始角度改为 ",[26,111297,111298],{},"data.qpos[1] = 0.3",[178,111300,111301],{},"重新运行，观察控制是否变差。",[178,111303,111304,111305,111307],{},"把 actuator ",[26,111306,107196],{}," 改小。",[178,111309,111310,111311,111314,111315,28514],{},"打印 ",[26,111312,111313],{},"model.nq, model.nv, model.nu","，应为 ",[26,111316,111317],{},"2 2 1",[178,111319,111320,111321,111323],{},"把 reward 里的 ",[26,111322,110889],{}," 系数改大，观察总奖励变化。",[178,111325,111326],{},"把控制器改成反号，观察杆子是否更容易倒。",[178,111328,111329],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111331,102582],{"id":102581},[275,111333,111334],{"id":111334},"杆子方向和预期不一致",[171,111336,102525,111337,111339,111340,111342],{},[26,111338,106368],{}," 和 capsule 的 ",[26,111341,103305],{},"，必要时用 viewer 可视化确认。",[275,111344,111345],{"id":111345},"控制器越控越倒",[171,111347,111348],{},"说明反馈符号可能反了，尝试:",[19,111350,111352],{"className":30507,"code":111351,"language":30509,"meta":24,"style":24},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[26,111353,111354],{"__ignoreMap":24},[29,111355,111356,111358,111360,111362,111364,111366,111368,111370,111372,111374],{"class":31,"line":32},[29,111357,107571],{"class":309},[29,111359,355],{"class":305},[29,111361,52400],{"class":305},[29,111363,105389],{"class":39},[29,111365,6693],{"class":305},[29,111367,109949],{"class":309},[29,111369,840],{"class":305},[29,111371,61996],{"class":39},[29,111373,6693],{"class":305},[29,111375,110369],{"class":309},[275,111377,111378],{"id":111378},"小车飞走",[171,111380,111381,111382,111384,111385,111388],{},"降低 ",[26,111383,107196],{}," 或缩小 ",[26,111386,111387],{},"action"," 的 clip 范围。",[275,111390,111392,111394],{"id":111391},"obs3-为什么是杆子角速度",[26,111393,111028],{}," 为什么是杆子角速度",[171,111396,111397],{},"因为这个模型里：",[19,111399,111402],{"className":111400,"code":111401,"language":5362,"meta":24},[5360],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[26,111403,111401],{"__ignoreMap":24},[171,111405,109876],{},[19,111407,111410],{"className":111408,"code":111409,"language":5362,"meta":24},[5360],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[26,111411,111409],{"__ignoreMap":24},[275,111413,111415],{"id":111414},"reward-变成负数是否错误","reward 变成负数是否错误",[171,111417,111418],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111420,102736],{"id":102735},[171,111422,111423],{},"一个控制任务通常包含：",[259,111425,111426,111429,111437,111442,111445],{},[178,111427,111428],{},"模型：Cartpole 的 body、joint、actuator。",[178,111430,111431,111432,520,111434,111436],{},"观测：从 ",[26,111433,104159],{},[26,111435,104489],{}," 里取状态。",[178,111438,111439,111440,28514],{},"动作：写入 ",[26,111441,101205],{},[178,111443,111444],{},"奖励：根据任务目标打分。",[178,111446,111447],{},"循环：obs -> action -> step -> reward。",[171,111449,111450],{},"这就是后面 Gymnasium 环境的基本骨架。",[223,111452,104415],{},{"title":24,"searchDepth":43,"depth":43,"links":111454},[111455,111456,111457,111462,111466,111467,111468,111476],{"id":100775,"depth":43,"text":100776},{"id":100898,"depth":43,"text":100899},{"id":101173,"depth":43,"text":101174,"children":111458},[111459,111460,111461],{"id":109829,"depth":51,"text":109830},{"id":109894,"depth":51,"text":109895},{"id":109910,"depth":51,"text":109911},{"id":101381,"depth":43,"text":101382,"children":111463},[111464,111465],{"id":101701,"depth":51,"text":101701},{"id":101837,"depth":51,"text":101837},{"id":102444,"depth":43,"text":102445},{"id":102476,"depth":43,"text":102477},{"id":102581,"depth":43,"text":102582,"children":111469},[111470,111471,111472,111473,111475],{"id":111334,"depth":51,"text":111334},{"id":111345,"depth":51,"text":111345},{"id":111378,"depth":51,"text":111378},{"id":111391,"depth":51,"text":111474},"obs[3] 为什么是杆子角速度",{"id":111414,"depth":51,"text":111415},{"id":102735,"depth":43,"text":102736},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109565,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111483,"title":111484,"body":111485,"description":24,"extension":231,"meta":113499,"navigation":233,"path":113500,"seo":113501,"stem":113502,"__hash__":113503},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111486,"toc":113475},[111487,111490,111492,111495,111497,111514,111517,111520,111526,111529,111531,111533,111557,111559,111573,111575,111616,111618,111636,111638,111641,111647,111650,111678,111682,111688,111713,111716,111747,111754,111757,111760,111766,111769,111775,111778,111784,111788,111791,111816,111819,111821,112581,112583,112595,112597,112608,112610,112613,112630,112633,112635,112646,112649,112651,112697,112700,112713,112716,112798,112801,112803,112819,112829,112842,112845,112884,112894,112905,112915,112928,112931,112960,112963,112973,112976,112982,112999,113010,113012,113018,113035,113046,113067,113070,113082,113085,113106,113109,113117,113125,113142,113145,113214,113221,113229,113232,113245,113252,113254,113257,113263,113266,113269,113275,113281,113283,113323,113325,113331,113340,113343,113345,113365,113368,113371,113377,113381,113383,113410,113413,113416,113443,113449,113452,113455,113457,113460,113463,113469,113472],[10,111488,111484],{"id":111489},"_7控制任务reacher-机械臂到达目标",[14,111491,100776],{"id":100775},[171,111493,111494],{},"本章搭建一个二维两关节 reacher 任务。",[171,111496,104460],{},[259,111498,111499,111502,111505,111508,111511],{},[178,111500,111501],{},"两个 hinge joint",[178,111503,111504],{},"两个 motor actuator",[178,111506,111507],{},"site 作为末端点和目标点",[178,111509,111510],{},"根据末端和目标距离设计 reward",[178,111512,111513],{},"构造机械臂任务的基本形式",[171,111515,111516],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[171,111518,111519],{},"Reacher 任务可以理解为：",[19,111521,111524],{"className":111522,"code":111523,"language":5362,"meta":24},[5360],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[26,111525,111523],{"__ignoreMap":24},[171,111527,111528],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111530,100899],{"id":100898},[171,111532,100902],{},[19,111534,111535],{"className":21,"code":104517,"language":23,"meta":24,"style":24},[26,111536,111537],{"__ignoreMap":24},[29,111538,111539,111541,111543,111545,111547,111549,111551,111553,111555],{"class":31,"line":32},[29,111540,24749],{"class":35},[29,111542,26444],{"class":103},[29,111544,24007],{"class":103},[29,111546,26529],{"class":39},[29,111548,104532],{"class":103},[29,111550,100927],{"class":103},[29,111552,102630],{"class":103},[29,111554,100943],{"class":103},[29,111556,104541],{"class":103},[171,111558,102948],{},[19,111560,111561],{"className":21,"code":101048,"language":23,"meta":24,"style":24},[26,111562,111563],{"__ignoreMap":24},[29,111564,111565,111567,111569,111571],{"class":31,"line":32},[29,111566,24004],{"class":35},[29,111568,24007],{"class":103},[29,111570,101059],{"class":103},[29,111572,101062],{"class":103},[171,111574,102965],{},[19,111576,111578],{"className":21,"code":111577,"language":23,"meta":24,"style":24},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[26,111579,111580,111597,111606],{"__ignoreMap":24},[29,111581,111582,111584,111586,111588,111591,111593,111595],{"class":31,"line":32},[29,111583,30459],{"class":35},[29,111585,29305],{"class":103},[29,111587,25244],{"class":39},[29,111589,111590],{"class":103}," mujoco-reacher",[29,111592,101104],{"class":103},[29,111594,101107],{"class":39},[29,111596,101110],{"class":39},[29,111598,111599,111601,111603],{"class":31,"line":43},[29,111600,30459],{"class":35},[29,111602,101117],{"class":103},[29,111604,111605],{"class":103}," mujoco-reacher\n",[29,111607,111608,111610,111612,111614],{"class":31,"line":51},[29,111609,24004],{"class":35},[29,111611,24007],{"class":103},[29,111613,101059],{"class":103},[29,111615,101062],{"class":103},[171,111617,101133],{},[259,111619,111620,111623,111626],{},[178,111621,111622],{},"本章使用低维状态，不使用图像输入。",[178,111624,111625],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[178,111627,111628,111629,520,111631,520,111633,111635],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[26,111630,104159],{},[26,111632,104489],{},[26,111634,103809],{}," 的方法一致。",[14,111637,101174],{"id":101173},[171,111639,111640],{},"Reacher 任务核心:",[19,111642,111645],{"className":111643,"code":111644,"language":5362,"meta":24},[5360],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[26,111646,111644],{"__ignoreMap":24},[171,111648,111649],{},"读取 site 世界坐标:",[19,111651,111653],{"className":30507,"code":111652,"language":30509,"meta":24,"style":24},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[26,111654,111655,111668],{"__ignoreMap":24},[29,111656,111657,111659,111661,111663,111666],{"class":31,"line":32},[29,111658,103763],{"class":309},[29,111660,355],{"class":305},[29,111662,103534],{"class":309},[29,111664,111665],{"class":103},"\"tip\"",[29,111667,316],{"class":309},[29,111669,111670,111673,111675],{"class":31,"line":43},[29,111671,111672],{"class":309},"tip_pos ",[29,111674,355],{"class":305},[29,111676,111677],{"class":309}," data.site_xpos[site_id]\n",[275,111679,111681],{"id":111680},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[171,111683,111684,111685,111687],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[26,111686,104159],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[19,111689,111691],{"className":30507,"code":111690,"language":30509,"meta":24,"style":24},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[26,111692,111693,111703],{"__ignoreMap":24},[29,111694,111695,111698,111700],{"class":31,"line":32},[29,111696,111697],{"class":309},"tip ",[29,111699,355],{"class":305},[29,111701,111702],{"class":309}," data.site_xpos[tip_site_id]\n",[29,111704,111705,111708,111710],{"class":31,"line":43},[29,111706,111707],{"class":309},"target ",[29,111709,355],{"class":305},[29,111711,111712],{"class":309}," data.site_xpos[target_site_id]\n",[171,111714,111715],{},"这样 reward 就很容易写：",[19,111717,111719],{"className":30507,"code":111718,"language":30509,"meta":24,"style":24},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[26,111720,111721,111736],{"__ignoreMap":24},[29,111722,111723,111726,111728,111731,111733],{"class":31,"line":32},[29,111724,111725],{"class":309},"dist ",[29,111727,355],{"class":305},[29,111729,111730],{"class":309}," np.linalg.norm(tip ",[29,111732,840],{"class":305},[29,111734,111735],{"class":309}," target)\n",[29,111737,111738,111740,111742,111744],{"class":31,"line":43},[29,111739,111134],{"class":309},[29,111741,355],{"class":305},[29,111743,52400],{"class":305},[29,111745,111746],{"class":309},"dist\n",[171,111748,111749,111750,111753],{},"距离越小，",[26,111751,111752],{},"-dist"," 越接近 0，奖励越高。",[275,111755,111756],{"id":111756},"两关节机械臂的状态",[171,111758,111759],{},"这个模型有两个 hinge joint：",[19,111761,111764],{"className":111762,"code":111763,"language":5362,"meta":24},[5360],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[26,111765,111763],{"__ignoreMap":24},[171,111767,111768],{},"再加上末端和目标位置：",[19,111770,111773],{"className":111771,"code":111772,"language":5362,"meta":24},[5360],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[26,111774,111772],{"__ignoreMap":24},[171,111776,111777],{},"总维度：",[19,111779,111782],{"className":111780,"code":111781,"language":5362,"meta":24},[5360],"2 + 2 + 3 + 3 = 10\n",[26,111783,111781],{"__ignoreMap":24},[275,111785,111787],{"id":111786},"为什么-gravity-是-0","为什么 gravity 是 0",[171,111789,111790],{},"本章把重力设为：",[19,111792,111794],{"className":53196,"code":111793,"language":53198,"meta":24,"style":24},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[26,111795,111796],{"__ignoreMap":24},[29,111797,111798,111800,111802,111804,111806,111808,111810,111812,111814],{"class":31,"line":32},[29,111799,1218],{"class":309},[29,111801,69295],{"class":51429},[29,111803,101323],{"class":35},[29,111805,355],{"class":309},[29,111807,101328],{"class":103},[29,111809,101331],{"class":35},[29,111811,355],{"class":309},[29,111813,103900],{"class":103},[29,111815,101273],{"class":309},[171,111817,111818],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111820,101382],{"id":101381},[19,111822,111824],{"className":30507,"code":111823,"language":30509,"meta":24,"style":24},"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",[26,111825,111826,111832,111842,111846,111850,111858,111863,111868,111872,111876,111881,111886,111890,111895,111900,111905,111909,111914,111919,111924,111929,111933,111937,111941,111945,111949,111954,111959,111963,111967,111971,111975,111979,111994,112003,112015,112038,112045,112049,112053,112063,112077,112091,112098,112102,112106,112120,112132,112144,112157,112172,112189,112193,112197,112209,112221,112229,112237,112241,112257,112262,112275,112288,112303,112307,112342,112374,112378,112382,112391,112395,112411,112421,112432,112448,112464,112480,112496,112500,112518,112538,112557,112561,112565,112577],{"__ignoreMap":24},[29,111827,111828,111830],{"class":31,"line":32},[29,111829,30521],{"class":305},[29,111831,101430],{"class":309},[29,111833,111834,111836,111838,111840],{"class":31,"line":43},[29,111835,30521],{"class":305},[29,111837,31509],{"class":309},[29,111839,31512],{"class":305},[29,111841,31515],{"class":309},[29,111843,111844],{"class":31,"line":51},[29,111845,2575],{"emptyLinePlaceholder":233},[29,111847,111848],{"class":31,"line":59},[29,111849,2575],{"emptyLinePlaceholder":233},[29,111851,111852,111854,111856],{"class":31,"line":67},[29,111853,101443],{"class":39},[29,111855,13739],{"class":305},[29,111857,101448],{"class":103},[29,111859,111860],{"class":31,"line":75},[29,111861,111862],{"class":103},"\u003Cmujoco model=\"two_link_reacher\">\n",[29,111864,111865],{"class":31,"line":83},[29,111866,111867],{"class":103},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[29,111869,111870],{"class":31,"line":158},[29,111871,2575],{"emptyLinePlaceholder":233},[29,111873,111874],{"class":31,"line":166},[29,111875,101467],{"class":103},[29,111877,111878],{"class":31,"line":1505},[29,111879,111880],{"class":103},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[29,111882,111883],{"class":31,"line":1788},[29,111884,111885],{"class":103},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[29,111887,111888],{"class":31,"line":1793},[29,111889,2575],{"emptyLinePlaceholder":233},[29,111891,111892],{"class":31,"line":1799},[29,111893,111894],{"class":103},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[29,111896,111897],{"class":31,"line":1804},[29,111898,111899],{"class":103},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[29,111901,111902],{"class":31,"line":1818},[29,111903,111904],{"class":103},"      \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",[29,111906,111907],{"class":31,"line":1823},[29,111908,2575],{"emptyLinePlaceholder":233},[29,111910,111911],{"class":31,"line":1829},[29,111912,111913],{"class":103},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[29,111915,111916],{"class":31,"line":1850},[29,111917,111918],{"class":103},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[29,111920,111921],{"class":31,"line":1855},[29,111922,111923],{"class":103},"        \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",[29,111925,111926],{"class":31,"line":1869},[29,111927,111928],{"class":103},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[29,111930,111931],{"class":31,"line":1874},[29,111932,106567],{"class":103},[29,111934,111935],{"class":31,"line":1903},[29,111936,101496],{"class":103},[29,111938,111939],{"class":31,"line":1908},[29,111940,101501],{"class":103},[29,111942,111943],{"class":31,"line":1925},[29,111944,2575],{"emptyLinePlaceholder":233},[29,111946,111947],{"class":31,"line":1930},[29,111948,106584],{"class":103},[29,111950,111951],{"class":31,"line":1935},[29,111952,111953],{"class":103},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[29,111955,111956],{"class":31,"line":1940},[29,111957,111958],{"class":103},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[29,111960,111961],{"class":31,"line":1954},[29,111962,106594],{"class":103},[29,111964,111965],{"class":31,"line":1959},[29,111966,101506],{"class":103},[29,111968,111969],{"class":31,"line":2752},[29,111970,95827],{"class":103},[29,111972,111973],{"class":31,"line":2766},[29,111974,2575],{"emptyLinePlaceholder":233},[29,111976,111977],{"class":31,"line":2774},[29,111978,2575],{"emptyLinePlaceholder":233},[29,111980,111981,111983,111986,111989,111991],{"class":31,"line":2779},[29,111982,32076],{"class":305},[29,111984,111985],{"class":35}," site_position",[29,111987,111988],{"class":309},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[29,111990,1477],{"class":39},[29,111992,111993],{"class":309},") -> np.ndarray:\n",[29,111995,111996,111998,112000],{"class":31,"line":2785},[29,111997,103529],{"class":309},[29,111999,355],{"class":305},[29,112001,112002],{"class":309}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[29,112004,112005,112007,112009,112011,112013],{"class":31,"line":2791},[29,112006,3276],{"class":305},[29,112008,103578],{"class":309},[29,112010,1218],{"class":305},[29,112012,4268],{"class":39},[29,112014,3914],{"class":309},[29,112016,112017,112019,112021,112023,112025,112028,112030,112032,112034,112036],{"class":31,"line":2796},[29,112018,103561],{"class":305},[29,112020,103564],{"class":39},[29,112022,310],{"class":309},[29,112024,361],{"class":305},[29,112026,112027],{"class":103},"\"site not found: ",[29,112029,1204],{"class":39},[29,112031,79939],{"class":309},[29,112033,1254],{"class":39},[29,112035,559],{"class":103},[29,112037,316],{"class":309},[29,112039,112040,112042],{"class":31,"line":8123},[29,112041,4265],{"class":305},[29,112043,112044],{"class":309}," data.site_xpos[site_id].copy()\n",[29,112046,112047],{"class":31,"line":8147},[29,112048,2575],{"emptyLinePlaceholder":233},[29,112050,112051],{"class":31,"line":8152},[29,112052,2575],{"emptyLinePlaceholder":233},[29,112054,112055,112057,112060],{"class":31,"line":8158},[29,112056,32076],{"class":305},[29,112058,112059],{"class":35}," get_obs",[29,112061,112062],{"class":309},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[29,112064,112065,112068,112070,112073,112075],{"class":31,"line":8185},[29,112066,112067],{"class":309},"    tip ",[29,112069,355],{"class":305},[29,112071,112072],{"class":309}," site_position(model, data, ",[29,112074,111665],{"class":103},[29,112076,316],{"class":309},[29,112078,112079,112082,112084,112086,112089],{"class":31,"line":8190},[29,112080,112081],{"class":309},"    target ",[29,112083,355],{"class":305},[29,112085,112072],{"class":309},[29,112087,112088],{"class":103},"\"target\"",[29,112090,316],{"class":309},[29,112092,112093,112095],{"class":31,"line":8196},[29,112094,4265],{"class":305},[29,112096,112097],{"class":309}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[29,112099,112100],{"class":31,"line":8208},[29,112101,2575],{"emptyLinePlaceholder":233},[29,112103,112104],{"class":31,"line":8220},[29,112105,2575],{"emptyLinePlaceholder":233},[29,112107,112108,112110,112113,112116,112118],{"class":31,"line":8232},[29,112109,32076],{"class":305},[29,112111,112112],{"class":35}," reward",[29,112114,112115],{"class":309},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[29,112117,349],{"class":39},[29,112119,3914],{"class":309},[29,112121,112122,112124,112126,112128,112130],{"class":31,"line":9891},[29,112123,112067],{"class":309},[29,112125,355],{"class":305},[29,112127,112072],{"class":309},[29,112129,111665],{"class":103},[29,112131,316],{"class":309},[29,112133,112134,112136,112138,112140,112142],{"class":31,"line":9916},[29,112135,112081],{"class":309},[29,112137,355],{"class":305},[29,112139,112072],{"class":309},[29,112141,112088],{"class":103},[29,112143,316],{"class":309},[29,112145,112146,112149,112151,112153,112155],{"class":31,"line":9939},[29,112147,112148],{"class":309},"    dist ",[29,112150,355],{"class":305},[29,112152,111730],{"class":309},[29,112154,840],{"class":305},[29,112156,111735],{"class":309},[29,112158,112159,112162,112164,112167,112169],{"class":31,"line":9963},[29,112160,112161],{"class":309},"    control_cost ",[29,112163,355],{"class":305},[29,112165,112166],{"class":39}," 0.01",[29,112168,6693],{"class":305},[29,112170,112171],{"class":309}," np.sum(np.square(data.ctrl))\n",[29,112173,112174,112176,112178,112180,112182,112184,112186],{"class":31,"line":9968},[29,112175,4265],{"class":305},[29,112177,109926],{"class":39},[29,112179,310],{"class":309},[29,112181,840],{"class":305},[29,112183,111725],{"class":309},[29,112185,840],{"class":305},[29,112187,112188],{"class":309}," control_cost)\n",[29,112190,112191],{"class":31,"line":9973},[29,112192,2575],{"emptyLinePlaceholder":233},[29,112194,112195],{"class":31,"line":9978},[29,112196,2575],{"emptyLinePlaceholder":233},[29,112198,112199,112201,112203,112205,112207],{"class":31,"line":9987},[29,112200,32076],{"class":305},[29,112202,2148],{"class":35},[29,112204,101527],{"class":309},[29,112206,95815],{"class":39},[29,112208,3914],{"class":309},[29,112210,112211,112213,112215,112217,112219],{"class":31,"line":9992},[29,112212,101536],{"class":309},[29,112214,355],{"class":305},[29,112216,101541],{"class":309},[29,112218,101443],{"class":39},[29,112220,316],{"class":309},[29,112222,112223,112225,112227],{"class":31,"line":9998},[29,112224,101550],{"class":309},[29,112226,355],{"class":305},[29,112228,101555],{"class":309},[29,112230,112231,112233,112235],{"class":31,"line":10019},[29,112232,110282],{"class":309},[29,112234,355],{"class":305},[29,112236,104890],{"class":39},[29,112238,112239],{"class":31,"line":10025},[29,112240,2575],{"emptyLinePlaceholder":233},[29,112242,112243,112245,112247,112249,112251,112253,112255],{"class":31,"line":10039},[29,112244,3376],{"class":305},[29,112246,31745],{"class":309},[29,112248,26172],{"class":305},[29,112250,32572],{"class":39},[29,112252,310],{"class":309},[29,112254,65203],{"class":39},[29,112256,30915],{"class":309},[29,112258,112259],{"class":31,"line":10045},[29,112260,112261],{"class":309},"        mujoco.mj_forward(model, data)\n",[29,112263,112264,112267,112269,112271,112273],{"class":31,"line":10072},[29,112265,112266],{"class":309},"        tip ",[29,112268,355],{"class":305},[29,112270,112072],{"class":309},[29,112272,111665],{"class":103},[29,112274,316],{"class":309},[29,112276,112277,112280,112282,112284,112286],{"class":31,"line":10081},[29,112278,112279],{"class":309},"        target ",[29,112281,355],{"class":305},[29,112283,112072],{"class":309},[29,112285,112088],{"class":103},[29,112287,316],{"class":309},[29,112289,112290,112293,112295,112298,112300],{"class":31,"line":10087},[29,112291,112292],{"class":309},"        error ",[29,112294,355],{"class":305},[29,112296,112297],{"class":309}," target ",[29,112299,840],{"class":305},[29,112301,112302],{"class":309}," tip\n",[29,112304,112305],{"class":31,"line":10095},[29,112306,2575],{"emptyLinePlaceholder":233},[29,112308,112309,112311,112313,112315,112317,112320,112322,112324,112327,112329,112332,112334,112336,112338,112340],{"class":31,"line":10100},[29,112310,106746],{"class":309},[29,112312,499],{"class":39},[29,112314,4618],{"class":309},[29,112316,355],{"class":305},[29,112318,112319],{"class":309}," np.clip(",[29,112321,105389],{"class":39},[29,112323,6693],{"class":305},[29,112325,112326],{"class":309}," error[",[29,112328,386],{"class":39},[29,112330,112331],{"class":309},"], ",[29,112333,840],{"class":305},[29,112335,102532],{"class":39},[29,112337,12610],{"class":309},[29,112339,102532],{"class":39},[29,112341,316],{"class":309},[29,112343,112344,112346,112348,112350,112352,112354,112356,112358,112360,112362,112364,112366,112368,112370,112372],{"class":31,"line":16779},[29,112345,106746],{"class":309},[29,112347,525],{"class":39},[29,112349,4618],{"class":309},[29,112351,355],{"class":305},[29,112353,112319],{"class":309},[29,112355,105389],{"class":39},[29,112357,6693],{"class":305},[29,112359,112326],{"class":309},[29,112361,499],{"class":39},[29,112363,112331],{"class":309},[29,112365,840],{"class":305},[29,112367,102532],{"class":39},[29,112369,12610],{"class":309},[29,112371,102532],{"class":39},[29,112373,316],{"class":309},[29,112375,112376],{"class":31,"line":16785},[29,112377,2575],{"emptyLinePlaceholder":233},[29,112379,112380],{"class":31,"line":16808},[29,112381,101645],{"class":309},[29,112383,112384,112386,112388],{"class":31,"line":16814},[29,112385,110426],{"class":309},[29,112387,9652],{"class":305},[29,112389,112390],{"class":309}," reward(model, data)\n",[29,112392,112393],{"class":31,"line":16837},[29,112394,2575],{"emptyLinePlaceholder":233},[29,112396,112397,112399,112401,112403,112405,112407,112409],{"class":31,"line":16851},[29,112398,2672],{"class":305},[29,112400,31745],{"class":309},[29,112402,636],{"class":305},[29,112404,5929],{"class":39},[29,112406,101688],{"class":305},[29,112408,4268],{"class":39},[29,112410,3914],{"class":309},[29,112412,112413,112416,112418],{"class":31,"line":16871},[29,112414,112415],{"class":309},"            obs ",[29,112417,355],{"class":305},[29,112419,112420],{"class":309}," get_obs(model, data)\n",[29,112422,112423,112425,112427,112429],{"class":31,"line":16877},[29,112424,34779],{"class":39},[29,112426,310],{"class":309},[29,112428,110460],{"class":103},[29,112430,112431],{"class":309},", step)\n",[29,112433,112434,112436,112438,112441,112444,112446],{"class":31,"line":16888},[29,112435,34779],{"class":39},[29,112437,310],{"class":309},[29,112439,112440],{"class":103},"\"  tip:\"",[29,112442,112443],{"class":309},", np.round(tip, ",[29,112445,380],{"class":39},[29,112447,30626],{"class":309},[29,112449,112450,112452,112454,112457,112460,112462],{"class":31,"line":16911},[29,112451,34779],{"class":39},[29,112453,310],{"class":309},[29,112455,112456],{"class":103},"\"  target:\"",[29,112458,112459],{"class":309},", np.round(target, ",[29,112461,380],{"class":39},[29,112463,30626],{"class":309},[29,112465,112466,112468,112470,112473,112476,112478],{"class":31,"line":16933},[29,112467,34779],{"class":39},[29,112469,310],{"class":309},[29,112471,112472],{"class":103},"\"  ctrl:\"",[29,112474,112475],{"class":309},", np.round(data.ctrl.copy(), ",[29,112477,380],{"class":39},[29,112479,30626],{"class":309},[29,112481,112482,112484,112486,112489,112492,112494],{"class":31,"line":16938},[29,112483,34779],{"class":39},[29,112485,310],{"class":309},[29,112487,112488],{"class":103},"\"  obs_dim:\"",[29,112490,112491],{"class":309},", obs.shape[",[29,112493,499],{"class":39},[29,112495,4832],{"class":309},[29,112497,112498],{"class":31,"line":16944},[29,112499,2575],{"emptyLinePlaceholder":233},[29,112501,112502,112504,112506,112508,112510,112512,112514,112516],{"class":31,"line":16958},[29,112503,31428],{"class":39},[29,112505,310],{"class":309},[29,112507,110505],{"class":103},[29,112509,12610],{"class":309},[29,112511,32147],{"class":39},[29,112513,110512],{"class":309},[29,112515,380],{"class":39},[29,112517,30626],{"class":309},[29,112519,112520,112522,112524,112527,112530,112532,112534,112536],{"class":31,"line":16971},[29,112521,31428],{"class":39},[29,112523,310],{"class":309},[29,112525,112526],{"class":103},"\"final tip:\"",[29,112528,112529],{"class":309},", np.round(site_position(model, data, ",[29,112531,111665],{"class":103},[29,112533,110474],{"class":309},[29,112535,380],{"class":39},[29,112537,30626],{"class":309},[29,112539,112540,112542,112544,112547,112549,112551,112553,112555],{"class":31,"line":16976},[29,112541,31428],{"class":39},[29,112543,310],{"class":309},[29,112545,112546],{"class":103},"\"target:\"",[29,112548,112529],{"class":309},[29,112550,112088],{"class":103},[29,112552,110474],{"class":309},[29,112554,380],{"class":39},[29,112556,30626],{"class":309},[29,112558,112559],{"class":31,"line":16990},[29,112560,2575],{"emptyLinePlaceholder":233},[29,112562,112563],{"class":31,"line":16995},[29,112564,2575],{"emptyLinePlaceholder":233},[29,112566,112567,112569,112571,112573,112575],{"class":31,"line":17001},[29,112568,1707],{"class":305},[29,112570,31349],{"class":39},[29,112572,101688],{"class":305},[29,112574,101691],{"class":103},[29,112576,3914],{"class":309},[29,112578,112579],{"class":31,"line":17006},[29,112580,101698],{"class":309},[171,112582,103699],{},[19,112584,112586],{"className":21,"code":112585,"language":23,"meta":24,"style":24},"touch ch7_reacher.py\n",[26,112587,112588],{"__ignoreMap":24},[29,112589,112590,112592],{"class":31,"line":32},[29,112591,101412],{"class":35},[29,112593,112594],{"class":103}," ch7_reacher.py\n",[171,112596,110573],{},[19,112598,112600],{"className":21,"code":112599,"language":23,"meta":24,"style":24},"python ch7_reacher.py\n",[26,112601,112602],{"__ignoreMap":24},[29,112603,112604,112606],{"class":31,"line":32},[29,112605,30509],{"class":35},[29,112607,112594],{"class":103},[275,112609,101701],{"id":101701},[171,112611,112612],{},"读取 site 坐标：",[19,112614,112616],{"className":30507,"code":112615,"language":30509,"meta":24,"style":24},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[26,112617,112618],{"__ignoreMap":24},[29,112619,112620,112622,112624,112626,112628],{"class":31,"line":32},[29,112621,32076],{"class":305},[29,112623,111985],{"class":35},[29,112625,111988],{"class":309},[29,112627,1477],{"class":39},[29,112629,111993],{"class":309},[171,112631,112632],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[171,112634,110589],{},[19,112636,112638],{"className":30507,"code":112637,"language":30509,"meta":24,"style":24},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[26,112639,112640],{"__ignoreMap":24},[29,112641,112642,112644],{"class":31,"line":32},[29,112643,17221],{"class":305},[29,112645,112097],{"class":309},[171,112647,112648],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[171,112650,109914],{},[19,112652,112654],{"className":30507,"code":112653,"language":30509,"meta":24,"style":24},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[26,112655,112656,112668,112681],{"__ignoreMap":24},[29,112657,112658,112660,112662,112664,112666],{"class":31,"line":32},[29,112659,111725],{"class":309},[29,112661,355],{"class":305},[29,112663,111730],{"class":309},[29,112665,840],{"class":305},[29,112667,111735],{"class":309},[29,112669,112670,112673,112675,112677,112679],{"class":31,"line":43},[29,112671,112672],{"class":309},"control_cost ",[29,112674,355],{"class":305},[29,112676,112166],{"class":39},[29,112678,6693],{"class":305},[29,112680,112171],{"class":309},[29,112682,112683,112685,112687,112689,112691,112693,112695],{"class":31,"line":51},[29,112684,17221],{"class":305},[29,112686,109926],{"class":39},[29,112688,310],{"class":309},[29,112690,840],{"class":305},[29,112692,111725],{"class":309},[29,112694,840],{"class":305},[29,112696,112188],{"class":309},[171,112698,112699],{},"奖励由两部分组成：",[259,112701,112702,112707],{},[178,112703,112704,112706],{},[26,112705,111752],{},"：末端离目标越远，奖励越低。",[178,112708,112709,112712],{},[26,112710,112711],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[171,112714,112715],{},"简单控制器：",[19,112717,112719],{"className":30507,"code":112718,"language":30509,"meta":24,"style":24},"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",[26,112720,112721,112734,112766],{"__ignoreMap":24},[29,112722,112723,112726,112728,112730,112732],{"class":31,"line":32},[29,112724,112725],{"class":309},"error ",[29,112727,355],{"class":305},[29,112729,112297],{"class":309},[29,112731,840],{"class":305},[29,112733,112302],{"class":309},[29,112735,112736,112738,112740,112742,112744,112746,112748,112750,112752,112754,112756,112758,112760,112762,112764],{"class":31,"line":43},[29,112737,106000],{"class":309},[29,112739,499],{"class":39},[29,112741,4618],{"class":309},[29,112743,355],{"class":305},[29,112745,112319],{"class":309},[29,112747,105389],{"class":39},[29,112749,6693],{"class":305},[29,112751,112326],{"class":309},[29,112753,386],{"class":39},[29,112755,112331],{"class":309},[29,112757,840],{"class":305},[29,112759,102532],{"class":39},[29,112761,12610],{"class":309},[29,112763,102532],{"class":39},[29,112765,316],{"class":309},[29,112767,112768,112770,112772,112774,112776,112778,112780,112782,112784,112786,112788,112790,112792,112794,112796],{"class":31,"line":51},[29,112769,106000],{"class":309},[29,112771,525],{"class":39},[29,112773,4618],{"class":309},[29,112775,355],{"class":305},[29,112777,112319],{"class":309},[29,112779,105389],{"class":39},[29,112781,6693],{"class":305},[29,112783,112326],{"class":309},[29,112785,499],{"class":39},[29,112787,112331],{"class":309},[29,112789,840],{"class":305},[29,112791,102532],{"class":39},[29,112793,12610],{"class":309},[29,112795,102532],{"class":39},[29,112797,316],{"class":309},[171,112799,112800],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[275,112802,101837],{"id":101837},[19,112804,112805],{"className":30507,"code":112615,"language":30509,"meta":24,"style":24},[26,112806,112807],{"__ignoreMap":24},[29,112808,112809,112811,112813,112815,112817],{"class":31,"line":32},[29,112810,32076],{"class":305},[29,112812,111985],{"class":35},[29,112814,111988],{"class":309},[29,112816,1477],{"class":39},[29,112818,111993],{"class":309},[171,112820,112821,112822,112824,112825,82668,112827,28514],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[26,112823,79939],{}," 是 site 的名字，比如 ",[26,112826,111665],{},[26,112828,112088],{},[19,112830,112832],{"className":30507,"code":112831,"language":30509,"meta":24,"style":24},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[26,112833,112834],{"__ignoreMap":24},[29,112835,112836,112838,112840],{"class":31,"line":32},[29,112837,103763],{"class":309},[29,112839,355],{"class":305},[29,112841,112002],{"class":309},[171,112843,112844],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[19,112846,112848],{"className":30507,"code":112847,"language":30509,"meta":24,"style":24},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[26,112849,112850,112862],{"__ignoreMap":24},[29,112851,112852,112854,112856,112858,112860],{"class":31,"line":32},[29,112853,1707],{"class":305},[29,112855,103578],{"class":309},[29,112857,1218],{"class":305},[29,112859,4268],{"class":39},[29,112861,3914],{"class":309},[29,112863,112864,112866,112868,112870,112872,112874,112876,112878,112880,112882],{"class":31,"line":43},[29,112865,104024],{"class":305},[29,112867,103564],{"class":39},[29,112869,310],{"class":309},[29,112871,361],{"class":305},[29,112873,112027],{"class":103},[29,112875,1204],{"class":39},[29,112877,79939],{"class":309},[29,112879,1254],{"class":39},[29,112881,559],{"class":103},[29,112883,316],{"class":309},[171,112885,112886,112887,112890,112891,112893],{},"如果 site 没找到，就主动报错。",[26,112888,112889],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[26,112892,79939],{}," 的值放进字符串里。",[19,112895,112897],{"className":30507,"code":112896,"language":30509,"meta":24,"style":24},"return data.site_xpos[site_id].copy()\n",[26,112898,112899],{"__ignoreMap":24},[29,112900,112901,112903],{"class":31,"line":32},[29,112902,17221],{"class":305},[29,112904,112044],{"class":309},[171,112906,112907,112908,112910,112911,112914],{},"返回这个 site 的世界坐标。",[26,112909,103809],{}," 里的每一行都是一个 site 的 ",[26,112912,112913],{},"(x, y, z)"," 坐标。",[19,112916,112918],{"className":30507,"code":112917,"language":30509,"meta":24,"style":24},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[26,112919,112920],{"__ignoreMap":24},[29,112921,112922,112924,112926],{"class":31,"line":32},[29,112923,32076],{"class":305},[29,112925,112059],{"class":35},[29,112927,112062],{"class":309},[171,112929,112930],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[19,112932,112934],{"className":30507,"code":112933,"language":30509,"meta":24,"style":24},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[26,112935,112936,112948],{"__ignoreMap":24},[29,112937,112938,112940,112942,112944,112946],{"class":31,"line":32},[29,112939,111697],{"class":309},[29,112941,355],{"class":305},[29,112943,112072],{"class":309},[29,112945,111665],{"class":103},[29,112947,316],{"class":309},[29,112949,112950,112952,112954,112956,112958],{"class":31,"line":43},[29,112951,111707],{"class":309},[29,112953,355],{"class":305},[29,112955,112072],{"class":309},[29,112957,112088],{"class":103},[29,112959,316],{"class":309},[171,112961,112962],{},"分别读取末端点和目标点的世界坐标。",[19,112964,112965],{"className":30507,"code":112637,"language":30509,"meta":24,"style":24},[26,112966,112967],{"__ignoreMap":24},[29,112968,112969,112971],{"class":31,"line":32},[29,112970,17221],{"class":305},[29,112972,112097],{"class":309},[171,112974,112975],{},"把四部分拼成一个观测数组：",[19,112977,112980],{"className":112978,"code":112979,"language":5362,"meta":24},[5360],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[26,112981,112979],{"__ignoreMap":24},[19,112983,112985],{"className":30507,"code":112984,"language":30509,"meta":24,"style":24},"dist = np.linalg.norm(tip - target)\n",[26,112986,112987],{"__ignoreMap":24},[29,112988,112989,112991,112993,112995,112997],{"class":31,"line":32},[29,112990,111725],{"class":309},[29,112992,355],{"class":305},[29,112994,111730],{"class":309},[29,112996,840],{"class":305},[29,112998,111735],{"class":309},[171,113000,113001,113002,113005,113006,113009],{},"计算 tip 到 target 的距离。",[26,113003,113004],{},"tip - target"," 得到一个三维向量，",[26,113007,113008],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[171,113011,14808],{},[19,113013,113016],{"className":113014,"code":113015,"language":5362,"meta":24},[5360],"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",[26,113017,113015],{"__ignoreMap":24},[19,113019,113021],{"className":30507,"code":113020,"language":30509,"meta":24,"style":24},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[26,113022,113023],{"__ignoreMap":24},[29,113024,113025,113027,113029,113031,113033],{"class":31,"line":32},[29,113026,112672],{"class":309},[29,113028,355],{"class":305},[29,113030,112166],{"class":39},[29,113032,6693],{"class":305},[29,113034,112171],{"class":309},[171,113036,113037,113038,113041,113042,113045],{},"计算动作惩罚。",[26,113039,113040],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[26,113043,113044],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[19,113047,113049],{"className":30507,"code":113048,"language":30509,"meta":24,"style":24},"return float(-dist - control_cost)\n",[26,113050,113051],{"__ignoreMap":24},[29,113052,113053,113055,113057,113059,113061,113063,113065],{"class":31,"line":32},[29,113054,17221],{"class":305},[29,113056,109926],{"class":39},[29,113058,310],{"class":309},[29,113060,840],{"class":305},[29,113062,111725],{"class":309},[29,113064,840],{"class":305},[29,113066,112188],{"class":309},[171,113068,113069],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[19,113071,113072],{"className":30507,"code":110932,"language":30509,"meta":24,"style":24},[26,113073,113074],{"__ignoreMap":24},[29,113075,113076,113078,113080],{"class":31,"line":32},[29,113077,110939],{"class":309},[29,113079,355],{"class":305},[29,113081,104890],{"class":39},[171,113083,113084],{},"累计奖励变量，记录整个运行过程的总分。",[19,113086,113088],{"className":30507,"code":113087,"language":30509,"meta":24,"style":24},"for step in range(500):\n",[26,113089,113090],{"__ignoreMap":24},[29,113091,113092,113094,113096,113098,113100,113102,113104],{"class":31,"line":32},[29,113093,3200],{"class":305},[29,113095,31745],{"class":309},[29,113097,26172],{"class":305},[29,113099,32572],{"class":39},[29,113101,310],{"class":309},[29,113103,65203],{"class":39},[29,113105,30915],{"class":309},[171,113107,113108],{},"运行 500 个控制步。",[19,113110,113111],{"className":30507,"code":104672,"language":30509,"meta":24,"style":24},[26,113112,113113],{"__ignoreMap":24},[29,113114,113115],{"class":31,"line":32},[29,113116,104672],{"class":309},[171,113118,113119,113120,101147,113122,113124],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[26,113121,103360],{},[26,113123,103363],{}," 是当前状态下的坐标。",[19,113126,113128],{"className":30507,"code":113127,"language":30509,"meta":24,"style":24},"error = target - tip\n",[26,113129,113130],{"__ignoreMap":24},[29,113131,113132,113134,113136,113138,113140],{"class":31,"line":32},[29,113133,112725],{"class":309},[29,113135,355],{"class":305},[29,113137,112297],{"class":309},[29,113139,840],{"class":305},[29,113141,112302],{"class":309},[171,113143,113144],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[19,113146,113148],{"className":30507,"code":113147,"language":30509,"meta":24,"style":24},"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",[26,113149,113150,113182],{"__ignoreMap":24},[29,113151,113152,113154,113156,113158,113160,113162,113164,113166,113168,113170,113172,113174,113176,113178,113180],{"class":31,"line":32},[29,113153,106000],{"class":309},[29,113155,499],{"class":39},[29,113157,4618],{"class":309},[29,113159,355],{"class":305},[29,113161,112319],{"class":309},[29,113163,105389],{"class":39},[29,113165,6693],{"class":305},[29,113167,112326],{"class":309},[29,113169,386],{"class":39},[29,113171,112331],{"class":309},[29,113173,840],{"class":305},[29,113175,102532],{"class":39},[29,113177,12610],{"class":309},[29,113179,102532],{"class":39},[29,113181,316],{"class":309},[29,113183,113184,113186,113188,113190,113192,113194,113196,113198,113200,113202,113204,113206,113208,113210,113212],{"class":31,"line":43},[29,113185,106000],{"class":309},[29,113187,525],{"class":39},[29,113189,4618],{"class":309},[29,113191,355],{"class":305},[29,113193,112319],{"class":309},[29,113195,105389],{"class":39},[29,113197,6693],{"class":305},[29,113199,112326],{"class":309},[29,113201,499],{"class":39},[29,113203,112331],{"class":309},[29,113205,840],{"class":305},[29,113207,102532],{"class":39},[29,113209,12610],{"class":309},[29,113211,102532],{"class":39},[29,113213,316],{"class":309},[171,113215,113216,113217,113220],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[26,113218,113219],{},"error -> ctrl -> step"," 的流程。",[19,113222,113223],{"className":30507,"code":104634,"language":30509,"meta":24,"style":24},[26,113224,113225],{"__ignoreMap":24},[29,113226,113227],{"class":31,"line":32},[29,113228,104634],{"class":309},[171,113230,113231],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[19,113233,113235],{"className":30507,"code":113234,"language":30509,"meta":24,"style":24},"obs = get_obs(model, data)\n",[26,113236,113237],{"__ignoreMap":24},[29,113238,113239,113241,113243],{"class":31,"line":32},[29,113240,110983],{"class":309},[29,113242,355],{"class":305},[29,113244,112420],{"class":309},[171,113246,113247,113248,113251],{},"读取最新观测。后面打印 ",[26,113249,113250],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113253,102445],{"id":102444},[171,113255,113256],{},"观测维度为:",[19,113258,113261],{"className":113259,"code":113260,"language":5362,"meta":24},[5360],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[26,113262,113260],{"__ignoreMap":24},[171,113264,113265],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[171,113267,113268],{},"程序每 100 步打印：",[19,113270,113273],{"className":113271,"code":113272,"language":5362,"meta":24},[5360],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[26,113274,113272],{"__ignoreMap":24},[171,113276,113277,113278,113280],{},"如果控制有效，你应该看到最终 ",[26,113279,103360],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113282,102477],{"id":102476},[259,113284,113285,113288,113291,113297,113303,113310,113320],{},[178,113286,113287],{},"修改目标点位置。",[178,113289,113290],{},"重新运行，观察最终 tip 是否变化。",[178,113292,113293,113294,113296],{},"把 gravity 改成 ",[26,113295,102718],{},"，观察控制是否变差。",[178,113298,111310,113299,111314,113301,28514],{},[26,113300,102287],{},[26,113302,386],{},[178,113304,102540,113305,102543,113307,113309],{},[26,113306,110725],{},[26,113308,107436],{},"，观察机械臂是否更难移动。",[178,113311,102540,113312,82659,113314,102543,113316,113319],{},[26,113313,103363],{},[26,113315,104275],{},[26,113317,113318],{},"0.2 0 0.6","，观察 reward 和 final tip。",[178,113321,113322],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113324,102582],{"id":102581},[275,113326,113328],{"id":113327},"site-not-found",[26,113329,113330],{},"site not found",[171,113332,113333,113334,101147,113337,28514],{},"检查 XML 中是否有 ",[26,113335,113336],{},"site name=\"tip\"",[26,113338,113339],{},"site name=\"target\"",[275,113341,113342],{"id":113342},"机械臂完全不动",[171,113344,102652],{},[259,113346,113347,113352,113355,113360],{},[178,113348,113349,113351],{},[26,113350,102287],{}," 是否为 2",[178,113353,113354],{},"actuator 是否引用正确 joint",[178,113356,113357,113359],{},[26,113358,101205],{}," 是否被赋值",[178,113361,113362,113363],{},"是否执行了 ",[26,113364,100814],{},[275,113366,113367],{"id":113367},"控制效果不好",[171,113369,113370],{},"正常。本章重点不是控制器最优，而是任务结构:",[19,113372,113375],{"className":113373,"code":113374,"language":5362,"meta":24},[5360],"obs → action → mj_step → reward → next_obs\n",[26,113376,113374],{"__ignoreMap":24},[275,113378,113380],{"id":113379},"tip-坐标不变化","tip 坐标不变化",[171,113382,102704],{},[259,113384,113385,113390,113398,113407],{},[178,113386,113387,113388,28514],{},"是否每步调用了 ",[26,113389,100814],{},[178,113391,113392,113393,101147,113395,28514],{},"是否写入了 ",[26,113394,106255],{},[26,113396,113397],{},"data.ctrl[1]",[178,113399,113400,113401,520,113404,28514],{},"actuator 是否正确引用 ",[26,113402,113403],{},"joint1",[26,113405,113406],{},"joint2",[178,113408,113409],{},"控制输入是否太小。",[275,113411,113412],{"id":113412},"目标点不会动",[171,113414,113415],{},"本章的 target 是固定 site：",[19,113417,113419],{"className":53196,"code":113418,"language":53198,"meta":24,"style":24},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[26,113420,113421],{"__ignoreMap":24},[29,113422,113423,113425,113427,113429,113431,113433,113435,113437,113440],{"class":31,"line":32},[29,113424,1218],{"class":309},[29,113426,103339],{"class":51429},[29,113428,15095],{"class":35},[29,113430,355],{"class":309},[29,113432,112088],{"class":103},[29,113434,101235],{"class":35},[29,113436,355],{"class":309},[29,113438,113439],{"class":103},"\"0.5 0 0.4\"",[29,113441,113442],{"class":309}," ...\u002F>\n",[171,113444,113445,113446,113448],{},"它直接挂在 ",[26,113447,101970],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[275,113450,113451],{"id":113451},"机械臂不像真实机械臂",[171,113453,113454],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113456,102736],{"id":102735},[171,113458,113459],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[171,113461,113462],{},"核心公式：",[19,113464,113467],{"className":113465,"code":113466,"language":5362,"meta":24},[5360],"distance = ||tip - target||\nreward = -distance - action_cost\n",[26,113468,113466],{"__ignoreMap":24},[171,113470,113471],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[223,113473,113474],{},"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":24,"searchDepth":43,"depth":43,"links":113476},[113477,113478,113479,113484,113488,113489,113490,113498],{"id":100775,"depth":43,"text":100776},{"id":100898,"depth":43,"text":100899},{"id":101173,"depth":43,"text":101174,"children":113480},[113481,113482,113483],{"id":111680,"depth":51,"text":111681},{"id":111756,"depth":51,"text":111756},{"id":111786,"depth":51,"text":111787},{"id":101381,"depth":43,"text":101382,"children":113485},[113486,113487],{"id":101701,"depth":51,"text":101701},{"id":101837,"depth":51,"text":101837},{"id":102444,"depth":43,"text":102445},{"id":102476,"depth":43,"text":102477},{"id":102581,"depth":43,"text":102582,"children":113491},[113492,113493,113494,113495,113496,113497],{"id":113327,"depth":51,"text":113330},{"id":113342,"depth":51,"text":113342},{"id":113367,"depth":51,"text":113367},{"id":113379,"depth":51,"text":113380},{"id":113412,"depth":51,"text":113412},{"id":113451,"depth":51,"text":113451},{"id":102735,"depth":43,"text":102736},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111484,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113505,"title":113506,"body":113507,"description":24,"extension":231,"meta":116969,"navigation":233,"path":116970,"seo":116971,"stem":116972,"__hash__":116973},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113508,"toc":116940},[113509,113512,113514,113517,113520,113545,113548,113554,113557,113563,113565,113567,113591,113593,113611,113613,113656,113658,113685,113687,113690,113742,113745,113751,113760,113763,113801,113804,113843,113846,113854,113861,113864,113870,113872,113926,113933,113978,113981,113985,114001,114011,114013,115274,115276,115288,115290,115301,115303,115306,115327,115330,115333,115366,115372,115375,115408,115411,115414,115455,115460,115474,115477,115490,115495,115518,115520,115535,115545,115560,115567,115587,115602,115620,115623,115640,115648,115664,115670,115702,115715,115747,115757,115792,115806,115852,115866,115908,115919,115932,115938,115971,115974,116001,116011,116051,116061,116078,116085,116103,116106,116147,116160,116175,116178,116201,116204,116216,116219,116238,116243,116264,116267,116282,116285,116319,116331,116346,116349,116374,116377,116396,116399,116431,116434,116458,116464,116494,116501,116514,116517,116519,116521,116527,116530,116533,116545,116548,116550,116604,116606,116610,116616,116625,116628,116635,116637,116660,116663,116667,116669,116687,116693,116695,116728,116731,116737,116741,116744,116764,116769,116773,116780,116800,116805,116809,116812,116832,116835,116921,116925,116928,116934,116937],[10,113510,113506],{"id":113511},"_8gymnasium-风格强化学习接口基础",[14,113513,100776],{"id":100775},[171,113515,113516],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[171,113518,113519],{},"你将实现:",[19,113521,113523],{"className":30507,"code":113522,"language":30509,"meta":24,"style":24},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[26,113524,113525,113535],{"__ignoreMap":24},[29,113526,113527,113530,113532],{"class":31,"line":32},[29,113528,113529],{"class":309},"obs, info ",[29,113531,355],{"class":305},[29,113533,113534],{"class":309}," env.reset()\n",[29,113536,113537,113540,113542],{"class":31,"line":43},[29,113538,113539],{"class":309},"obs, reward, terminated, truncated, info ",[29,113541,355],{"class":305},[29,113543,113544],{"class":309}," env.step(action)\n",[171,113546,113547],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[171,113549,113550,113551,113553],{},"前面章节的代码都是“脚本式”的：在 ",[26,113552,102424],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[171,113555,113556],{},"可以先记住 Gymnasium 环境的核心交互：",[19,113558,113561],{"className":113559,"code":113560,"language":5362,"meta":24},[5360],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[26,113562,113560],{"__ignoreMap":24},[14,113564,100899],{"id":100898},[171,113566,100902],{},[19,113568,113569],{"className":21,"code":104517,"language":23,"meta":24,"style":24},[26,113570,113571],{"__ignoreMap":24},[29,113572,113573,113575,113577,113579,113581,113583,113585,113587,113589],{"class":31,"line":32},[29,113574,24749],{"class":35},[29,113576,26444],{"class":103},[29,113578,24007],{"class":103},[29,113580,26529],{"class":39},[29,113582,104532],{"class":103},[29,113584,100927],{"class":103},[29,113586,102630],{"class":103},[29,113588,100943],{"class":103},[29,113590,104541],{"class":103},[171,113592,102948],{},[19,113594,113596],{"className":21,"code":113595,"language":23,"meta":24,"style":24},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[26,113597,113598],{"__ignoreMap":24},[29,113599,113600,113602,113604,113606,113608],{"class":31,"line":32},[29,113601,24004],{"class":35},[29,113603,24007],{"class":103},[29,113605,101059],{"class":103},[29,113607,107840],{"class":103},[29,113609,113610],{"class":103}," gymnasium\n",[171,113612,102965],{},[19,113614,113616],{"className":21,"code":113615,"language":23,"meta":24,"style":24},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[26,113617,113618,113635,113644],{"__ignoreMap":24},[29,113619,113620,113622,113624,113626,113629,113631,113633],{"class":31,"line":32},[29,113621,30459],{"class":35},[29,113623,29305],{"class":103},[29,113625,25244],{"class":39},[29,113627,113628],{"class":103}," mujoco-gym-api",[29,113630,101104],{"class":103},[29,113632,101107],{"class":39},[29,113634,101110],{"class":39},[29,113636,113637,113639,113641],{"class":31,"line":43},[29,113638,30459],{"class":35},[29,113640,101117],{"class":103},[29,113642,113643],{"class":103}," mujoco-gym-api\n",[29,113645,113646,113648,113650,113652,113654],{"class":31,"line":51},[29,113647,24004],{"class":35},[29,113649,24007],{"class":103},[29,113651,101059],{"class":103},[29,113653,107840],{"class":103},[29,113655,113610],{"class":103},[171,113657,101133],{},[259,113659,113660,113670,113673,113679],{},[178,113661,113662,113663,113666,113667,28514],{},"本章使用 ",[26,113664,113665],{},"gymnasium","，不是旧版 ",[26,113668,113669],{},"gym",[178,113671,113672],{},"Gymnasium API 与旧 Gym API 有差异。",[178,113674,113675,113676,28514],{},"旧 Gym 常见返回值是 4 个: ",[26,113677,113678],{},"obs, reward, done, info",[178,113680,113681,113682,28514],{},"Gymnasium 返回值是 5 个: ",[26,113683,113684],{},"obs, reward, terminated, truncated, info",[14,113686,101174],{"id":101173},[171,113688,113689],{},"强化学习环境接口包含:",[445,113691,113692,113701],{},[448,113693,113694],{},[451,113695,113696,113699],{},[454,113697,113698],{"align":23911},"方法",[454,113700,102825],{"align":23911},[492,113702,113703,113713,113723,113733],{},[451,113704,113705,113710],{},[497,113706,113707],{"align":23911},[26,113708,113709],{},"reset()",[497,113711,113712],{"align":23911},"重置环境",[451,113714,113715,113720],{},[497,113716,113717],{"align":23911},[26,113718,113719],{},"step(action)",[497,113721,113722],{"align":23911},"执行动作",[451,113724,113725,113730],{},[497,113726,113727],{"align":23911},[26,113728,113729],{},"observation_space",[497,113731,113732],{"align":23911},"观测空间",[451,113734,113735,113740],{},[497,113736,113737],{"align":23911},[26,113738,113739],{},"action_space",[497,113741,23829],{"align":23911},[171,113743,113744],{},"一个最小环境需要完成:",[19,113746,113749],{"className":113747,"code":113748,"language":5362,"meta":24},[5360],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[26,113750,113748],{"__ignoreMap":24},[275,113752,113754,101147,113757,104767],{"id":113753},"terminated-和-truncated-的区别",[26,113755,113756],{},"terminated",[26,113758,113759],{},"truncated",[171,113761,113762],{},"Gymnasium 把“结束”拆成两个概念：",[445,113764,113765,113775],{},[448,113766,113767],{},[451,113768,113769,113771,113773],{},[454,113770,104703],{"align":23911},[454,113772,100829],{"align":23911},[454,113774,21362],{"align":23911},[492,113776,113777,113789],{},[451,113778,113779,113783,113786],{},[497,113780,113781],{"align":23911},[26,113782,113756],{},[497,113784,113785],{"align":23911},"任务自然结束",[497,113787,113788],{"align":23911},"机械臂到达目标、机器人摔倒",[451,113790,113791,113795,113798],{},[497,113792,113793],{"align":23911},[26,113794,113759],{},[497,113796,113797],{"align":23911},"因外部限制截断",[497,113799,113800],{"align":23911},"达到最大步数、时间限制",[171,113802,113803],{},"本章中：",[19,113805,113807],{"className":30507,"code":113806,"language":30509,"meta":24,"style":24},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[26,113808,113809,113824],{"__ignoreMap":24},[29,113810,113811,113814,113816,113819,113821],{"class":31,"line":32},[29,113812,113813],{"class":309},"terminated ",[29,113815,355],{"class":305},[29,113817,113818],{"class":309}," dist ",[29,113820,1218],{"class":305},[29,113822,113823],{"class":39}," 0.05\n",[29,113825,113826,113829,113831,113833,113836,113838,113840],{"class":31,"line":43},[29,113827,113828],{"class":309},"truncated ",[29,113830,355],{"class":305},[29,113832,39002],{"class":39},[29,113834,113835],{"class":309},".steps ",[29,113837,1886],{"class":305},[29,113839,39002],{"class":39},[29,113841,113842],{"class":309},".max_steps\n",[171,113844,113845],{},"也就是：",[259,113847,113848,113851],{},[178,113849,113850],{},"末端距离目标小于 0.05，任务成功结束。",[178,113852,113853],{},"步数超过上限，episode 被截断。",[275,113855,113857,101147,113859],{"id":113856},"observation_space-和-action_space",[26,113858,113729],{},[26,113860,113739],{},[171,113862,113863],{},"这两个对象告诉算法：",[19,113865,113868],{"className":113866,"code":113867,"language":5362,"meta":24},[5360],"观测长什么样\n动作允许多大\n",[26,113869,113867],{"__ignoreMap":24},[171,113871,14808],{},[19,113873,113875],{"className":30507,"code":113874,"language":30509,"meta":24,"style":24},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[26,113876,113877],{"__ignoreMap":24},[29,113878,113879,113881,113884,113886,113889,113892,113895,113897,113899,113902,113904,113906,113908,113910,113912,113914,113916,113919,113921,113923],{"class":31,"line":32},[29,113880,30952],{"class":39},[29,113882,113883],{"class":309},".action_space ",[29,113885,355],{"class":305},[29,113887,113888],{"class":309}," spaces.Box(",[29,113890,113891],{"class":5391},"low",[29,113893,113894],{"class":305},"=-",[29,113896,102532],{"class":39},[29,113898,12610],{"class":309},[29,113900,113901],{"class":5391},"high",[29,113903,355],{"class":305},[29,113905,102532],{"class":39},[29,113907,12610],{"class":309},[29,113909,96092],{"class":5391},[29,113911,355],{"class":305},[29,113913,310],{"class":309},[29,113915,386],{"class":39},[29,113917,113918],{"class":309},",), ",[29,113920,93629],{"class":5391},[29,113922,355],{"class":305},[29,113924,113925],{"class":309},"np.float32)\n",[171,113927,113928,113929,113932],{},"表示动作是 2 维数组，每个值都在 ",[26,113930,113931],{},"[-1, 1]"," 范围内。",[19,113934,113936],{"className":30507,"code":113935,"language":30509,"meta":24,"style":24},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[26,113937,113938],{"__ignoreMap":24},[29,113939,113940,113942,113945,113947,113949,113951,113953,113956,113958,113960,113962,113964,113966,113968,113970,113972,113974,113976],{"class":31,"line":32},[29,113941,30952],{"class":39},[29,113943,113944],{"class":309},".observation_space ",[29,113946,355],{"class":305},[29,113948,113888],{"class":309},[29,113950,113891],{"class":5391},[29,113952,113894],{"class":305},[29,113954,113955],{"class":309},"np.inf, ",[29,113957,113901],{"class":5391},[29,113959,355],{"class":305},[29,113961,113955],{"class":309},[29,113963,96092],{"class":5391},[29,113965,355],{"class":305},[29,113967,310],{"class":309},[29,113969,754],{"class":39},[29,113971,113918],{"class":309},[29,113973,93629],{"class":5391},[29,113975,355],{"class":305},[29,113977,113925],{"class":309},[171,113979,113980],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[275,113982,113984],{"id":113983},"frame_skip-是什么","frame_skip 是什么",[19,113986,113988],{"className":30507,"code":113987,"language":30509,"meta":24,"style":24},"self.frame_skip = 5\n",[26,113989,113990],{"__ignoreMap":24},[29,113991,113992,113994,113997,113999],{"class":31,"line":32},[29,113993,30952],{"class":39},[29,113995,113996],{"class":309},".frame_skip ",[29,113998,355],{"class":305},[29,114000,54556],{"class":39},[171,114002,114003,114004,114007,114008,114010],{},"表示外部调用一次 ",[26,114005,114006],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[26,114009,101344],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114012,101382],{"id":101381},[19,114014,114016],{"className":30507,"code":114015,"language":30509,"meta":24,"style":24},"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",[26,114017,114018,114030,114036,114046,114057,114061,114065,114073,114078,114082,114086,114090,114094,114098,114102,114106,114111,114115,114119,114123,114128,114132,114136,114140,114144,114148,114152,114156,114160,114164,114168,114172,114176,114180,114198,114213,114217,114230,114240,114255,114272,114276,114297,114316,114341,114355,114359,114369,114381,114391,114395,114437,114475,114479,114489,114505,114520,114539,114546,114550,114563,114578,114593,114606,114625,114641,114645,114686,114701,114716,114720,114759,114770,114783,114787,114797,114806,114810,114820,114835,114853,114857,114868,114885,114898,114902,114912,114916,114927,114938,114942,114956,114970,114986,114990,115003,115020,115035,115042,115046,115050,115062,115072,115090,115102,115114,115118,115126,115142,115151,115160,115168,115210,115223,115228,115232,115250,115254,115258,115270],{"__ignoreMap":24},[29,114019,114020,114022,114025,114027],{"class":31,"line":32},[29,114021,30521],{"class":305},[29,114023,114024],{"class":309}," gymnasium ",[29,114026,31512],{"class":305},[29,114028,114029],{"class":309}," gym\n",[29,114031,114032,114034],{"class":31,"line":43},[29,114033,30521],{"class":305},[29,114035,101430],{"class":309},[29,114037,114038,114040,114042,114044],{"class":31,"line":51},[29,114039,30521],{"class":305},[29,114041,31509],{"class":309},[29,114043,31512],{"class":305},[29,114045,31515],{"class":309},[29,114047,114048,114050,114052,114054],{"class":31,"line":59},[29,114049,30866],{"class":305},[29,114051,114024],{"class":309},[29,114053,30521],{"class":305},[29,114055,114056],{"class":309}," spaces\n",[29,114058,114059],{"class":31,"line":67},[29,114060,2575],{"emptyLinePlaceholder":233},[29,114062,114063],{"class":31,"line":75},[29,114064,2575],{"emptyLinePlaceholder":233},[29,114066,114067,114069,114071],{"class":31,"line":83},[29,114068,101443],{"class":39},[29,114070,13739],{"class":305},[29,114072,101448],{"class":103},[29,114074,114075],{"class":31,"line":158},[29,114076,114077],{"class":103},"\u003Cmujoco model=\"gym_reacher\">\n",[29,114079,114080],{"class":31,"line":166},[29,114081,111867],{"class":103},[29,114083,114084],{"class":31,"line":1505},[29,114085,2575],{"emptyLinePlaceholder":233},[29,114087,114088],{"class":31,"line":1788},[29,114089,101467],{"class":103},[29,114091,114092],{"class":31,"line":1793},[29,114093,111885],{"class":103},[29,114095,114096],{"class":31,"line":1799},[29,114097,2575],{"emptyLinePlaceholder":233},[29,114099,114100],{"class":31,"line":1804},[29,114101,111894],{"class":103},[29,114103,114104],{"class":31,"line":1818},[29,114105,111899],{"class":103},[29,114107,114108],{"class":31,"line":1823},[29,114109,114110],{"class":103},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[29,114112,114113],{"class":31,"line":1829},[29,114114,2575],{"emptyLinePlaceholder":233},[29,114116,114117],{"class":31,"line":1850},[29,114118,111913],{"class":103},[29,114120,114121],{"class":31,"line":1855},[29,114122,111918],{"class":103},[29,114124,114125],{"class":31,"line":1869},[29,114126,114127],{"class":103},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[29,114129,114130],{"class":31,"line":1874},[29,114131,111928],{"class":103},[29,114133,114134],{"class":31,"line":1903},[29,114135,106567],{"class":103},[29,114137,114138],{"class":31,"line":1908},[29,114139,101496],{"class":103},[29,114141,114142],{"class":31,"line":1925},[29,114143,101501],{"class":103},[29,114145,114146],{"class":31,"line":1930},[29,114147,2575],{"emptyLinePlaceholder":233},[29,114149,114150],{"class":31,"line":1935},[29,114151,106584],{"class":103},[29,114153,114154],{"class":31,"line":1940},[29,114155,111953],{"class":103},[29,114157,114158],{"class":31,"line":1954},[29,114159,111958],{"class":103},[29,114161,114162],{"class":31,"line":1959},[29,114163,106594],{"class":103},[29,114165,114166],{"class":31,"line":2752},[29,114167,101506],{"class":103},[29,114169,114170],{"class":31,"line":2766},[29,114171,95827],{"class":103},[29,114173,114174],{"class":31,"line":2774},[29,114175,2575],{"emptyLinePlaceholder":233},[29,114177,114178],{"class":31,"line":2779},[29,114179,2575],{"emptyLinePlaceholder":233},[29,114181,114182,114184,114187,114189,114191,114193,114196],{"class":31,"line":2785},[29,114183,14869],{"class":305},[29,114185,114186],{"class":35}," ReacherEnv",[29,114188,310],{"class":309},[29,114190,113669],{"class":35},[29,114192,866],{"class":309},[29,114194,114195],{"class":35},"Env",[29,114197,30915],{"class":309},[29,114199,114200,114203,114205,114207,114210],{"class":31,"line":2791},[29,114201,114202],{"class":309},"    metadata ",[29,114204,355],{"class":305},[29,114206,4623],{"class":309},[29,114208,114209],{"class":103},"\"render_modes\"",[29,114211,114212],{"class":309},": []}\n",[29,114214,114215],{"class":31,"line":2796},[29,114216,2575],{"emptyLinePlaceholder":233},[29,114218,114219,114221,114223,114226,114228],{"class":31,"line":8123},[29,114220,30930],{"class":305},[29,114222,30933],{"class":39},[29,114224,114225],{"class":309},"(self) -> ",[29,114227,95815],{"class":39},[29,114229,3914],{"class":309},[29,114231,114232,114234,114236,114238],{"class":31,"line":8147},[29,114233,30946],{"class":39},[29,114235,17436],{"class":309},[29,114237,30958],{"class":39},[29,114239,2151],{"class":309},[29,114241,114242,114244,114247,114249,114251,114253],{"class":31,"line":8152},[29,114243,30974],{"class":39},[29,114245,114246],{"class":309},".model ",[29,114248,355],{"class":305},[29,114250,101541],{"class":309},[29,114252,101443],{"class":39},[29,114254,316],{"class":309},[29,114256,114257,114259,114262,114264,114267,114269],{"class":31,"line":8158},[29,114258,30974],{"class":39},[29,114260,114261],{"class":309},".data ",[29,114263,355],{"class":305},[29,114265,114266],{"class":309}," mujoco.MjData(",[29,114268,30952],{"class":39},[29,114270,114271],{"class":309},".model)\n",[29,114273,114274],{"class":31,"line":8185},[29,114275,2575],{"emptyLinePlaceholder":233},[29,114277,114278,114280,114283,114285,114288,114290,114293,114295],{"class":31,"line":8190},[29,114279,30974],{"class":39},[29,114281,114282],{"class":309},".tip_site_id ",[29,114284,355],{"class":305},[29,114286,114287],{"class":309}," mujoco.mj_name2id(",[29,114289,30952],{"class":39},[29,114291,114292],{"class":309},".model, mujoco.mjtObj.mjOBJ_SITE, ",[29,114294,111665],{"class":103},[29,114296,316],{"class":309},[29,114298,114299,114301,114304,114306,114308,114310,114312,114314],{"class":31,"line":8196},[29,114300,30974],{"class":39},[29,114302,114303],{"class":309},".target_site_id ",[29,114305,355],{"class":305},[29,114307,114287],{"class":309},[29,114309,30952],{"class":39},[29,114311,114292],{"class":309},[29,114313,112088],{"class":103},[29,114315,316],{"class":309},[29,114317,114318,114320,114322,114324,114326,114328,114331,114333,114335,114337,114339],{"class":31,"line":8208},[29,114319,2672],{"class":305},[29,114321,39002],{"class":39},[29,114323,114282],{"class":309},[29,114325,1218],{"class":305},[29,114327,4268],{"class":39},[29,114329,114330],{"class":305}," or",[29,114332,39002],{"class":39},[29,114334,114303],{"class":309},[29,114336,1218],{"class":305},[29,114338,4268],{"class":39},[29,114340,3914],{"class":309},[29,114342,114343,114346,114348,114350,114353],{"class":31,"line":8220},[29,114344,114345],{"class":305},"            raise",[29,114347,103564],{"class":39},[29,114349,310],{"class":309},[29,114351,114352],{"class":103},"\"required sites not found\"",[29,114354,316],{"class":309},[29,114356,114357],{"class":31,"line":8232},[29,114358,2575],{"emptyLinePlaceholder":233},[29,114360,114361,114363,114365,114367],{"class":31,"line":9891},[29,114362,30974],{"class":39},[29,114364,113996],{"class":309},[29,114366,355],{"class":305},[29,114368,54556],{"class":39},[29,114370,114371,114373,114376,114378],{"class":31,"line":9916},[29,114372,30974],{"class":39},[29,114374,114375],{"class":309},".max_steps ",[29,114377,355],{"class":305},[29,114379,114380],{"class":39}," 200\n",[29,114382,114383,114385,114387,114389],{"class":31,"line":9939},[29,114384,30974],{"class":39},[29,114386,113835],{"class":309},[29,114388,355],{"class":305},[29,114390,47462],{"class":39},[29,114392,114393],{"class":31,"line":9963},[29,114394,2575],{"emptyLinePlaceholder":233},[29,114396,114397,114399,114401,114403,114405,114407,114409,114411,114413,114415,114417,114419,114421,114423,114425,114427,114429,114431,114433,114435],{"class":31,"line":9968},[29,114398,30974],{"class":39},[29,114400,113883],{"class":309},[29,114402,355],{"class":305},[29,114404,113888],{"class":309},[29,114406,113891],{"class":5391},[29,114408,113894],{"class":305},[29,114410,102532],{"class":39},[29,114412,12610],{"class":309},[29,114414,113901],{"class":5391},[29,114416,355],{"class":305},[29,114418,102532],{"class":39},[29,114420,12610],{"class":309},[29,114422,96092],{"class":5391},[29,114424,355],{"class":305},[29,114426,310],{"class":309},[29,114428,386],{"class":39},[29,114430,113918],{"class":309},[29,114432,93629],{"class":5391},[29,114434,355],{"class":305},[29,114436,113925],{"class":309},[29,114438,114439,114441,114443,114445,114447,114449,114451,114453,114455,114457,114459,114461,114463,114465,114467,114469,114471,114473],{"class":31,"line":9973},[29,114440,30974],{"class":39},[29,114442,113944],{"class":309},[29,114444,355],{"class":305},[29,114446,113888],{"class":309},[29,114448,113891],{"class":5391},[29,114450,113894],{"class":305},[29,114452,113955],{"class":309},[29,114454,113901],{"class":5391},[29,114456,355],{"class":305},[29,114458,113955],{"class":309},[29,114460,96092],{"class":5391},[29,114462,355],{"class":305},[29,114464,310],{"class":309},[29,114466,754],{"class":39},[29,114468,113918],{"class":309},[29,114470,93629],{"class":5391},[29,114472,355],{"class":305},[29,114474,113925],{"class":309},[29,114476,114477],{"class":31,"line":9978},[29,114478,2575],{"emptyLinePlaceholder":233},[29,114480,114481,114483,114486],{"class":31,"line":9987},[29,114482,30930],{"class":305},[29,114484,114485],{"class":35}," _get_obs",[29,114487,114488],{"class":309},"(self) -> np.ndarray:\n",[29,114490,114491,114493,114495,114497,114500,114502],{"class":31,"line":9992},[29,114492,112266],{"class":309},[29,114494,355],{"class":305},[29,114496,39002],{"class":39},[29,114498,114499],{"class":309},".data.site_xpos[",[29,114501,30952],{"class":39},[29,114503,114504],{"class":309},".tip_site_id].copy()\n",[29,114506,114507,114509,114511,114513,114515,114517],{"class":31,"line":9998},[29,114508,112279],{"class":309},[29,114510,355],{"class":305},[29,114512,39002],{"class":39},[29,114514,114499],{"class":309},[29,114516,30952],{"class":39},[29,114518,114519],{"class":309},".target_site_id].copy()\n",[29,114521,114522,114524,114526,114529,114531,114534,114536],{"class":31,"line":10019},[29,114523,110311],{"class":309},[29,114525,355],{"class":305},[29,114527,114528],{"class":309}," np.concatenate([",[29,114530,30952],{"class":39},[29,114532,114533],{"class":309},".data.qpos.copy(), ",[29,114535,30952],{"class":39},[29,114537,114538],{"class":309},".data.qvel.copy(), tip, target])\n",[29,114540,114541,114543],{"class":31,"line":10025},[29,114542,14927],{"class":305},[29,114544,114545],{"class":309}," obs.astype(np.float32)\n",[29,114547,114548],{"class":31,"line":10039},[29,114549,2575],{"emptyLinePlaceholder":233},[29,114551,114552,114554,114557,114559,114561],{"class":31,"line":10045},[29,114553,30930],{"class":305},[29,114555,114556],{"class":35}," _get_reward",[29,114558,114225],{"class":309},[29,114560,349],{"class":39},[29,114562,3914],{"class":309},[29,114564,114565,114567,114569,114571,114573,114575],{"class":31,"line":10072},[29,114566,112266],{"class":309},[29,114568,355],{"class":305},[29,114570,39002],{"class":39},[29,114572,114499],{"class":309},[29,114574,30952],{"class":39},[29,114576,114577],{"class":309},".tip_site_id]\n",[29,114579,114580,114582,114584,114586,114588,114590],{"class":31,"line":10081},[29,114581,112279],{"class":309},[29,114583,355],{"class":305},[29,114585,39002],{"class":39},[29,114587,114499],{"class":309},[29,114589,30952],{"class":39},[29,114591,114592],{"class":309},".target_site_id]\n",[29,114594,114595,114598,114600,114602,114604],{"class":31,"line":10087},[29,114596,114597],{"class":309},"        dist ",[29,114599,355],{"class":305},[29,114601,111730],{"class":309},[29,114603,840],{"class":305},[29,114605,111735],{"class":309},[29,114607,114608,114611,114613,114615,114617,114620,114622],{"class":31,"line":10095},[29,114609,114610],{"class":309},"        control_cost ",[29,114612,355],{"class":305},[29,114614,112166],{"class":39},[29,114616,6693],{"class":305},[29,114618,114619],{"class":309}," np.sum(np.square(",[29,114621,30952],{"class":39},[29,114623,114624],{"class":309},".data.ctrl))\n",[29,114626,114627,114629,114631,114633,114635,114637,114639],{"class":31,"line":10100},[29,114628,14927],{"class":305},[29,114630,109926],{"class":39},[29,114632,310],{"class":309},[29,114634,840],{"class":305},[29,114636,111725],{"class":309},[29,114638,840],{"class":305},[29,114640,112188],{"class":309},[29,114642,114643],{"class":31,"line":16779},[29,114644,2575],{"emptyLinePlaceholder":233},[29,114646,114647,114649,114652,114655,114657,114660,114662,114664,114666,114668,114670,114673,114676,114678,114680,114682,114684],{"class":31,"line":16785},[29,114648,30930],{"class":305},[29,114650,114651],{"class":35}," reset",[29,114653,114654],{"class":309},"(self, ",[29,114656,763],{"class":305},[29,114658,114659],{"class":309},", seed: ",[29,114661,313],{"class":39},[29,114663,25238],{"class":305},[29,114665,39062],{"class":39},[29,114667,13739],{"class":305},[29,114669,39062],{"class":39},[29,114671,114672],{"class":309},", options: ",[29,114674,114675],{"class":39},"dict",[29,114677,25238],{"class":305},[29,114679,39062],{"class":39},[29,114681,13739],{"class":305},[29,114683,39062],{"class":39},[29,114685,30915],{"class":309},[29,114687,114688,114690,114693,114696,114698],{"class":31,"line":16808},[29,114689,30946],{"class":39},[29,114691,114692],{"class":309},"().reset(",[29,114694,114695],{"class":5391},"seed",[29,114697,355],{"class":305},[29,114699,114700],{"class":309},"seed)\n",[29,114702,114703,114706,114708,114711,114713],{"class":31,"line":16814},[29,114704,114705],{"class":309},"        mujoco.mj_resetData(",[29,114707,30952],{"class":39},[29,114709,114710],{"class":309},".model, ",[29,114712,30952],{"class":39},[29,114714,114715],{"class":309},".data)\n",[29,114717,114718],{"class":31,"line":16837},[29,114719,2575],{"emptyLinePlaceholder":233},[29,114721,114722,114724,114727,114729,114731,114734,114736,114738,114740,114742,114744,114746,114748,114750,114752,114754,114756],{"class":31,"line":16851},[29,114723,30974],{"class":39},[29,114725,114726],{"class":309},".data.qpos[:] ",[29,114728,355],{"class":305},[29,114730,39002],{"class":39},[29,114732,114733],{"class":309},".np_random.uniform(",[29,114735,113891],{"class":5391},[29,114737,113894],{"class":305},[29,114739,86339],{"class":39},[29,114741,12610],{"class":309},[29,114743,113901],{"class":5391},[29,114745,355],{"class":305},[29,114747,86339],{"class":39},[29,114749,12610],{"class":309},[29,114751,31625],{"class":5391},[29,114753,355],{"class":305},[29,114755,30952],{"class":39},[29,114757,114758],{"class":309},".model.nq)\n",[29,114760,114761,114763,114766,114768],{"class":31,"line":16871},[29,114762,30974],{"class":39},[29,114764,114765],{"class":309},".data.qvel[:] ",[29,114767,355],{"class":305},[29,114769,104890],{"class":39},[29,114771,114772,114775,114777,114779,114781],{"class":31,"line":16877},[29,114773,114774],{"class":309},"        mujoco.mj_forward(",[29,114776,30952],{"class":39},[29,114778,114710],{"class":309},[29,114780,30952],{"class":39},[29,114782,114715],{"class":309},[29,114784,114785],{"class":31,"line":16888},[29,114786,2575],{"emptyLinePlaceholder":233},[29,114788,114789,114791,114793,114795],{"class":31,"line":16911},[29,114790,30974],{"class":39},[29,114792,113835],{"class":309},[29,114794,355],{"class":305},[29,114796,47462],{"class":39},[29,114798,114799,114801,114803],{"class":31,"line":16933},[29,114800,14927],{"class":305},[29,114802,39002],{"class":39},[29,114804,114805],{"class":309},"._get_obs(), {}\n",[29,114807,114808],{"class":31,"line":16938},[29,114809,2575],{"emptyLinePlaceholder":233},[29,114811,114812,114814,114817],{"class":31,"line":16944},[29,114813,30930],{"class":305},[29,114815,114816],{"class":35}," step",[29,114818,114819],{"class":309},"(self, action):\n",[29,114821,114822,114824,114826,114829,114831,114833],{"class":31,"line":16958},[29,114823,110351],{"class":309},[29,114825,355],{"class":305},[29,114827,114828],{"class":309}," np.asarray(action, ",[29,114830,93629],{"class":5391},[29,114832,355],{"class":305},[29,114834,113925],{"class":309},[29,114836,114837,114839,114841,114843,114845,114848,114850],{"class":31,"line":16971},[29,114838,110351],{"class":309},[29,114840,355],{"class":305},[29,114842,107576],{"class":309},[29,114844,30952],{"class":39},[29,114846,114847],{"class":309},".action_space.low, ",[29,114849,30952],{"class":39},[29,114851,114852],{"class":309},".action_space.high)\n",[29,114854,114855],{"class":31,"line":16976},[29,114856,2575],{"emptyLinePlaceholder":233},[29,114858,114859,114861,114864,114866],{"class":31,"line":16990},[29,114860,30974],{"class":39},[29,114862,114863],{"class":309},".data.ctrl[:] ",[29,114865,355],{"class":305},[29,114867,107599],{"class":309},[29,114869,114870,114872,114874,114876,114878,114880,114882],{"class":31,"line":16995},[29,114871,3578],{"class":305},[29,114873,101630],{"class":309},[29,114875,26172],{"class":305},[29,114877,32572],{"class":39},[29,114879,310],{"class":309},[29,114881,30952],{"class":39},[29,114883,114884],{"class":309},".frame_skip):\n",[29,114886,114887,114890,114892,114894,114896],{"class":31,"line":17001},[29,114888,114889],{"class":309},"            mujoco.mj_step(",[29,114891,30952],{"class":39},[29,114893,114710],{"class":309},[29,114895,30952],{"class":39},[29,114897,114715],{"class":309},[29,114899,114900],{"class":31,"line":17006},[29,114901,2575],{"emptyLinePlaceholder":233},[29,114903,114904,114906,114908,114910],{"class":31,"line":17020},[29,114905,30974],{"class":39},[29,114907,113835],{"class":309},[29,114909,9652],{"class":305},[29,114911,55828],{"class":39},[29,114913,114914],{"class":31,"line":17025},[29,114915,2575],{"emptyLinePlaceholder":233},[29,114917,114918,114920,114922,114924],{"class":31,"line":17030},[29,114919,110311],{"class":309},[29,114921,355],{"class":305},[29,114923,39002],{"class":39},[29,114925,114926],{"class":309},"._get_obs()\n",[29,114928,114929,114931,114933,114935],{"class":31,"line":17044},[29,114930,110416],{"class":309},[29,114932,355],{"class":305},[29,114934,39002],{"class":39},[29,114936,114937],{"class":309},"._get_reward()\n",[29,114939,114940],{"class":31,"line":17056},[29,114941,2575],{"emptyLinePlaceholder":233},[29,114943,114944,114946,114948,114950,114952,114954],{"class":31,"line":17061},[29,114945,112266],{"class":309},[29,114947,355],{"class":305},[29,114949,39002],{"class":39},[29,114951,114499],{"class":309},[29,114953,30952],{"class":39},[29,114955,114577],{"class":309},[29,114957,114958,114960,114962,114964,114966,114968],{"class":31,"line":17074},[29,114959,112279],{"class":309},[29,114961,355],{"class":305},[29,114963,39002],{"class":39},[29,114965,114499],{"class":309},[29,114967,30952],{"class":39},[29,114969,114592],{"class":309},[29,114971,114972,114974,114976,114978,114981,114983],{"class":31,"line":17079},[29,114973,114597],{"class":309},[29,114975,355],{"class":305},[29,114977,109926],{"class":39},[29,114979,114980],{"class":309},"(np.linalg.norm(tip ",[29,114982,840],{"class":305},[29,114984,114985],{"class":309}," target))\n",[29,114987,114988],{"class":31,"line":17084},[29,114989,2575],{"emptyLinePlaceholder":233},[29,114991,114992,114995,114997,114999,115001],{"class":31,"line":17089},[29,114993,114994],{"class":309},"        terminated ",[29,114996,355],{"class":305},[29,114998,113818],{"class":309},[29,115000,1218],{"class":305},[29,115002,113823],{"class":39},[29,115004,115005,115008,115010,115012,115014,115016,115018],{"class":31,"line":17102},[29,115006,115007],{"class":309},"        truncated ",[29,115009,355],{"class":305},[29,115011,39002],{"class":39},[29,115013,113835],{"class":309},[29,115015,1886],{"class":305},[29,115017,39002],{"class":39},[29,115019,113842],{"class":309},[29,115021,115022,115025,115027,115029,115032],{"class":31,"line":17107},[29,115023,115024],{"class":309},"        info ",[29,115026,355],{"class":305},[29,115028,4623],{"class":309},[29,115030,115031],{"class":103},"\"distance\"",[29,115033,115034],{"class":309},": dist}\n",[29,115036,115037,115039],{"class":31,"line":32762},[29,115038,14927],{"class":305},[29,115040,115041],{"class":309}," obs, reward, terminated, truncated, info\n",[29,115043,115044],{"class":31,"line":32768},[29,115045,2575],{"emptyLinePlaceholder":233},[29,115047,115048],{"class":31,"line":32774},[29,115049,2575],{"emptyLinePlaceholder":233},[29,115051,115052,115054,115056,115058,115060],{"class":31,"line":32780},[29,115053,32076],{"class":305},[29,115055,2148],{"class":35},[29,115057,101527],{"class":309},[29,115059,95815],{"class":39},[29,115061,3914],{"class":309},[29,115063,115064,115067,115069],{"class":31,"line":32786},[29,115065,115066],{"class":309},"    env ",[29,115068,355],{"class":305},[29,115070,115071],{"class":309}," ReacherEnv()\n",[29,115073,115074,115077,115079,115082,115084,115086,115088],{"class":31,"line":32797},[29,115075,115076],{"class":309},"    obs, info ",[29,115078,355],{"class":305},[29,115080,115081],{"class":309}," env.reset(",[29,115083,114695],{"class":5391},[29,115085,355],{"class":305},[29,115087,499],{"class":39},[29,115089,316],{"class":309},[29,115091,115092,115094,115096,115099],{"class":31,"line":32803},[29,115093,31428],{"class":39},[29,115095,310],{"class":309},[29,115097,115098],{"class":103},"\"initial obs shape:\"",[29,115100,115101],{"class":309},", obs.shape)\n",[29,115103,115104,115106,115108,115111],{"class":31,"line":32823},[29,115105,31428],{"class":39},[29,115107,310],{"class":309},[29,115109,115110],{"class":103},"\"initial info:\"",[29,115112,115113],{"class":309},", info)\n",[29,115115,115116],{"class":31,"line":32829},[29,115117,2575],{"emptyLinePlaceholder":233},[29,115119,115120,115122,115124],{"class":31,"line":32840},[29,115121,110282],{"class":309},[29,115123,355],{"class":305},[29,115125,104890],{"class":39},[29,115127,115128,115130,115132,115134,115136,115138,115140],{"class":31,"line":32846},[29,115129,3376],{"class":305},[29,115131,31745],{"class":309},[29,115133,26172],{"class":305},[29,115135,32572],{"class":39},[29,115137,310],{"class":309},[29,115139,1008],{"class":39},[29,115141,30915],{"class":309},[29,115143,115144,115146,115148],{"class":31,"line":32852},[29,115145,110351],{"class":309},[29,115147,355],{"class":305},[29,115149,115150],{"class":309}," env.action_space.sample()\n",[29,115152,115153,115156,115158],{"class":31,"line":32858},[29,115154,115155],{"class":309},"        obs, reward, terminated, truncated, info ",[29,115157,355],{"class":305},[29,115159,113544],{"class":309},[29,115161,115162,115164,115166],{"class":31,"line":32864},[29,115163,110426],{"class":309},[29,115165,9652],{"class":305},[29,115167,110431],{"class":309},[29,115169,115170,115172,115174,115176,115178,115181,115183,115185,115188,115190,115192,115195,115197,115199,115202,115204,115206,115208],{"class":31,"line":32870},[29,115171,32580],{"class":39},[29,115173,310],{"class":309},[29,115175,110460],{"class":103},[29,115177,110463],{"class":309},[29,115179,115180],{"class":103},"\"reward:\"",[29,115182,12610],{"class":309},[29,115184,32147],{"class":39},[29,115186,115187],{"class":309},"(reward, ",[29,115189,380],{"class":39},[29,115191,110474],{"class":309},[29,115193,115194],{"class":103},"\"distance:\"",[29,115196,12610],{"class":309},[29,115198,32147],{"class":39},[29,115200,115201],{"class":309},"(info[",[29,115203,115031],{"class":103},[29,115205,112331],{"class":309},[29,115207,380],{"class":39},[29,115209,30626],{"class":309},[29,115211,115212,115214,115217,115220],{"class":31,"line":32876},[29,115213,2672],{"class":305},[29,115215,115216],{"class":309}," terminated ",[29,115218,115219],{"class":305},"or",[29,115221,115222],{"class":309}," truncated:\n",[29,115224,115225],{"class":31,"line":32882},[29,115226,115227],{"class":305},"            break\n",[29,115229,115230],{"class":31,"line":32902},[29,115231,2575],{"emptyLinePlaceholder":233},[29,115233,115234,115236,115238,115240,115242,115244,115246,115248],{"class":31,"line":32908},[29,115235,31428],{"class":39},[29,115237,310],{"class":309},[29,115239,110505],{"class":103},[29,115241,12610],{"class":309},[29,115243,32147],{"class":39},[29,115245,110512],{"class":309},[29,115247,380],{"class":39},[29,115249,30626],{"class":309},[29,115251,115252],{"class":31,"line":32924},[29,115253,2575],{"emptyLinePlaceholder":233},[29,115255,115256],{"class":31,"line":32930},[29,115257,2575],{"emptyLinePlaceholder":233},[29,115259,115260,115262,115264,115266,115268],{"class":31,"line":32944},[29,115261,1707],{"class":305},[29,115263,31349],{"class":39},[29,115265,101688],{"class":305},[29,115267,101691],{"class":103},[29,115269,3914],{"class":309},[29,115271,115272],{"class":31,"line":32950},[29,115273,101698],{"class":309},[171,115275,103699],{},[19,115277,115279],{"className":21,"code":115278,"language":23,"meta":24,"style":24},"touch ch8_gym_env.py\n",[26,115280,115281],{"__ignoreMap":24},[29,115282,115283,115285],{"class":31,"line":32},[29,115284,101412],{"class":35},[29,115286,115287],{"class":103}," ch8_gym_env.py\n",[171,115289,110573],{},[19,115291,115293],{"className":21,"code":115292,"language":23,"meta":24,"style":24},"python ch8_gym_env.py\n",[26,115294,115295],{"__ignoreMap":24},[29,115296,115297,115299],{"class":31,"line":32},[29,115298,30509],{"class":35},[29,115300,115287],{"class":103},[275,115302,101701],{"id":101701},[171,115304,115305],{},"继承 Gymnasium 环境：",[19,115307,115309],{"className":30507,"code":115308,"language":30509,"meta":24,"style":24},"class ReacherEnv(gym.Env):\n",[26,115310,115311],{"__ignoreMap":24},[29,115312,115313,115315,115317,115319,115321,115323,115325],{"class":31,"line":32},[29,115314,14869],{"class":305},[29,115316,114186],{"class":35},[29,115318,310],{"class":309},[29,115320,113669],{"class":35},[29,115322,866],{"class":309},[29,115324,114195],{"class":35},[29,115326,30915],{"class":309},[171,115328,115329],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[171,115331,115332],{},"初始化模型：",[19,115334,115336],{"className":30507,"code":115335,"language":30509,"meta":24,"style":24},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[26,115337,115338,115352],{"__ignoreMap":24},[29,115339,115340,115342,115344,115346,115348,115350],{"class":31,"line":32},[29,115341,30952],{"class":39},[29,115343,114246],{"class":309},[29,115345,355],{"class":305},[29,115347,101541],{"class":309},[29,115349,101443],{"class":39},[29,115351,316],{"class":309},[29,115353,115354,115356,115358,115360,115362,115364],{"class":31,"line":43},[29,115355,30952],{"class":39},[29,115357,114261],{"class":309},[29,115359,355],{"class":305},[29,115361,114266],{"class":309},[29,115363,30952],{"class":39},[29,115365,114271],{"class":309},[171,115367,115368,115369,115371],{},"这和前面章节一样，只是现在放到了类的 ",[26,115370,30958],{}," 里。",[171,115373,115374],{},"缓存 site ID：",[19,115376,115378],{"className":30507,"code":115377,"language":30509,"meta":24,"style":24},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[26,115379,115380,115394],{"__ignoreMap":24},[29,115381,115382,115384,115386,115388,115390,115392],{"class":31,"line":32},[29,115383,30952],{"class":39},[29,115385,114282],{"class":309},[29,115387,355],{"class":305},[29,115389,114287],{"class":309},[29,115391,89683],{"class":39},[29,115393,316],{"class":309},[29,115395,115396,115398,115400,115402,115404,115406],{"class":31,"line":43},[29,115397,30952],{"class":39},[29,115399,114303],{"class":309},[29,115401,355],{"class":305},[29,115403,114287],{"class":309},[29,115405,89683],{"class":39},[29,115407,316],{"class":309},[171,115409,115410],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[171,115412,115413],{},"reset：",[19,115415,115417],{"className":30507,"code":115416,"language":30509,"meta":24,"style":24},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[26,115418,115419],{"__ignoreMap":24},[29,115420,115421,115423,115425,115427,115429,115431,115433,115435,115437,115439,115441,115443,115445,115447,115449,115451,115453],{"class":31,"line":32},[29,115422,32076],{"class":305},[29,115424,114651],{"class":35},[29,115426,114654],{"class":309},[29,115428,763],{"class":305},[29,115430,114659],{"class":309},[29,115432,313],{"class":39},[29,115434,25238],{"class":305},[29,115436,39062],{"class":39},[29,115438,13739],{"class":305},[29,115440,39062],{"class":39},[29,115442,114672],{"class":309},[29,115444,114675],{"class":39},[29,115446,25238],{"class":305},[29,115448,39062],{"class":39},[29,115450,13739],{"class":305},[29,115452,39062],{"class":39},[29,115454,30915],{"class":309},[171,115456,115457,115459],{},[26,115458,70185],{}," 做四件事：",[259,115461,115462,115465,115468,115471],{},[178,115463,115464],{},"设置随机种子。",[178,115466,115467],{},"重置 MuJoCo data。",[178,115469,115470],{},"随机初始化关节角。",[178,115472,115473],{},"返回初始观测和 info。",[171,115475,115476],{},"step：",[19,115478,115480],{"className":30507,"code":115479,"language":30509,"meta":24,"style":24},"def step(self, action):\n",[26,115481,115482],{"__ignoreMap":24},[29,115483,115484,115486,115488],{"class":31,"line":32},[29,115485,32076],{"class":305},[29,115487,114816],{"class":35},[29,115489,114819],{"class":309},[171,115491,115492,115494],{},[26,115493,107263],{}," 做六件事：",[259,115496,115497,115500,115506,115509,115512,115515],{},[178,115498,115499],{},"检查并裁剪 action。",[178,115501,115502,115503,28514],{},"写入 ",[26,115504,115505],{},"self.data.ctrl",[178,115507,115508],{},"连续推进若干个 MuJoCo 物理步。",[178,115510,115511],{},"计算新观测。",[178,115513,115514],{},"计算奖励和结束条件。",[178,115516,115517],{},"返回 Gymnasium 标准五元组。",[275,115519,101837],{"id":101837},[19,115521,115523],{"className":30507,"code":115522,"language":30509,"meta":24,"style":24},"import gymnasium as gym\n",[26,115524,115525],{"__ignoreMap":24},[29,115526,115527,115529,115531,115533],{"class":31,"line":32},[29,115528,30521],{"class":305},[29,115530,114024],{"class":309},[29,115532,31512],{"class":305},[29,115534,114029],{"class":309},[171,115536,115537,115538,115540,115541,115544],{},"导入 Gymnasium，并起别名 ",[26,115539,113669],{},"。后面写 ",[26,115542,115543],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[19,115546,115548],{"className":30507,"code":115547,"language":30509,"meta":24,"style":24},"from gymnasium import spaces\n",[26,115549,115550],{"__ignoreMap":24},[29,115551,115552,115554,115556,115558],{"class":31,"line":32},[29,115553,30866],{"class":305},[29,115555,114024],{"class":309},[29,115557,30521],{"class":305},[29,115559,114056],{"class":309},[171,115561,115562,115563,115566],{},"导入空间定义工具。",[26,115564,115565],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[19,115568,115569],{"className":30507,"code":115308,"language":30509,"meta":24,"style":24},[26,115570,115571],{"__ignoreMap":24},[29,115572,115573,115575,115577,115579,115581,115583,115585],{"class":31,"line":32},[29,115574,14869],{"class":305},[29,115576,114186],{"class":35},[29,115578,310],{"class":309},[29,115580,113669],{"class":35},[29,115582,866],{"class":309},[29,115584,114195],{"class":35},[29,115586,30915],{"class":309},[171,115588,115589,115590,115593,115594,115596,115597,101147,115599,115601],{},"定义一个类，名字叫 ",[26,115591,115592],{},"ReacherEnv","。括号里的 ",[26,115595,115543],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[26,115598,70185],{},[26,115600,107263],{}," 这两个核心方法。",[19,115603,115605],{"className":30507,"code":115604,"language":30509,"meta":24,"style":24},"metadata = {\"render_modes\": []}\n",[26,115606,115607],{"__ignoreMap":24},[29,115608,115609,115612,115614,115616,115618],{"class":31,"line":32},[29,115610,115611],{"class":309},"metadata ",[29,115613,355],{"class":305},[29,115615,4623],{"class":309},[29,115617,114209],{"class":103},[29,115619,114212],{"class":309},[171,115621,115622],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[19,115624,115626],{"className":30507,"code":115625,"language":30509,"meta":24,"style":24},"def __init__(self) -> None:\n",[26,115627,115628],{"__ignoreMap":24},[29,115629,115630,115632,115634,115636,115638],{"class":31,"line":32},[29,115631,32076],{"class":305},[29,115633,30933],{"class":39},[29,115635,114225],{"class":309},[29,115637,95815],{"class":39},[29,115639,3914],{"class":309},[171,115641,115642,115644,115645,28514],{},[26,115643,30958],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[26,115646,115647],{},"env = ReacherEnv()",[19,115649,115651],{"className":30507,"code":115650,"language":30509,"meta":24,"style":24},"super().__init__()\n",[26,115652,115653],{"__ignoreMap":24},[29,115654,115655,115658,115660,115662],{"class":31,"line":32},[29,115656,115657],{"class":39},"super",[29,115659,17436],{"class":309},[29,115661,30958],{"class":39},[29,115663,2151],{"class":309},[171,115665,115666,115667,115669],{},"调用父类 ",[26,115668,115543],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[19,115671,115672],{"className":30507,"code":115335,"language":30509,"meta":24,"style":24},[26,115673,115674,115688],{"__ignoreMap":24},[29,115675,115676,115678,115680,115682,115684,115686],{"class":31,"line":32},[29,115677,30952],{"class":39},[29,115679,114246],{"class":309},[29,115681,355],{"class":305},[29,115683,101541],{"class":309},[29,115685,101443],{"class":39},[29,115687,316],{"class":309},[29,115689,115690,115692,115694,115696,115698,115700],{"class":31,"line":43},[29,115691,30952],{"class":39},[29,115693,114261],{"class":309},[29,115695,355],{"class":305},[29,115697,114266],{"class":309},[29,115699,30952],{"class":39},[29,115701,114271],{"class":309},[171,115703,115704,115705,115707,115708,101147,115711,115714],{},"把 MuJoCo 模型和状态保存到 ",[26,115706,30952],{}," 上。",[26,115709,115710],{},"self.model",[26,115712,115713],{},"self.data"," 表示这个环境对象自己的模型和状态。",[19,115716,115717],{"className":30507,"code":115377,"language":30509,"meta":24,"style":24},[26,115718,115719,115733],{"__ignoreMap":24},[29,115720,115721,115723,115725,115727,115729,115731],{"class":31,"line":32},[29,115722,30952],{"class":39},[29,115724,114282],{"class":309},[29,115726,355],{"class":305},[29,115728,114287],{"class":309},[29,115730,89683],{"class":39},[29,115732,316],{"class":309},[29,115734,115735,115737,115739,115741,115743,115745],{"class":31,"line":43},[29,115736,30952],{"class":39},[29,115738,114303],{"class":309},[29,115740,355],{"class":305},[29,115742,114287],{"class":309},[29,115744,89683],{"class":39},[29,115746,316],{"class":309},[171,115748,115749,115750,101147,115753,115756],{},"提前查好 tip 和 target 的 site ID。这样 ",[26,115751,115752],{},"_get_obs",[26,115754,115755],{},"_get_reward"," 里就不用每次按名字查找。",[19,115758,115760],{"className":30507,"code":115759,"language":30509,"meta":24,"style":24},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[26,115761,115762,115772,115782],{"__ignoreMap":24},[29,115763,115764,115766,115768,115770],{"class":31,"line":32},[29,115765,30952],{"class":39},[29,115767,113996],{"class":309},[29,115769,355],{"class":305},[29,115771,54556],{"class":39},[29,115773,115774,115776,115778,115780],{"class":31,"line":43},[29,115775,30952],{"class":39},[29,115777,114375],{"class":309},[29,115779,355],{"class":305},[29,115781,114380],{"class":39},[29,115783,115784,115786,115788,115790],{"class":31,"line":51},[29,115785,30952],{"class":39},[29,115787,113835],{"class":309},[29,115789,355],{"class":305},[29,115791,47462],{"class":39},[171,115793,115794,115797,115798,115801,115802,115805],{},[26,115795,115796],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[26,115799,115800],{},"max_steps"," 是一个 episode 最多运行多少步。",[26,115803,115804],{},"steps"," 记录当前 episode 已经走了多少步。",[19,115807,115808],{"className":30507,"code":113874,"language":30509,"meta":24,"style":24},[26,115809,115810],{"__ignoreMap":24},[29,115811,115812,115814,115816,115818,115820,115822,115824,115826,115828,115830,115832,115834,115836,115838,115840,115842,115844,115846,115848,115850],{"class":31,"line":32},[29,115813,30952],{"class":39},[29,115815,113883],{"class":309},[29,115817,355],{"class":305},[29,115819,113888],{"class":309},[29,115821,113891],{"class":5391},[29,115823,113894],{"class":305},[29,115825,102532],{"class":39},[29,115827,12610],{"class":309},[29,115829,113901],{"class":5391},[29,115831,355],{"class":305},[29,115833,102532],{"class":39},[29,115835,12610],{"class":309},[29,115837,96092],{"class":5391},[29,115839,355],{"class":305},[29,115841,310],{"class":309},[29,115843,386],{"class":39},[29,115845,113918],{"class":309},[29,115847,93629],{"class":5391},[29,115849,355],{"class":305},[29,115851,113925],{"class":309},[171,115853,115854,115855,115858,115859,101147,115862,115865],{},"定义动作空间。",[26,115856,115857],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[26,115860,115861],{},"low=-1.0",[26,115863,115864],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[19,115867,115868],{"className":30507,"code":113935,"language":30509,"meta":24,"style":24},[26,115869,115870],{"__ignoreMap":24},[29,115871,115872,115874,115876,115878,115880,115882,115884,115886,115888,115890,115892,115894,115896,115898,115900,115902,115904,115906],{"class":31,"line":32},[29,115873,30952],{"class":39},[29,115875,113944],{"class":309},[29,115877,355],{"class":305},[29,115879,113888],{"class":309},[29,115881,113891],{"class":5391},[29,115883,113894],{"class":305},[29,115885,113955],{"class":309},[29,115887,113901],{"class":5391},[29,115889,355],{"class":305},[29,115891,113955],{"class":309},[29,115893,96092],{"class":5391},[29,115895,355],{"class":305},[29,115897,310],{"class":309},[29,115899,754],{"class":39},[29,115901,113918],{"class":309},[29,115903,93629],{"class":5391},[29,115905,355],{"class":305},[29,115907,113925],{"class":309},[171,115909,115910,115911,115914,115915,115918],{},"定义观测空间。",[26,115912,115913],{},"shape=(10,)"," 表示观测是 10 个数。",[26,115916,115917],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[19,115920,115922],{"className":30507,"code":115921,"language":30509,"meta":24,"style":24},"def _get_obs(self) -> np.ndarray:\n",[26,115923,115924],{"__ignoreMap":24},[29,115925,115926,115928,115930],{"class":31,"line":32},[29,115927,32076],{"class":305},[29,115929,114485],{"class":35},[29,115931,114488],{"class":309},[171,115933,115934,115935,115937],{},"定义内部函数，用来生成观测。函数名前面的 ",[26,115936,1300],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[19,115939,115941],{"className":30507,"code":115940,"language":30509,"meta":24,"style":24},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[26,115942,115943,115957],{"__ignoreMap":24},[29,115944,115945,115947,115949,115951,115953,115955],{"class":31,"line":32},[29,115946,111697],{"class":309},[29,115948,355],{"class":305},[29,115950,39002],{"class":39},[29,115952,114499],{"class":309},[29,115954,30952],{"class":39},[29,115956,114504],{"class":309},[29,115958,115959,115961,115963,115965,115967,115969],{"class":31,"line":43},[29,115960,111707],{"class":309},[29,115962,355],{"class":305},[29,115964,39002],{"class":39},[29,115966,114499],{"class":309},[29,115968,30952],{"class":39},[29,115970,114519],{"class":309},[171,115972,115973],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[19,115975,115977],{"className":30507,"code":115976,"language":30509,"meta":24,"style":24},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[26,115978,115979,115995],{"__ignoreMap":24},[29,115980,115981,115983,115985,115987,115989,115991,115993],{"class":31,"line":32},[29,115982,110983],{"class":309},[29,115984,355],{"class":305},[29,115986,114528],{"class":309},[29,115988,30952],{"class":39},[29,115990,114533],{"class":309},[29,115992,30952],{"class":39},[29,115994,114538],{"class":309},[29,115996,115997,115999],{"class":31,"line":43},[29,115998,17221],{"class":305},[29,116000,114545],{"class":309},[171,116002,116003,116004,116007,116008,116010],{},"拼接观测，并转换成 ",[26,116005,116006],{},"float32","。很多强化学习库默认使用 ",[26,116009,116006],{},"，所以这里主动转换。",[19,116012,116013],{"className":30507,"code":115416,"language":30509,"meta":24,"style":24},[26,116014,116015],{"__ignoreMap":24},[29,116016,116017,116019,116021,116023,116025,116027,116029,116031,116033,116035,116037,116039,116041,116043,116045,116047,116049],{"class":31,"line":32},[29,116018,32076],{"class":305},[29,116020,114651],{"class":35},[29,116022,114654],{"class":309},[29,116024,763],{"class":305},[29,116026,114659],{"class":309},[29,116028,313],{"class":39},[29,116030,25238],{"class":305},[29,116032,39062],{"class":39},[29,116034,13739],{"class":305},[29,116036,39062],{"class":39},[29,116038,114672],{"class":309},[29,116040,114675],{"class":39},[29,116042,25238],{"class":305},[29,116044,39062],{"class":39},[29,116046,13739],{"class":305},[29,116048,39062],{"class":39},[29,116050,30915],{"class":309},[171,116052,116053,116054,116056,116057,116060],{},"定义 reset。",[26,116055,114695],{}," 用来控制随机数，保证实验可以复现。",[26,116058,116059],{},"options"," 用来接收额外配置，本章暂时不用。",[19,116062,116064],{"className":30507,"code":116063,"language":30509,"meta":24,"style":24},"super().reset(seed=seed)\n",[26,116065,116066],{"__ignoreMap":24},[29,116067,116068,116070,116072,116074,116076],{"class":31,"line":32},[29,116069,115657],{"class":39},[29,116071,114692],{"class":309},[29,116073,114695],{"class":5391},[29,116075,355],{"class":305},[29,116077,114700],{"class":309},[171,116079,116080,116081,116084],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[26,116082,116083],{},"self.np_random"," 生成可复现的随机数。",[19,116086,116088],{"className":30507,"code":116087,"language":30509,"meta":24,"style":24},"mujoco.mj_resetData(self.model, self.data)\n",[26,116089,116090],{"__ignoreMap":24},[29,116091,116092,116095,116097,116099,116101],{"class":31,"line":32},[29,116093,116094],{"class":309},"mujoco.mj_resetData(",[29,116096,30952],{"class":39},[29,116098,114710],{"class":309},[29,116100,30952],{"class":39},[29,116102,114715],{"class":309},[171,116104,116105],{},"把 MuJoCo 状态重置到默认状态。",[19,116107,116109],{"className":30507,"code":116108,"language":30509,"meta":24,"style":24},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[26,116110,116111],{"__ignoreMap":24},[29,116112,116113,116115,116117,116119,116121,116123,116125,116127,116129,116131,116133,116135,116137,116139,116141,116143,116145],{"class":31,"line":32},[29,116114,30952],{"class":39},[29,116116,114726],{"class":309},[29,116118,355],{"class":305},[29,116120,39002],{"class":39},[29,116122,114733],{"class":309},[29,116124,113891],{"class":5391},[29,116126,113894],{"class":305},[29,116128,86339],{"class":39},[29,116130,12610],{"class":309},[29,116132,113901],{"class":5391},[29,116134,355],{"class":305},[29,116136,86339],{"class":39},[29,116138,12610],{"class":309},[29,116140,31625],{"class":5391},[29,116142,355],{"class":305},[29,116144,30952],{"class":39},[29,116146,114758],{"class":309},[171,116148,115470,116149,116152,116153,116156,116157,116159],{},[26,116150,116151],{},"[:]"," 表示修改整个数组。",[26,116154,116155],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[26,116158,102279],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[19,116161,116163],{"className":30507,"code":116162,"language":30509,"meta":24,"style":24},"self.data.qvel[:] = 0.0\n",[26,116164,116165],{"__ignoreMap":24},[29,116166,116167,116169,116171,116173],{"class":31,"line":32},[29,116168,30952],{"class":39},[29,116170,114765],{"class":309},[29,116172,355],{"class":305},[29,116174,104890],{"class":39},[171,116176,116177],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[19,116179,116181],{"className":30507,"code":116180,"language":30509,"meta":24,"style":24},"self.steps = 0\nreturn self._get_obs(), {}\n",[26,116182,116183,116193],{"__ignoreMap":24},[29,116184,116185,116187,116189,116191],{"class":31,"line":32},[29,116186,30952],{"class":39},[29,116188,113835],{"class":309},[29,116190,355],{"class":305},[29,116192,47462],{"class":39},[29,116194,116195,116197,116199],{"class":31,"line":43},[29,116196,17221],{"class":305},[29,116198,39002],{"class":39},[29,116200,114805],{"class":309},[171,116202,116203],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[19,116205,116206],{"className":30507,"code":115479,"language":30509,"meta":24,"style":24},[26,116207,116208],{"__ignoreMap":24},[29,116209,116210,116212,116214],{"class":31,"line":32},[29,116211,32076],{"class":305},[29,116213,114816],{"class":35},[29,116215,114819],{"class":309},[171,116217,116218],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[19,116220,116222],{"className":30507,"code":116221,"language":30509,"meta":24,"style":24},"action = np.asarray(action, dtype=np.float32)\n",[26,116223,116224],{"__ignoreMap":24},[29,116225,116226,116228,116230,116232,116234,116236],{"class":31,"line":32},[29,116227,107571],{"class":309},[29,116229,355],{"class":305},[29,116231,114828],{"class":309},[29,116233,93629],{"class":5391},[29,116235,355],{"class":305},[29,116237,113925],{"class":309},[171,116239,116240,116241,28514],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[26,116242,116006],{},[19,116244,116246],{"className":30507,"code":116245,"language":30509,"meta":24,"style":24},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[26,116247,116248],{"__ignoreMap":24},[29,116249,116250,116252,116254,116256,116258,116260,116262],{"class":31,"line":32},[29,116251,107571],{"class":309},[29,116253,355],{"class":305},[29,116255,107576],{"class":309},[29,116257,30952],{"class":39},[29,116259,114847],{"class":309},[29,116261,30952],{"class":39},[29,116263,114852],{"class":309},[171,116265,116266],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[19,116268,116270],{"className":30507,"code":116269,"language":30509,"meta":24,"style":24},"self.data.ctrl[:] = action\n",[26,116271,116272],{"__ignoreMap":24},[29,116273,116274,116276,116278,116280],{"class":31,"line":32},[29,116275,30952],{"class":39},[29,116277,114863],{"class":309},[29,116279,355],{"class":305},[29,116281,107599],{"class":309},[171,116283,116284],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[19,116286,116288],{"className":30507,"code":116287,"language":30509,"meta":24,"style":24},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[26,116289,116290,116306],{"__ignoreMap":24},[29,116291,116292,116294,116296,116298,116300,116302,116304],{"class":31,"line":32},[29,116293,3200],{"class":305},[29,116295,101630],{"class":309},[29,116297,26172],{"class":305},[29,116299,32572],{"class":39},[29,116301,310],{"class":309},[29,116303,30952],{"class":39},[29,116305,114884],{"class":309},[29,116307,116308,116311,116313,116315,116317],{"class":31,"line":43},[29,116309,116310],{"class":309},"    mujoco.mj_step(",[29,116312,30952],{"class":39},[29,116314,114710],{"class":309},[29,116316,30952],{"class":39},[29,116318,114715],{"class":309},[171,116320,116321,116322,116325,116326,116328,116329,28514],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[26,116323,116324],{},"frame_skip=5","，所以外部调用一次 ",[26,116327,114006],{},"，内部实际执行 5 次 ",[26,116330,101344],{},[19,116332,116334],{"className":30507,"code":116333,"language":30509,"meta":24,"style":24},"self.steps += 1\n",[26,116335,116336],{"__ignoreMap":24},[29,116337,116338,116340,116342,116344],{"class":31,"line":32},[29,116339,30952],{"class":39},[29,116341,113835],{"class":309},[29,116343,9652],{"class":305},[29,116345,55828],{"class":39},[171,116347,116348],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[19,116350,116352],{"className":30507,"code":116351,"language":30509,"meta":24,"style":24},"obs = self._get_obs()\nreward = self._get_reward()\n",[26,116353,116354,116364],{"__ignoreMap":24},[29,116355,116356,116358,116360,116362],{"class":31,"line":32},[29,116357,110983],{"class":309},[29,116359,355],{"class":305},[29,116361,39002],{"class":39},[29,116363,114926],{"class":309},[29,116365,116366,116368,116370,116372],{"class":31,"line":43},[29,116367,111134],{"class":309},[29,116369,355],{"class":305},[29,116371,39002],{"class":39},[29,116373,114937],{"class":309},[171,116375,116376],{},"计算新的观测和奖励。",[19,116378,116380],{"className":30507,"code":116379,"language":30509,"meta":24,"style":24},"dist = float(np.linalg.norm(tip - target))\n",[26,116381,116382],{"__ignoreMap":24},[29,116383,116384,116386,116388,116390,116392,116394],{"class":31,"line":32},[29,116385,111725],{"class":309},[29,116387,355],{"class":305},[29,116389,109926],{"class":39},[29,116391,114980],{"class":309},[29,116393,840],{"class":305},[29,116395,114985],{"class":309},[171,116397,116398],{},"计算末端到目标的距离，并转换成 Python float。",[19,116400,116401],{"className":30507,"code":113806,"language":30509,"meta":24,"style":24},[26,116402,116403,116415],{"__ignoreMap":24},[29,116404,116405,116407,116409,116411,116413],{"class":31,"line":32},[29,116406,113813],{"class":309},[29,116408,355],{"class":305},[29,116410,113818],{"class":309},[29,116412,1218],{"class":305},[29,116414,113823],{"class":39},[29,116416,116417,116419,116421,116423,116425,116427,116429],{"class":31,"line":43},[29,116418,113828],{"class":309},[29,116420,355],{"class":305},[29,116422,39002],{"class":39},[29,116424,113835],{"class":309},[29,116426,1886],{"class":305},[29,116428,39002],{"class":39},[29,116430,113842],{"class":309},[171,116432,116433],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[19,116435,116437],{"className":30507,"code":116436,"language":30509,"meta":24,"style":24},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[26,116438,116439,116452],{"__ignoreMap":24},[29,116440,116441,116444,116446,116448,116450],{"class":31,"line":32},[29,116442,116443],{"class":309},"info ",[29,116445,355],{"class":305},[29,116447,4623],{"class":309},[29,116449,115031],{"class":103},[29,116451,115034],{"class":309},[29,116453,116454,116456],{"class":31,"line":43},[29,116455,17221],{"class":305},[29,116457,115041],{"class":309},[171,116459,116460,116463],{},[26,116461,116462],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[19,116465,116467],{"className":30507,"code":116466,"language":30509,"meta":24,"style":24},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[26,116468,116469,116478],{"__ignoreMap":24},[29,116470,116471,116474,116476],{"class":31,"line":32},[29,116472,116473],{"class":309},"env ",[29,116475,355],{"class":305},[29,116477,115071],{"class":309},[29,116479,116480,116482,116484,116486,116488,116490,116492],{"class":31,"line":43},[29,116481,113529],{"class":309},[29,116483,355],{"class":305},[29,116485,115081],{"class":309},[29,116487,114695],{"class":5391},[29,116489,355],{"class":305},[29,116491,499],{"class":39},[29,116493,316],{"class":309},[171,116495,116496,116497,116500],{},"创建环境并重置。",[26,116498,116499],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[19,116502,116504],{"className":30507,"code":116503,"language":30509,"meta":24,"style":24},"action = env.action_space.sample()\n",[26,116505,116506],{"__ignoreMap":24},[29,116507,116508,116510,116512],{"class":31,"line":32},[29,116509,107571],{"class":309},[29,116511,355],{"class":305},[29,116513,115150],{"class":309},[171,116515,116516],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116518,102445],{"id":102444},[171,116520,105613],{},[19,116522,116525],{"className":116523,"code":116524,"language":5362,"meta":24},[5360],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[26,116526,116524],{"__ignoreMap":24},[171,116528,116529],{},"这个环境已经具备强化学习环境的基本结构。",[171,116531,116532],{},"主函数里使用随机动作：",[19,116534,116535],{"className":30507,"code":116503,"language":30509,"meta":24,"style":24},[26,116536,116537],{"__ignoreMap":24},[29,116538,116539,116541,116543],{"class":31,"line":32},[29,116540,107571],{"class":309},[29,116542,355],{"class":305},[29,116544,115150],{"class":309},[171,116546,116547],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116549,102477],{"id":102476},[259,116551,116552,116555,116561,116570,116579,116588,116594],{},[178,116553,116554],{},"运行程序。",[178,116556,116557,116558,28514],{},"确认 ",[26,116559,116560],{},"obs.shape == (10,)",[178,116562,111310,116563,116566,116567,28514],{},[26,116564,116565],{},"env.action_space","，应类似 ",[26,116568,116569],{},"Box(-1.0, 1.0, (2,), float32)",[178,116571,105714,116572,116575,116576,28514],{},[26,116573,116574],{},"self.max_steps = 10","，确认环境会更快 ",[26,116577,116578],{},"truncated=True",[178,116580,102540,116581,102543,116584,116587],{},[26,116582,116583],{},"terminated = dist \u003C 0.05",[26,116585,116586],{},"dist \u003C 0.2","，观察是否更容易结束。",[178,116589,102540,116590,116593],{},[26,116591,116592],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[178,116595,116596,116597,116599,116600,116603],{},"在 ",[26,116598,116462],{}," 里加入 ",[26,116601,116602],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116605,102582],{"id":102581},[275,116607,116609],{"id":116608},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[171,116611,116612,116613,116615],{},"Gymnasium 的 ",[26,116614,107263],{}," 返回 5 个值:",[19,116617,116619],{"className":30507,"code":116618,"language":30509,"meta":24,"style":24},"obs, reward, terminated, truncated, info\n",[26,116620,116621],{"__ignoreMap":24},[29,116622,116623],{"class":31,"line":32},[29,116624,116618],{"class":309},[171,116626,116627],{},"不是旧 Gym 的 4 个值。",[275,116629,116631,116634],{"id":116630},"datactrl-action-维度错误",[26,116632,116633],{},"data.ctrl[:] = action"," 维度错误",[171,116636,102652],{},[19,116638,116640],{"className":30507,"code":116639,"language":30509,"meta":24,"style":24},"print(self.model.nu)\nprint(action.shape)\n",[26,116641,116642,116653],{"__ignoreMap":24},[29,116643,116644,116646,116648,116650],{"class":31,"line":32},[29,116645,30544],{"class":39},[29,116647,310],{"class":309},[29,116649,30952],{"class":39},[29,116651,116652],{"class":309},".model.nu)\n",[29,116654,116655,116657],{"class":31,"line":43},[29,116656,30544],{"class":39},[29,116658,116659],{"class":309},"(action.shape)\n",[171,116661,116662],{},"两者必须匹配。",[275,116664,116666],{"id":116665},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[171,116668,102591],{},[19,116670,116672],{"className":30507,"code":116671,"language":30509,"meta":24,"style":24},"mujoco.mj_forward(self.model, self.data)\n",[26,116673,116674],{"__ignoreMap":24},[29,116675,116676,116679,116681,116683,116685],{"class":31,"line":32},[29,116677,116678],{"class":309},"mujoco.mj_forward(",[29,116680,30952],{"class":39},[29,116682,114710],{"class":309},[29,116684,30952],{"class":39},[29,116686,114715],{"class":309},[275,116688,116690,116692],{"id":116689},"observation_space-维度和-obs-不一致",[26,116691,113729],{}," 维度和 obs 不一致",[171,116694,102704],{},[19,116696,116698],{"className":30507,"code":116697,"language":30509,"meta":24,"style":24},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[26,116699,116700,116710,116717],{"__ignoreMap":24},[29,116701,116702,116704,116706,116708],{"class":31,"line":32},[29,116703,110983],{"class":309},[29,116705,355],{"class":305},[29,116707,39002],{"class":39},[29,116709,114926],{"class":309},[29,116711,116712,116714],{"class":31,"line":43},[29,116713,30544],{"class":39},[29,116715,116716],{"class":309},"(obs.shape)\n",[29,116718,116719,116721,116723,116725],{"class":31,"line":51},[29,116720,30544],{"class":39},[29,116722,310],{"class":309},[29,116724,30952],{"class":39},[29,116726,116727],{"class":309},".observation_space.shape)\n",[171,116729,116730],{},"两者必须一致。本章观测是：",[19,116732,116735],{"className":116733,"code":116734,"language":5362,"meta":24},[5360],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[26,116736,116734],{"__ignoreMap":24},[275,116738,116740],{"id":116739},"action-超过范围","action 超过范围",[171,116742,116743],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[19,116745,116746],{"className":30507,"code":116245,"language":30509,"meta":24,"style":24},[26,116747,116748],{"__ignoreMap":24},[29,116749,116750,116752,116754,116756,116758,116760,116762],{"class":31,"line":32},[29,116751,107571],{"class":309},[29,116753,355],{"class":305},[29,116755,107576],{"class":309},[29,116757,30952],{"class":39},[29,116759,114847],{"class":309},[29,116761,30952],{"class":39},[29,116763,114852],{"class":309},[171,116765,116766,116767,28514],{},"这能避免无效动作直接写入 ",[26,116768,101205],{},[275,116770,116772],{"id":116771},"忘记返回-info","忘记返回 info",[171,116774,116612,116775,101147,116777,116779],{},[26,116776,70185],{},[26,116778,107263],{}," 都会返回 info：",[19,116781,116782],{"className":30507,"code":113522,"language":30509,"meta":24,"style":24},[26,116783,116784,116792],{"__ignoreMap":24},[29,116785,116786,116788,116790],{"class":31,"line":32},[29,116787,113529],{"class":309},[29,116789,355],{"class":305},[29,116791,113534],{"class":309},[29,116793,116794,116796,116798],{"class":31,"line":43},[29,116795,113539],{"class":309},[29,116797,355],{"class":305},[29,116799,113544],{"class":309},[171,116801,116802,116803,28514],{},"即使暂时没有额外信息，也返回 ",[26,116804,32588],{},[14,116806,116808],{"id":116807},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[171,116810,116811],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[259,116813,116814,116817,116820,116823,116826,116829],{},[178,116815,116816],{},"更稳定的 reward。",[178,116818,116819],{},"合理的 episode 长度。",[178,116821,116822],{},"可重复的随机目标采样。",[178,116824,116825],{},"render 接口。",[178,116827,116828],{},"环境注册代码。",[178,116830,116831],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[171,116833,116834],{},"如果只是自己写训练循环，最小形式是：",[19,116836,116838],{"className":30507,"code":116837,"language":30509,"meta":24,"style":24},"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",[26,116839,116840,116848,116864,116868,116884,116893,116902,116912],{"__ignoreMap":24},[29,116841,116842,116844,116846],{"class":31,"line":32},[29,116843,116473],{"class":309},[29,116845,355],{"class":305},[29,116847,115071],{"class":309},[29,116849,116850,116852,116854,116856,116858,116860,116862],{"class":31,"line":43},[29,116851,113529],{"class":309},[29,116853,355],{"class":305},[29,116855,115081],{"class":309},[29,116857,114695],{"class":5391},[29,116859,355],{"class":305},[29,116861,499],{"class":39},[29,116863,316],{"class":309},[29,116865,116866],{"class":31,"line":51},[29,116867,2575],{"emptyLinePlaceholder":233},[29,116869,116870,116872,116874,116876,116878,116880,116882],{"class":31,"line":59},[29,116871,3200],{"class":305},[29,116873,101630],{"class":309},[29,116875,26172],{"class":305},[29,116877,32572],{"class":39},[29,116879,310],{"class":309},[29,116881,6585],{"class":39},[29,116883,30915],{"class":309},[29,116885,116886,116889,116891],{"class":31,"line":67},[29,116887,116888],{"class":309},"    action ",[29,116890,355],{"class":305},[29,116892,115150],{"class":309},[29,116894,116895,116898,116900],{"class":31,"line":75},[29,116896,116897],{"class":309},"    obs, reward, terminated, truncated, info ",[29,116899,355],{"class":305},[29,116901,113544],{"class":309},[29,116903,116904,116906,116908,116910],{"class":31,"line":83},[29,116905,3276],{"class":305},[29,116907,115216],{"class":309},[29,116909,115219],{"class":305},[29,116911,115222],{"class":309},[29,116913,116914,116917,116919],{"class":31,"line":158},[29,116915,116916],{"class":309},"        obs, info ",[29,116918,355],{"class":305},[29,116920,113534],{"class":309},[14,116922,116924],{"id":116923},"_9本章小结","9.本章小结",[171,116926,116927],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[19,116929,116932],{"className":116930,"code":116931,"language":5362,"meta":24},[5360],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[26,116933,116931],{"__ignoreMap":24},[171,116935,116936],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[223,116938,116939],{},"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":24,"searchDepth":43,"depth":43,"links":116941},[116942,116943,116944,116951,116955,116956,116957,116967,116968],{"id":100775,"depth":43,"text":100776},{"id":100898,"depth":43,"text":100899},{"id":101173,"depth":43,"text":101174,"children":116945},[116946,116948,116950],{"id":113753,"depth":51,"text":116947},"terminated 和 truncated 的区别",{"id":113856,"depth":51,"text":116949},"observation_space 和 action_space",{"id":113983,"depth":51,"text":113984},{"id":101381,"depth":43,"text":101382,"children":116952},[116953,116954],{"id":101701,"depth":51,"text":101701},{"id":101837,"depth":51,"text":101837},{"id":102444,"depth":43,"text":102445},{"id":102476,"depth":43,"text":102477},{"id":102581,"depth":43,"text":102582,"children":116958},[116959,116960,116962,116963,116965,116966],{"id":116608,"depth":51,"text":116609},{"id":116630,"depth":51,"text":116961},"data.ctrl[:] = action 维度错误",{"id":116665,"depth":51,"text":116666},{"id":116689,"depth":51,"text":116964},"observation_space 维度和 obs 不一致",{"id":116739,"depth":51,"text":116740},{"id":116771,"depth":51,"text":116772},{"id":116807,"depth":43,"text":116808},{"id":116923,"depth":43,"text":116924},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113506,"description":24},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116975,"title":116976,"body":116977,"description":117400,"extension":231,"meta":117401,"navigation":233,"path":117402,"seo":117403,"stem":117404,"__hash__":117405},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116978,"toc":117390},[116979,116983,116986,116989,117009,117015,117021,117031,117034,117037,117057,117060,117064,117067,117073,117076,117090,117093,117096,117170,117173,117179,117182,117205,117208,117258,117261,117267,117270,117273,117276,117295,117298,117304,117307,117310,117313,117333,117336,117339,117342,117387],[10,116980,116982],{"id":116981},"mujoco-学习","MuJoCo 学习",[171,116984,116985],{},"初版",[171,116987,116988],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[259,116990,116991,116994,116997,117006],{},[178,116992,116993],{},"MuJoCo 模型文件在描述什么。",[178,116995,116996],{},"Python 代码怎样读取和推进仿真。",[178,116998,116999,520,117001,520,117003,117005],{},[26,117000,104159],{},[26,117002,104489],{},[26,117004,104492],{}," 这些数组为什么重要。",[178,117007,117008],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[171,117010,117011,117012,117014],{},"默认环境为 Fedora 44、Python >= 3.10、",[26,117013,101156],{}," 官方 Python bindings。",[171,117016,117017,117018,117020],{},"注意：本文禁止使用 ",[26,117019,101141],{},"。所有示例均使用：",[19,117022,117023],{"className":30507,"code":101707,"language":30509,"meta":24,"style":24},[26,117024,117025],{"__ignoreMap":24},[29,117026,117027,117029],{"class":31,"line":32},[29,117028,30521],{"class":305},[29,117030,101430],{"class":309},[14,117032,117033],{"id":117033},"适合谁阅读",[171,117035,117036],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[259,117038,117039,117042,117045,117048],{},[178,117040,117041],{},"没学过 MuJoCo，只会一点 Python。",[178,117043,117044],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[178,117046,117047],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[178,117049,117050,117051,117053,117054,117056],{},"以前接触过 ",[26,117052,101141],{},"，现在想迁移到官方 ",[26,117055,101150],{}," Python bindings。",[171,117058,117059],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117061,117063],{"id":117062},"mujoco-到底是什么","MuJoCo 到底是什么",[171,117065,117066],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[19,117068,117071],{"className":117069,"code":117070,"language":5362,"meta":24},[5360],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[26,117072,117070],{"__ignoreMap":24},[171,117074,117075],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[259,117077,117078,117081,117084,117087],{},[178,117079,117080],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[178,117082,117083],{},"快速测试控制算法，不必一开始就上真实机器人。",[178,117085,117086],{},"生成强化学习环境。",[178,117088,117089],{},"采集状态、动作、图像、奖励等训练数据。",[14,117091,117092],{"id":117092},"学习前的心智模型",[171,117094,117095],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[445,117097,117098,117110],{},[448,117099,117100],{},[451,117101,117102,117105,117108],{},[454,117103,117104],{"align":23911},"部分",[454,117106,117107],{"align":23911},"负责什么",[454,117109,21362],{"align":23911},[492,117111,117112,117123,117135,117147,117159],{},[451,117113,117114,117117,117120],{},[497,117115,117116],{"align":23911},"MJCF XML",[497,117118,117119],{"align":23911},"定义世界和机器人结构",[497,117121,117122],{"align":23911},"地面、盒子、关节、电机、摄像头",[451,117124,117125,117129,117132],{},[497,117126,117127],{"align":23911},[26,117128,100838],{},[497,117130,117131],{"align":23911},"编译后的静态模型",[497,117133,117134],{"align":23911},"有几个关节、有几个电机、时间步长是多少",[451,117136,117137,117141,117144],{},[497,117138,117139],{"align":23911},[26,117140,100848],{},[497,117142,117143],{"align":23911},"运行中的动态状态",[497,117145,117146],{"align":23911},"当前时间、位置、速度、电机输入",[451,117148,117149,117153,117156],{},[497,117150,117151],{"align":23911},[26,117152,101344],{},[497,117154,117155],{"align":23911},"推进一步物理仿真",[497,117157,117158],{"align":23911},"根据重力、力、碰撞更新状态",[451,117160,117161,117164,117167],{},[497,117162,117163],{"align":23911},"Viewer \u002F Renderer",[497,117165,117166],{"align":23911},"把仿真显示出来",[497,117168,117169],{"align":23911},"打开窗口或保存图片",[171,117171,117172],{},"一句话总结：",[19,117174,117177],{"className":117175,"code":117176,"language":5362,"meta":24},[5360],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[26,117178,117176],{"__ignoreMap":24},[171,117180,117181],{},"参考来源：",[175,117183,117184,117191,117198],{},[178,117185,117186,117187],{},"MuJoCo Python 官方文档：",[546,117188,117189],{"href":117189,"rel":117190},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24038],[178,117192,117193,117194],{},"MuJoCo XML Reference：",[546,117195,117196],{"href":117196,"rel":117197},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24038],[178,117199,117200,117201],{},"MuJoCo Overview：",[546,117202,117203],{"href":117203,"rel":117204},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24038],[14,117206,117207],{"id":117207},"章节目录",[259,117209,117210,117216,117222,117228,117234,117240,117246,117252],{},[178,117211,117212],{},[546,117213,117215],{"href":117214},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[178,117217,117218],{},[546,117219,117221],{"href":117220},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[178,117223,117224],{},[546,117225,117227],{"href":117226},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[178,117229,117230],{},[546,117231,117233],{"href":117232},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[178,117235,117236],{},[546,117237,117239],{"href":117238},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[178,117241,117242],{},[546,117243,117245],{"href":117244},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[178,117247,117248],{},[546,117249,117251],{"href":117250},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[178,117253,117254],{},[546,117255,117257],{"href":117256},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117259,117260],{"id":117260},"推荐学习路线",[19,117262,117265],{"className":117263,"code":117264,"language":5362,"meta":24},[5360],"环境安装\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",[26,117266,117264],{"__ignoreMap":24},[171,117268,117269],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117271,117272],{"id":117272},"建议的目录结构",[171,117274,117275],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[19,117277,117279],{"className":21,"code":117278,"language":23,"meta":24,"style":24},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[26,117280,117281,117289],{"__ignoreMap":24},[29,117282,117283,117285,117287],{"class":31,"line":32},[29,117284,101395],{"class":35},[29,117286,29345],{"class":39},[29,117288,101400],{"class":103},[29,117290,117291,117293],{"class":31,"line":43},[29,117292,101405],{"class":39},[29,117294,101400],{"class":103},[171,117296,117297],{},"每一章的代码都单独保存：",[19,117299,117302],{"className":117300,"code":117301,"language":5362,"meta":24},[5360],"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",[26,117303,117301],{"__ignoreMap":24},[171,117305,117306],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117308,117309],{"id":117309},"学习方法",[171,117311,117312],{},"每章建议按这个顺序操作：",[259,117314,117315,117318,117321,117324,117327,117330],{},[178,117316,117317],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[178,117319,117320],{},"复制最小可运行代码，保存成指定文件。",[178,117322,117323],{},"运行代码，确认没有报错。",[178,117325,117326],{},"对照“运行结果说明”理解输出。",[178,117328,117329],{},"做“验证步骤”，主动改一两个参数。",[178,117331,117332],{},"遇到报错先看“常见错误与解决方案”。",[171,117334,117335],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117337,117338],{"id":117338},"全局排错顺序",[171,117340,117341],{},"遇到问题时，按下面顺序查：",[259,117343,117344,117350,117356,117361,117364,117367,117374,117384],{},[178,117345,117346,117347],{},"Python 环境是否激活：",[26,117348,117349],{},"which python",[178,117351,117352,117353],{},"MuJoCo 是否能导入：",[26,117354,117355],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[178,117357,117358,117359],{},"是否误装了 ",[26,117360,101141],{},[178,117362,117363],{},"XML 标签是否闭合、属性是否拼写正确",[178,117365,117366],{},"actuator 引用的 joint 名字是否存在",[178,117368,117369,117371,117372],{},[26,117370,101205],{}," 的长度是否等于 ",[26,117373,102287],{},[178,117375,105714,117376,82668,117378,117380,117381],{},[26,117377,104159],{},[26,117379,104489],{}," 后是否调用了 ",[26,117382,117383],{},"mujoco.mj_forward",[178,117385,117386],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[223,117388,117389],{},"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":24,"searchDepth":43,"depth":43,"links":117391},[117392,117393,117394,117395,117396,117397,117398,117399],{"id":117033,"depth":43,"text":117033},{"id":117062,"depth":43,"text":117063},{"id":117092,"depth":43,"text":117092},{"id":117207,"depth":43,"text":117207},{"id":117260,"depth":43,"text":117260},{"id":117272,"depth":43,"text":117272},{"id":117309,"depth":43,"text":117309},{"id":117338,"depth":43,"text":117338},"仿真搭建。",{"category":23553},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116976,"description":117400},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117407,"title":117408,"body":117409,"description":230,"extension":231,"meta":117864,"navigation":233,"path":117865,"seo":117866,"stem":117867,"__hash__":117868},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117410,"toc":117862},[117411,117414,117417,117423,117859],[10,117412,117408],{"id":117413},"_1-最常用的基本操作更新",[171,117415,117416],{},"装linux系统教程：",[171,117418,117419],{},[546,117420,117421],{"href":117421,"rel":117422},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24038],[19,117424,117428],{"className":117425,"code":117426,"language":117427,"meta":24,"style":24},"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",[26,117429,117430,117435,117440,117449,117454,117463,117468,117488,117493,117504,117509,117518,117523,117551,117556,117575,117580,117599,117603,117608,117624,117628,117633,117663,117667,117672,117688,117692,117697,117712,117716,117721,117737,117741,117746,117758,117770,117774,117779,117796,117800,117805,117823,117827,117832,117841,117845,117850],{"__ignoreMap":24},[29,117431,117432],{"class":31,"line":32},[29,117433,117434],{"class":367},"#更新相关的知识\n",[29,117436,117437],{"class":31,"line":43},[29,117438,117439],{"class":367},"# 更新软件包列表（从服务器获取最新软件信息）\n",[29,117441,117442,117444,117447],{"class":31,"line":51},[29,117443,24749],{"class":35},[29,117445,117446],{"class":103}," apt",[29,117448,26371],{"class":103},[29,117450,117451],{"class":31,"line":59},[29,117452,117453],{"class":367},"# 升级所有可更新的软件包（不删除旧包）\n",[29,117455,117456,117458,117460],{"class":31,"line":67},[29,117457,24749],{"class":35},[29,117459,117446],{"class":103},[29,117461,117462],{"class":103}," upgrade\n",[29,117464,117465],{"class":31,"line":75},[29,117466,117467],{"class":367},"#更新和升级软件包\n",[29,117469,117470,117472,117474,117477,117479,117481,117483,117486],{"class":31,"line":83},[29,117471,24749],{"class":35},[29,117473,117446],{"class":103},[29,117475,117476],{"class":103}," update",[29,117478,26319],{"class":309},[29,117480,24749],{"class":35},[29,117482,117446],{"class":103},[29,117484,117485],{"class":103}," upgrade",[29,117487,101110],{"class":39},[29,117489,117490],{"class":31,"line":158},[29,117491,117492],{"class":367},"#列出可更新的软件包及版本信息\n",[29,117494,117495,117498,117501],{"class":31,"line":166},[29,117496,117497],{"class":35},"apt",[29,117499,117500],{"class":103}," list",[29,117502,117503],{"class":39}," --upgradable\n",[29,117505,117506],{"class":31,"line":1505},[29,117507,117508],{"class":367},"#彻底升级（处理依赖关系，可能删除旧包）\n",[29,117510,117511,117513,117515],{"class":31,"line":1788},[29,117512,24749],{"class":35},[29,117514,117446],{"class":103},[29,117516,117517],{"class":103}," full-upgrade\n",[29,117519,117520],{"class":31,"line":1793},[29,117521,117522],{"class":367},"#设置指定版本\n",[29,117524,117525,117527,117529,117531,117533,117536,117538,117540,117542,117544,117547,117549],{"class":31,"line":1799},[29,117526,24749],{"class":35},[29,117528,117446],{"class":103},[29,117530,24007],{"class":103},[29,117532,29031],{"class":305},[29,117534,117535],{"class":103},"package_nam",[29,117537,383],{"class":309},[29,117539,1268],{"class":305},[29,117541,355],{"class":103},[29,117543,1218],{"class":305},[29,117545,117546],{"class":103},"version_numbe",[29,117548,978],{"class":309},[29,117550,51436],{"class":305},[29,117552,117553],{"class":31,"line":1804},[29,117554,117555],{"class":367},"#只安装软件包不升级\n",[29,117557,117558,117560,117562,117564,117566,117568,117570,117572],{"class":31,"line":1818},[29,117559,24749],{"class":35},[29,117561,117446],{"class":103},[29,117563,24007],{"class":103},[29,117565,29031],{"class":305},[29,117567,117535],{"class":103},[29,117569,383],{"class":309},[29,117571,1268],{"class":305},[29,117573,117574],{"class":39}," --no-upgrade\n",[29,117576,117577],{"class":31,"line":1823},[29,117578,117579],{"class":367},"#只升级，不存在就不安装\n",[29,117581,117582,117584,117586,117588,117590,117592,117594,117596],{"class":31,"line":1829},[29,117583,24749],{"class":35},[29,117585,117446],{"class":103},[29,117587,24007],{"class":103},[29,117589,29031],{"class":305},[29,117591,117535],{"class":103},[29,117593,383],{"class":309},[29,117595,1268],{"class":305},[29,117597,117598],{"class":39}," --only-upgrade\n",[29,117600,117601],{"class":31,"line":1850},[29,117602,2575],{"emptyLinePlaceholder":233},[29,117604,117605],{"class":31,"line":1855},[29,117606,117607],{"class":367},"#安装指定的软件命令\n",[29,117609,117610,117612,117614,117616,117618,117620,117622],{"class":31,"line":1869},[29,117611,24749],{"class":35},[29,117613,117446],{"class":103},[29,117615,24007],{"class":103},[29,117617,29031],{"class":305},[29,117619,117535],{"class":103},[29,117621,383],{"class":309},[29,117623,51436],{"class":305},[29,117625,117626],{"class":31,"line":1874},[29,117627,2575],{"emptyLinePlaceholder":233},[29,117629,117630],{"class":31,"line":1903},[29,117631,117632],{"class":367},"#安装多个软件包\n",[29,117634,117635,117637,117639,117641,117643,117646,117649,117651,117653,117656,117658,117660],{"class":31,"line":1908},[29,117636,24749],{"class":35},[29,117638,117446],{"class":103},[29,117640,24007],{"class":103},[29,117642,29031],{"class":305},[29,117644,117645],{"class":103},"package_",[29,117647,117648],{"class":305},"1>",[29,117650,29031],{"class":305},[29,117652,117645],{"class":103},[29,117654,117655],{"class":305},"2>",[29,117657,29031],{"class":305},[29,117659,117645],{"class":103},[29,117661,117662],{"class":305},"3>\n",[29,117664,117665],{"class":31,"line":1925},[29,117666,2575],{"emptyLinePlaceholder":233},[29,117668,117669],{"class":31,"line":1930},[29,117670,117671],{"class":367},"#更新指定的软件命令\n",[29,117673,117674,117676,117678,117680,117682,117684,117686],{"class":31,"line":1935},[29,117675,24749],{"class":35},[29,117677,117446],{"class":103},[29,117679,117476],{"class":103},[29,117681,29031],{"class":305},[29,117683,117535],{"class":103},[29,117685,383],{"class":309},[29,117687,51436],{"class":305},[29,117689,117690],{"class":31,"line":1940},[29,117691,2575],{"emptyLinePlaceholder":233},[29,117693,117694],{"class":31,"line":1954},[29,117695,117696],{"class":367},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[29,117698,117699,117701,117704,117706,117708,117710],{"class":31,"line":1959},[29,117700,117497],{"class":35},[29,117702,117703],{"class":103}," show",[29,117705,29031],{"class":305},[29,117707,117535],{"class":103},[29,117709,383],{"class":309},[29,117711,51436],{"class":305},[29,117713,117714],{"class":31,"line":2752},[29,117715,2575],{"emptyLinePlaceholder":233},[29,117717,117718],{"class":31,"line":2766},[29,117719,117720],{"class":367},"#删除软件包命令\n",[29,117722,117723,117725,117727,117729,117731,117733,117735],{"class":31,"line":2774},[29,117724,24749],{"class":35},[29,117726,117446],{"class":103},[29,117728,26208],{"class":103},[29,117730,29031],{"class":305},[29,117732,117535],{"class":103},[29,117734,383],{"class":309},[29,117736,51436],{"class":305},[29,117738,117739],{"class":31,"line":2779},[29,117740,2575],{"emptyLinePlaceholder":233},[29,117742,117743],{"class":31,"line":2785},[29,117744,117745],{"class":367},"# 清理旧版本和缓存（释放磁盘空间）\n",[29,117747,117748,117750,117752,117755],{"class":31,"line":2791},[29,117749,24749],{"class":35},[29,117751,117446],{"class":103},[29,117753,117754],{"class":103}," autoremove",[29,117756,117757],{"class":367},"  # 删除不再需要的依赖和库文件\n",[29,117759,117760,117762,117764,117767],{"class":31,"line":2796},[29,117761,24749],{"class":35},[29,117763,117446],{"class":103},[29,117765,117766],{"class":103}," clean",[29,117768,117769],{"class":367},"       # 清理下载的缓存包\n",[29,117771,117772],{"class":31,"line":8123},[29,117773,2575],{"emptyLinePlaceholder":233},[29,117775,117776],{"class":31,"line":8147},[29,117777,117778],{"class":367},"#移除软件包及配置文件\n",[29,117780,117781,117783,117785,117788,117790,117792,117794],{"class":31,"line":8152},[29,117782,24749],{"class":35},[29,117784,117446],{"class":103},[29,117786,117787],{"class":103}," purge",[29,117789,29031],{"class":305},[29,117791,117535],{"class":103},[29,117793,383],{"class":309},[29,117795,51436],{"class":305},[29,117797,117798],{"class":31,"line":8158},[29,117799,2575],{"emptyLinePlaceholder":233},[29,117801,117802],{"class":31,"line":8185},[29,117803,117804],{"class":367},"#查找软件包命令\n",[29,117806,117807,117809,117811,117814,117816,117819,117821],{"class":31,"line":8190},[29,117808,24749],{"class":35},[29,117810,117446],{"class":103},[29,117812,117813],{"class":103}," search",[29,117815,29031],{"class":305},[29,117817,117818],{"class":103},"keywor",[29,117820,622],{"class":309},[29,117822,51436],{"class":305},[29,117824,117825],{"class":31,"line":8196},[29,117826,2575],{"emptyLinePlaceholder":233},[29,117828,117829],{"class":31,"line":8208},[29,117830,117831],{"class":367},"#列出所有已安装的包\n",[29,117833,117834,117836,117838],{"class":31,"line":8220},[29,117835,117497],{"class":35},[29,117837,117500],{"class":103},[29,117839,117840],{"class":39}," --installed\n",[29,117842,117843],{"class":31,"line":8232},[29,117844,2575],{"emptyLinePlaceholder":233},[29,117846,117847],{"class":31,"line":9891},[29,117848,117849],{"class":367},"#列出所有已安装的包的版本信息\n",[29,117851,117852,117854,117856],{"class":31,"line":9916},[29,117853,117497],{"class":35},[29,117855,117500],{"class":103},[29,117857,117858],{"class":39}," --all-versions\n",[223,117860,117861],{},"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":24,"searchDepth":43,"depth":43,"links":117863},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117408,"description":230},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117870,"title":117871,"body":117872,"description":230,"extension":231,"meta":118613,"navigation":233,"path":118614,"seo":118615,"stem":118616,"__hash__":118617},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117873,"toc":118600},[117874,117877,117881,117884,117890,117894,117898,117904,117909,117914,117919,117924,117929,117932,117935,117938,117941,117945,117948,117953,117956,117961,117964,117969,117976,117979,117982,117985,117988,117991,118002,118006,118010,118015,118020,118024,118029,118033,118038,118042,118046,118051,118054,118099,118104,118108,118112,118117,118123,118128,118138,118143,118153,118158,118163,118190,118194,118197,118202,118205,118230,118234,118239,118242,118247,118252,118272,118277,118280,118295,118299,118352,118355,118360,118364,118367,118382,118385,118388,118393,118397,118401,118404,118408,118412,118415,118420,118425,118429,118436,118444,118447,118454,118459,118464,118467,118472,118479,118484,118491,118495,118497,118502,118506,118509,118512,118517,118520,118525,118528,118533,118538,118543,118547,118552,118556,118597],[10,117875,117871],{"id":117876},"_2-linux装机教程",[14,117878,117880],{"id":117879},"_21-实体机","2.1 实体机",[171,117882,117883],{},"使用清华源：（Ubuntu24.04）",[171,117885,117886],{},[546,117887,117888],{"href":117888,"rel":117889},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24038],[14,117891,117893],{"id":117892},"_22-普通虚拟机","2.2 普通虚拟机",[275,117895,117897],{"id":117896},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[171,117899,117900],{},[546,117901,117902],{"href":117902,"rel":117903},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24038],[171,117905,117906],{},[1638,117907],{"alt":24,"src":117908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[171,117910,117911],{},[1638,117912],{"alt":24,"src":117913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[171,117915,117916],{},[1638,117917],{"alt":24,"src":117918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[171,117920,117921],{},[1638,117922],{"alt":24,"src":117923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[171,117925,117926],{},[1638,117927],{"alt":24,"src":117928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[171,117930,117931],{},"内存4G（4096MB）；",[171,117933,117934],{},"CPU给4个核；",[171,117936,117937],{},"硬盘动态分配60G；",[171,117939,117940],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[275,117942,117944],{"id":117943},"_222-安装ubuntu","2.2.2 安装Ubuntu",[171,117946,117947],{},"按照1.1的步骤下载Ubuntu",[171,117949,117950],{},[1638,117951],{"alt":24,"src":117952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[171,117954,117955],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[171,117957,117958],{},[1638,117959],{"alt":24,"src":117960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[171,117962,117963],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[171,117965,117966],{},[1638,117967],{"alt":24,"src":117968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[171,117970,117971,117972,117975],{},"选择“正常安装”(找不到都用Alt+F7)， ",[457,117973,117974],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[171,117977,117978],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[171,117980,117981],{},"将改动写入磁盘吗 继续",[171,117983,117984],{},"选择东八区（shanghai，大致在地图上点一下），继续",[171,117986,117987],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[171,117989,117990],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[171,117992,117993,117994,117997,117998,118001],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[457,117995,117996],{},"除了"," 选不发送系统信息与不升级之外， ",[457,117999,118000],{},"其它"," 都跳过或前进）",[275,118003,118005],{"id":118004},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22173,118007,118009],{"id":118008},"_2231-全屏","2.2.3.1 全屏",[171,118011,118012],{},[1638,118013],{"alt":24,"src":118014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[171,118016,118017],{},[1638,118018],{"alt":24,"src":118019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22173,118021,118023],{"id":118022},"_2232-文件交换","2.2.3.2 文件交换",[171,118025,118026],{},[1638,118027],{"alt":24,"src":118028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22173,118030,118032],{"id":118031},"_2233-新建文本文档","2.2.3.3 新建文本文档",[171,118034,118035],{},[1638,118036],{"alt":24,"src":118037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118039,118041],{"id":118040},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[275,118043,118045],{"id":118044},"_231-简介与优缺点","2.3.1 简介与优缺点",[259,118047,118048],{},[178,118049,118050],{},"什么情况下推荐？",[171,118052,118053],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[259,118055,118056],{"start":43},[178,118057,118058,118059],{},"优缺点：",[259,118060,118061,118091],{},[178,118062,118063,118064],{},"优点：",[259,118065,118066,118069,118076,118079,118082,118085,118088],{},[178,118067,118068],{},"WSL2是最好的Linux发行版;(bushi)",[178,118070,118071,118072,118075],{},"性能损耗极低。且比在Windows上跑深度性能 ",[457,118073,118074],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[178,118077,118078],{},"非常方便调用USB设备，可以USB直通;",[178,118080,118081],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[178,118083,118084],{},"非常方便Win与WSL2互相传文件等协同操作;",[178,118086,118087],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[178,118089,118090],{},"非常方便使用Windows的VScode远程开发;",[178,118092,118093,118094],{},"缺点：",[259,118095,118096],{},[178,118097,118098],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[171,118100,118101],{},[1638,118102],{"alt":24,"src":118103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[275,118105,118107],{"id":118106},"_232-安装教程","2.3.2 安装教程",[22173,118109,118111],{"id":118110},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[259,118113,118114],{},[178,118115,118116],{},"方法一(图形界面)",[171,118118,118119,118120,24791],{},"用Win+R输入",[26,118121,118122],{},"appwiz.cpl",[171,118124,118125],{},[1638,118126],{"alt":24,"src":118127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[171,118129,118130,118131,118134,118135,26602],{},"点击OK进入 ",[457,118132,118133],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[457,118136,118137],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[171,118139,118140],{},[1638,118141],{"alt":24,"src":118142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[171,118144,118145,118146,101147,118149,118152],{},"选择 ",[457,118147,118148],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[457,118150,118151],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[171,118154,118155],{},[1638,118156],{"alt":24,"src":118157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[259,118159,118160],{"start":43},[178,118161,118162],{},"方法二(命令行)",[19,118164,118168],{"className":118165,"code":118166,"language":118167,"meta":24,"style":24},"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",[26,118169,118170,118175,118180,118185],{"__ignoreMap":24},[29,118171,118172],{"class":31,"line":32},[29,118173,118174],{},"# 开启 Linux 子系统\n",[29,118176,118177],{"class":31,"line":43},[29,118178,118179],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[29,118181,118182],{"class":31,"line":51},[29,118183,118184],{},"# 开启虚拟机平台\n",[29,118186,118187],{"class":31,"line":59},[29,118188,118189],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22173,118191,118193],{"id":118192},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[171,118195,118196],{},"用管理员权限打开powershell",[171,118198,118199],{},[1638,118200],{"alt":24,"src":118201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[171,118203,118204],{},"升级WSL并设置默认版本为WSL2",[19,118206,118208],{"className":118165,"code":118207,"language":118167,"meta":24,"style":24},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[26,118209,118210,118215,118220,118225],{"__ignoreMap":24},[29,118211,118212],{"class":31,"line":32},[29,118213,118214],{},"# 更新 wsl\n",[29,118216,118217],{"class":31,"line":43},[29,118218,118219],{},"wsl --update\n",[29,118221,118222],{"class":31,"line":51},[29,118223,118224],{},"# 将 wsl 版本设置为 wsl2\n",[29,118226,118227],{"class":31,"line":59},[29,118228,118229],{},"wsl --set-default-version 2\n",[22173,118231,118233],{"id":118232},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[259,118235,118236],{},[178,118237,118238],{},"方式一(商店下载)",[171,118240,118241],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[171,118243,118244],{},[1638,118245],{"alt":24,"src":118246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[259,118248,118249],{"start":43},[178,118250,118251],{},"方式二(命令行安装)",[19,118253,118255],{"className":118165,"code":118254,"language":118167,"meta":24,"style":24},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[26,118256,118257,118262,118267],{"__ignoreMap":24},[29,118258,118259],{"class":31,"line":32},[29,118260,118261],{},"# 列出可安装的 Linux 版本\n",[29,118263,118264],{"class":31,"line":43},[29,118265,118266],{},"#（需要科学手段）\n",[29,118268,118269],{"class":31,"line":51},[29,118270,118271],{},"wsl --list --online\n",[171,118273,118274],{},[1638,118275],{"alt":24,"src":118276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[171,118278,118279],{},"选择对应发行版并安装",[19,118281,118283],{"className":118165,"code":118282,"language":118167,"meta":24,"style":24},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[26,118284,118285,118290],{"__ignoreMap":24},[29,118286,118287],{"class":31,"line":32},[29,118288,118289],{},"# Ubuntu安装完毕后需要重启系统\n",[29,118291,118292],{"class":31,"line":43},[29,118293,118294],{},"wsl --install -d Ubuntu-24.04\n",[22173,118296,118298],{"id":118297},"_2324-查看系统状态","2.3.2.4 查看系统状态",[19,118300,118302],{"className":118165,"code":118301,"language":118167,"meta":24,"style":24},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[26,118303,118304,118309,118314,118319,118324,118328,118332,118337,118342,118347],{"__ignoreMap":24},[29,118305,118306],{"class":31,"line":32},[29,118307,118308],{},"# 查看 wsl\n",[29,118310,118311],{"class":31,"line":43},[29,118312,118313],{},"wsl -l\n",[29,118315,118316],{"class":31,"line":51},[29,118317,118318],{},"# 查看 wsl 运行版本或模式\n",[29,118320,118321],{"class":31,"line":59},[29,118322,118323],{},"wsl -l -v\n",[29,118325,118326],{"class":31,"line":67},[29,118327,2575],{"emptyLinePlaceholder":233},[29,118329,118330],{"class":31,"line":75},[29,118331,2575],{"emptyLinePlaceholder":233},[29,118333,118334],{"class":31,"line":83},[29,118335,118336],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[29,118338,118339],{"class":31,"line":158},[29,118340,118341],{},"wsl --set-version \u003Cdistro> 2\n",[29,118343,118344],{"class":31,"line":166},[29,118345,118346],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[29,118348,118349],{"class":31,"line":1505},[29,118350,118351],{},"wsl --unregister \u003Cdistro>\n",[171,118353,118354],{},"输出Version为2即正常",[171,118356,118357],{},[1638,118358],{"alt":24,"src":118359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22173,118361,118363],{"id":118362},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[171,118365,118366],{},"直接在Powershell里输入wsl命令进入子系统",[19,118368,118370],{"className":118165,"code":118369,"language":118167,"meta":24,"style":24},"# 进入子系统\nwsl\n",[26,118371,118372,118377],{"__ignoreMap":24},[29,118373,118374],{"class":31,"line":32},[29,118375,118376],{},"# 进入子系统\n",[29,118378,118379],{"class":31,"line":43},[29,118380,118381],{},"wsl\n",[171,118383,118384],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[171,118386,118387],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[171,118389,118390],{},[1638,118391],{"alt":24,"src":118392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[275,118394,118396],{"id":118395},"_233-配置各种环境","2.3.3 配置各种环境",[22173,118398,118400],{"id":118399},"_2331-换源","2.3.3.1 换源",[171,118402,118403],{},"(同实体机LINUX，往下找教程)",[22173,118405,118407],{"id":118406},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23085,118409,118411],{"id":118410},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[171,118413,118414],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[171,118416,118417],{},[1638,118418],{"alt":24,"src":118419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[171,118421,118422],{},[1638,118423],{"alt":24,"src":118424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23085,118426,118428],{"id":118427},"_23322-cuda","2.3.3.2.2 CUDA",[171,118430,118431,118432],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[546,118433,118434],{"href":118434,"rel":118435},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24038],[171,118437,118438,118441],{},[1638,118439],{"alt":24,"src":118440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1638,118442],{"alt":24,"src":118443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[171,118445,118446],{},"在下方的网站，选择合适的版本。",[171,118448,118449,118450],{},"WSL2 专属 CUDA 指南：",[546,118451,118452],{"href":118452,"rel":118453},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24038],[171,118455,118456],{},[457,118457,118458],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[171,118460,118461],{},[1638,118462],{"alt":24,"src":118463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[171,118465,118466],{},"挨行敲一遍",[171,118468,118469],{},[1638,118470],{"alt":24,"src":118471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[171,118473,118474,118475,118478],{},"敲完后，输入",[26,118476,118477],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[171,118480,118481],{},[1638,118482],{"alt":24,"src":118483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[171,118485,118486,118487,118490],{},"（请详看下方教程的",[457,118488,118489],{},"安装CUDA的配置环境来看","如何配置环境）",[23085,118492,118494],{"id":118493},"_23323-cudnn","2.3.3.2.3 cuDNN",[171,118496,118403],{},[171,118498,118499],{},[1638,118500],{"alt":24,"src":118501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22173,118503,118505],{"id":118504},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[171,118507,118508],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[171,118510,118511],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[171,118513,118514],{},[1638,118515],{"alt":24,"src":118516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[171,118518,118519],{},"连接WSL2",[171,118521,118522],{},[1638,118523],{"alt":24,"src":118524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[171,118526,118527],{},"远程开发成功。",[171,118529,118530],{},[1638,118531],{"alt":24,"src":118532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[171,118534,118535],{},[1638,118536],{"alt":24,"src":118537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[171,118539,118540],{},[1638,118541],{"alt":24,"src":118542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22173,118544,118546],{"id":118545},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[171,118548,118549],{},[1638,118550],{"alt":24,"src":118551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22173,118553,118555],{"id":118554},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[19,118557,118559],{"className":117425,"code":118558,"language":117427,"meta":24,"style":24},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[26,118560,118561,118569,118577,118588,118592],{"__ignoreMap":24},[29,118562,118563,118565,118567],{"class":31,"line":32},[29,118564,24749],{"class":35},[29,118566,117446],{"class":103},[29,118568,26371],{"class":103},[29,118570,118571,118573,118575],{"class":31,"line":43},[29,118572,24749],{"class":35},[29,118574,117446],{"class":103},[29,118576,117462],{"class":103},[29,118578,118579,118581,118583,118585],{"class":31,"line":51},[29,118580,24749],{"class":35},[29,118582,117446],{"class":103},[29,118584,24007],{"class":103},[29,118586,118587],{"class":103}," mesa-utils\n",[29,118589,118590],{"class":31,"line":59},[29,118591,2575],{"emptyLinePlaceholder":233},[29,118593,118594],{"class":31,"line":67},[29,118595,118596],{"class":367},"#然后重启wsl2即可\n",[223,118598,118599],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":24,"searchDepth":43,"depth":43,"links":118601},[118602,118603,118608],{"id":117879,"depth":43,"text":117880},{"id":117892,"depth":43,"text":117893,"children":118604},[118605,118606,118607],{"id":117896,"depth":51,"text":117897},{"id":117943,"depth":51,"text":117944},{"id":118004,"depth":51,"text":118005},{"id":118040,"depth":43,"text":118041,"children":118609},[118610,118611,118612],{"id":118044,"depth":51,"text":118045},{"id":118106,"depth":51,"text":118107},{"id":118395,"depth":51,"text":118396},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117871,"description":230},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118619,"title":118620,"body":118621,"description":230,"extension":231,"meta":121557,"navigation":233,"path":121558,"seo":121559,"stem":121560,"__hash__":121561},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118622,"toc":121529},[118623,118626,118630,118636,118640,118646,118650,118838,118841,118846,118850,118854,118857,118860,118866,118871,118874,118877,118882,118915,118920,118924,119001,119004,119009,119013,119016,119055,119058,119067,119085,119090,119097,119214,119219,119222,119249,119254,119258,119267,119317,119324,119328,119331,119345,119352,119386,119391,119395,119418,119421,119426,119430,119433,119436,119439,119481,119485,119488,119491,119532,119536,119540,119543,119548,119553,119556,119579,119582,119590,119595,119598,119603,119608,119611,119616,119620,119625,119648,119653,119715,119723,119728,119733,119736,119741,119744,119749,119754,119772,119777,119783,119788,119802,119806,119809,119812,119815,119858,119861,119866,119967,119970,119975,119979,119983,120020,120024,120028,120032,120078,120082,120127,120131,120138,120146,120201,120204,120281,120284,120307,120311,120314,120319,120324,120332,120335,120340,120345,120350,120353,120358,120367,120370,120375,120378,120449,120454,120457,120462,120465,120470,120473,120478,120481,120486,120491,120494,120569,120572,120585,120590,120593,120607,120610,120639,120644,120673,120676,120681,120685,120690,120699,120702,120707,120710,120715,120718,120721,120726,120729,120734,120739,120742,120747,120750,120875,120880,120910,120913,120918,120923,120940,120943,120986,120989,121016,121021,121034,121177,121181,121186,121200,121203,121254,121257,121287,121290,121306,121311,121325,121328,121395,121400,121409,121414,121417,121429,121434,121441,121465,121468,121473,121476,121495,121500,121507,121519,121526],[10,118624,118620],{"id":118625},"_3-安装必备配置",[14,118627,118629],{"id":118628},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[19,118631,118634],{"className":118632,"code":118633,"language":5362},[5360],"  打开下方网站（注意，该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",[26,118635,118633],{"__ignoreMap":24},[275,118637,118639],{"id":118638},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[19,118641,118644],{"className":118642,"code":118643,"language":5362},[5360],"  输入以下命令\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",[26,118645,118643],{"__ignoreMap":24},[275,118647,118649],{"id":118648},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[19,118651,118655],{"className":118652,"code":118653,"language":118654,"meta":24,"style":24},"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",[26,118656,118657,118665,118676,118688,118702,118706,118716,118721,118725,118729,118734,118738,118750,118754,118759,118763,118774,118778,118794,118798,118809,118813,118818,118822,118830],{"__ignoreMap":24},[29,118658,118659,118661,118663],{"class":31,"line":32},[29,118660,24749],{"class":35},[29,118662,117446],{"class":103},[29,118664,26371],{"class":103},[29,118666,118667,118669,118671,118673],{"class":31,"line":43},[29,118668,24749],{"class":35},[29,118670,117446],{"class":103},[29,118672,24007],{"class":103},[29,118674,118675],{"class":103}," vim\n",[29,118677,118678,118680,118683,118685],{"class":31,"line":51},[29,118679,24749],{"class":35},[29,118681,118682],{"class":103}," rm",[29,118684,25454],{"class":39},[29,118686,118687],{"class":103}," \u002Fetc\u002Fapt\u002Fsources.list\n",[29,118689,118690,118692,118694,118696,118699],{"class":31,"line":59},[29,118691,24749],{"class":35},[29,118693,118682],{"class":103},[29,118695,25454],{"class":39},[29,118697,118698],{"class":103}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[29,118700,118701],{"class":39},"**\n",[29,118703,118704],{"class":31,"line":67},[29,118705,2575],{"emptyLinePlaceholder":233},[29,118707,118708,118710,118713],{"class":31,"line":75},[29,118709,24749],{"class":35},[29,118711,118712],{"class":103}," vim",[29,118714,118715],{"class":103}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[29,118717,118718],{"class":31,"line":83},[29,118719,118720],{"class":103},"```\n",[29,118722,118723],{"class":31,"line":158},[29,118724,2575],{"emptyLinePlaceholder":233},[29,118726,118727],{"class":31,"line":166},[29,118728,2575],{"emptyLinePlaceholder":233},[29,118730,118731],{"class":31,"line":1505},[29,118732,118733],{"class":35},"选择好Ubuntu版本后，复制下方的内容。\n",[29,118735,118736],{"class":31,"line":1788},[29,118737,2575],{"emptyLinePlaceholder":233},[29,118739,118740,118742,118745,118748],{"class":31,"line":1793},[29,118741,534],{"class":305},[29,118743,118744],{"class":103},"[](",[29,118746,118747],{"class":35},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[29,118749,316],{"class":103},[29,118751,118752],{"class":31,"line":1799},[29,118753,2575],{"emptyLinePlaceholder":233},[29,118755,118756],{"class":31,"line":1804},[29,118757,118758],{"class":35},"粘贴进去\n",[29,118760,118761],{"class":31,"line":1818},[29,118762,2575],{"emptyLinePlaceholder":233},[29,118764,118765,118767,118769,118772],{"class":31,"line":1823},[29,118766,534],{"class":305},[29,118768,118744],{"class":103},[29,118770,118771],{"class":35},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[29,118773,316],{"class":103},[29,118775,118776],{"class":31,"line":1829},[29,118777,2575],{"emptyLinePlaceholder":233},[29,118779,118780,118783,118786,118789,118791],{"class":31,"line":1850},[29,118781,118782],{"class":35},"按一下ESC，然后英文冒号，输入",[29,118784,118785],{"class":103}," `",[29,118787,118788],{"class":35},":wq!",[29,118790,1280],{"class":103},[29,118792,118793],{"class":35},"然后回车\n",[29,118795,118796],{"class":31,"line":1855},[29,118797,2575],{"emptyLinePlaceholder":233},[29,118799,118800,118802,118804,118807],{"class":31,"line":1869},[29,118801,534],{"class":305},[29,118803,118744],{"class":103},[29,118805,118806],{"class":35},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[29,118808,316],{"class":103},[29,118810,118811],{"class":31,"line":1874},[29,118812,2575],{"emptyLinePlaceholder":233},[29,118814,118815],{"class":31,"line":1903},[29,118816,118817],{"class":35},"输入以下命令\n",[29,118819,118820],{"class":31,"line":1908},[29,118821,2575],{"emptyLinePlaceholder":233},[29,118823,118824,118827],{"class":31,"line":1925},[29,118825,118826],{"class":103},"```",[29,118828,118829],{"class":35},"Bash\n",[29,118831,118832,118834,118836],{"class":31,"line":1930},[29,118833,24749],{"class":35},[29,118835,117446],{"class":103},[29,118837,26371],{"class":103},[171,118839,118840],{},"这里被替换成对应学校则成功",[171,118842,118843],{},[1638,118844],{"alt":24,"src":118845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118847,118849],{"id":118848},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[275,118851,118853],{"id":118852},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[171,118855,118856],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[171,118858,118859],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[171,118861,118862],{},[546,118863,118864],{"href":118864,"rel":118865},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24038],[171,118867,118868],{},[1638,118869],{"alt":24,"src":118870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[171,118872,118873],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[171,118875,118876],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[171,118878,118879],{},[1638,118880],{"alt":24,"src":118881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[19,118883,118885],{"className":117425,"code":118884,"language":117427,"meta":24,"style":24},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[26,118886,118887,118892,118899,118904],{"__ignoreMap":24},[29,118888,118889],{"class":31,"line":32},[29,118890,118891],{"class":367},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[29,118893,118894,118896],{"class":31,"line":43},[29,118895,101405],{"class":39},[29,118897,118898],{"class":103}," ~\u002FDownloads\n",[29,118900,118901],{"class":31,"line":51},[29,118902,118903],{"class":367},"#下方chrome安装包名不一定是这个，根据名字来看\n",[29,118905,118906,118908,118910,118912],{"class":31,"line":59},[29,118907,24749],{"class":35},[29,118909,117446],{"class":103},[29,118911,24007],{"class":103},[29,118913,118914],{"class":103}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[171,118916,118917],{},[1638,118918],{"alt":24,"src":118919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[275,118921,118923],{"id":118922},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[19,118925,118927],{"className":117425,"code":118926,"language":117427,"meta":24,"style":24},"# 老版\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",[26,118928,118929,118934,118942,118953,118958,118962,118967,118977,118985,118996],{"__ignoreMap":24},[29,118930,118931],{"class":31,"line":32},[29,118932,118933],{"class":367},"# 老版\n",[29,118935,118936,118938,118940],{"class":31,"line":43},[29,118937,24749],{"class":35},[29,118939,117446],{"class":103},[29,118941,26371],{"class":103},[29,118943,118944,118946,118948,118950],{"class":31,"line":51},[29,118945,24749],{"class":35},[29,118947,117446],{"class":103},[29,118949,24007],{"class":103},[29,118951,118952],{"class":103}," neofetch\n",[29,118954,118955],{"class":31,"line":59},[29,118956,118957],{"class":35},"neofetch\n",[29,118959,118960],{"class":31,"line":67},[29,118961,2575],{"emptyLinePlaceholder":233},[29,118963,118964],{"class":31,"line":75},[29,118965,118966],{"class":367},"# 新版\n",[29,118968,118969,118971,118974],{"class":31,"line":83},[29,118970,24749],{"class":35},[29,118972,118973],{"class":103}," add-apt-repository",[29,118975,118976],{"class":103}," ppa:zhangsongcui3371\u002Ffastfetch\n",[29,118978,118979,118981,118983],{"class":31,"line":158},[29,118980,24749],{"class":35},[29,118982,117446],{"class":103},[29,118984,26371],{"class":103},[29,118986,118987,118989,118991,118993],{"class":31,"line":166},[29,118988,24749],{"class":35},[29,118990,117446],{"class":103},[29,118992,24007],{"class":103},[29,118994,118995],{"class":103}," fastfetch\n",[29,118997,118998],{"class":31,"line":1505},[29,118999,119000],{"class":35},"fastfetch\n",[171,119002,119003],{},"这里显示，一共有3162个debian的程序，7个snap程序",[171,119005,119006],{},[1638,119007],{"alt":24,"src":119008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[275,119010,119012],{"id":119011},"_323-移除snap应用","3.2.3 移除snap应用",[171,119014,119015],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[19,119017,119019],{"className":117425,"code":119018,"language":117427,"meta":24,"style":24},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[26,119020,119021,119033,119044],{"__ignoreMap":24},[29,119022,119023,119025,119027,119030],{"class":31,"line":32},[29,119024,24749],{"class":35},[29,119026,26642],{"class":103},[29,119028,119029],{"class":103}," disable",[29,119031,119032],{"class":103}," snapd.service\n",[29,119034,119035,119037,119039,119041],{"class":31,"line":43},[29,119036,24749],{"class":35},[29,119038,26642],{"class":103},[29,119040,119029],{"class":103},[29,119042,119043],{"class":103}," snapd.socket\n",[29,119045,119046,119048,119050,119052],{"class":31,"line":51},[29,119047,24749],{"class":35},[29,119049,26642],{"class":103},[29,119051,119029],{"class":103},[29,119053,119054],{"class":103}," snapd.seeded.service\n",[171,119056,119057],{},"然后查看snap应用列表",[171,119059,119060,119061,119066],{},"根据你安装的选择不同（最小安装或普通安装），有",[546,119062,119065],{"href":119063,"rel":119064},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24038],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[19,119068,119070],{"className":117425,"code":119069,"language":117427,"meta":24,"style":24},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[26,119071,119072,119077],{"__ignoreMap":24},[29,119073,119074],{"class":31,"line":32},[29,119075,119076],{"class":367},"# 查询当前系统上snap安装了哪些app\n",[29,119078,119079,119082],{"class":31,"line":43},[29,119080,119081],{"class":35},"snap",[29,119083,119084],{"class":103}," list\n",[171,119086,119087],{},[1638,119088],{"alt":24,"src":119089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[171,119091,119092,119093,119096],{},"卸载掉图中所有应用，按照 ",[457,119094,119095],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[19,119098,119100],{"className":117425,"code":119099,"language":117427,"meta":24,"style":24},"#移除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",[26,119101,119102,119107,119119,119124,119135,119140,119151,119156,119167,119172,119176,119181,119192,119203],{"__ignoreMap":24},[29,119103,119104],{"class":31,"line":32},[29,119105,119106],{"class":367},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[29,119108,119109,119111,119114,119116],{"class":31,"line":43},[29,119110,24749],{"class":35},[29,119112,119113],{"class":103}," snap",[29,119115,26208],{"class":103},[29,119117,119118],{"class":103}," snap-store\n",[29,119120,119121],{"class":31,"line":51},[29,119122,119123],{"class":367},"#移除firefox浏览器\n",[29,119125,119126,119128,119130,119132],{"class":31,"line":59},[29,119127,24749],{"class":35},[29,119129,119113],{"class":103},[29,119131,26208],{"class":103},[29,119133,119134],{"class":103}," firefox\n",[29,119136,119137],{"class":31,"line":67},[29,119138,119139],{"class":367},"#移除gnome-42-2204\n",[29,119141,119142,119144,119146,119148],{"class":31,"line":75},[29,119143,24749],{"class":35},[29,119145,119113],{"class":103},[29,119147,26208],{"class":103},[29,119149,119150],{"class":103}," gnome-42-2204\n",[29,119152,119153],{"class":31,"line":83},[29,119154,119155],{"class":367},"#移除gtk-common-themes\n",[29,119157,119158,119160,119162,119164],{"class":31,"line":158},[29,119159,24749],{"class":35},[29,119161,119113],{"class":103},[29,119163,26208],{"class":103},[29,119165,119166],{"class":103}," gtk-common-themes\n",[29,119168,119169],{"class":31,"line":166},[29,119170,119171],{"class":367},"#移除其它...\n",[29,119173,119174],{"class":31,"line":1505},[29,119175,2849],{"class":309},[29,119177,119178],{"class":31,"line":1788},[29,119179,119180],{"class":367},"#移除core22,bare以及snapd\n",[29,119182,119183,119185,119187,119189],{"class":31,"line":1793},[29,119184,24749],{"class":35},[29,119186,119113],{"class":103},[29,119188,26208],{"class":103},[29,119190,119191],{"class":103}," core22\n",[29,119193,119194,119196,119198,119200],{"class":31,"line":1799},[29,119195,24749],{"class":35},[29,119197,119113],{"class":103},[29,119199,26208],{"class":103},[29,119201,119202],{"class":103}," bare\n",[29,119204,119205,119207,119209,119211],{"class":31,"line":1804},[29,119206,24749],{"class":35},[29,119208,119113],{"class":103},[29,119210,26208],{"class":103},[29,119212,119213],{"class":103}," snapd\n",[171,119215,119216],{},[1638,119217],{"alt":24,"src":119218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[171,119220,119221],{},"输入以下命令查看是否还有snap包",[19,119223,119225],{"className":117425,"code":119224,"language":117427,"meta":24,"style":24},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[26,119226,119227,119233,119237,119241,119245],{"__ignoreMap":24},[29,119228,119229,119231],{"class":31,"line":32},[29,119230,119081],{"class":35},[29,119232,119084],{"class":103},[29,119234,119235],{"class":31,"line":43},[29,119236,118933],{"class":367},[29,119238,119239],{"class":31,"line":51},[29,119240,118957],{"class":35},[29,119242,119243],{"class":31,"line":59},[29,119244,118966],{"class":367},[29,119246,119247],{"class":31,"line":67},[29,119248,119000],{"class":35},[171,119250,119251],{},[1638,119252],{"alt":24,"src":119253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[275,119255,119257],{"id":119256},"_324-移除snap","3.2.4 移除snap",[171,119259,119260,119261,119266],{},"在删除掉",[546,119262,119265],{"href":119263,"rel":119264},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24038],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[19,119268,119270],{"className":117425,"code":119269,"language":117427,"meta":24,"style":24}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[26,119271,119272,119277,119290,119295,119306],{"__ignoreMap":24},[29,119273,119274],{"class":31,"line":32},[29,119275,119276],{"class":367}," #使用apt移除掉snap\n",[29,119278,119279,119281,119283,119285,119288],{"class":31,"line":43},[29,119280,24749],{"class":35},[29,119282,117446],{"class":103},[29,119284,117754],{"class":103},[29,119286,119287],{"class":39}," --purge",[29,119289,119213],{"class":103},[29,119291,119292],{"class":31,"line":51},[29,119293,119294],{"class":367},"#移除snapd的一些目录\n",[29,119296,119297,119299,119301,119303],{"class":31,"line":59},[29,119298,24749],{"class":35},[29,119300,118682],{"class":103},[29,119302,25454],{"class":39},[29,119304,119305],{"class":103}," \u002Fvar\u002Fcache\u002Fsnapd\n",[29,119307,119308,119310,119312,119314],{"class":31,"line":67},[29,119309,24749],{"class":35},[29,119311,118682],{"class":103},[29,119313,25454],{"class":39},[29,119315,119316],{"class":103}," ~\u002Fsnap\n",[171,119318,119319,119320,119323],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[26,119321,119322],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[275,119325,119327],{"id":119326},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[171,119329,119330],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[19,119332,119334],{"className":117425,"code":119333,"language":117427,"meta":24,"style":24},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[26,119335,119336],{"__ignoreMap":24},[29,119337,119338,119340,119342],{"class":31,"line":32},[29,119339,24749],{"class":35},[29,119341,118712],{"class":103},[29,119343,119344],{"class":103}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[171,119346,119347,119348,119351],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[26,119349,119350],{},":wq"," 回车",[19,119353,119355],{"className":117425,"code":119354,"language":117427,"meta":24,"style":24},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[26,119356,119357,119364,119378],{"__ignoreMap":24},[29,119358,119359,119362],{"class":31,"line":32},[29,119360,119361],{"class":35},"Package:",[29,119363,119213],{"class":103},[29,119365,119366,119369,119372,119375],{"class":31,"line":43},[29,119367,119368],{"class":35},"Pin:",[29,119370,119371],{"class":103}," release",[29,119373,119374],{"class":103}," a=",[29,119376,119377],{"class":39},"*\n",[29,119379,119380,119383],{"class":31,"line":51},[29,119381,119382],{"class":35},"Pin-Priority:",[29,119384,119385],{"class":39}," -10\n",[171,119387,119388],{},[1638,119389],{"alt":24,"src":119390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[275,119392,119394],{"id":119393},"_326-测试是否成功","3.2.6 测试是否成功",[19,119396,119398],{"className":117425,"code":119397,"language":117427,"meta":24,"style":24},"sudo apt update\nsudo apt install firefox\n",[26,119399,119400,119408],{"__ignoreMap":24},[29,119401,119402,119404,119406],{"class":31,"line":32},[29,119403,24749],{"class":35},[29,119405,117446],{"class":103},[29,119407,26371],{"class":103},[29,119409,119410,119412,119414,119416],{"class":31,"line":43},[29,119411,24749],{"class":35},[29,119413,117446],{"class":103},[29,119415,24007],{"class":103},[29,119417,119134],{"class":103},[171,119419,119420],{},"这里提示snapd无法被安装，就证明成功了",[171,119422,119423],{},[1638,119424],{"alt":24,"src":119425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[275,119427,119429],{"id":119428},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[171,119431,119432],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[171,119434,119435],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[171,119437,119438],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[19,119440,119442],{"className":117425,"code":119441,"language":117427,"meta":24,"style":24},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[26,119443,119444,119449,119458,119463,119471],{"__ignoreMap":24},[29,119445,119446],{"class":31,"line":32},[29,119447,119448],{"class":367},"# 添加Mozilla提供的源\n",[29,119450,119451,119453,119455],{"class":31,"line":43},[29,119452,24749],{"class":35},[29,119454,118973],{"class":103},[29,119456,119457],{"class":103}," ppa:mozillateam\u002Fppa\n",[29,119459,119460],{"class":31,"line":51},[29,119461,119462],{"class":367},"# 安装Firefox\n",[29,119464,119465,119467,119469],{"class":31,"line":59},[29,119466,24749],{"class":35},[29,119468,117446],{"class":103},[29,119470,26371],{"class":103},[29,119472,119473,119475,119477,119479],{"class":31,"line":67},[29,119474,24749],{"class":35},[29,119476,117446],{"class":103},[29,119478,24007],{"class":103},[29,119480,119134],{"class":103},[275,119482,119484],{"id":119483},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[171,119486,119487],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[171,119489,119490],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[19,119492,119494],{"className":117425,"code":119493,"language":117427,"meta":24,"style":24},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[26,119495,119496,119501,119511,119519,119523],{"__ignoreMap":24},[29,119497,119498],{"class":31,"line":32},[29,119499,119500],{"class":367},"#删掉禁止安装snap的配置文件\n",[29,119502,119503,119505,119507,119509],{"class":31,"line":43},[29,119504,24749],{"class":35},[29,119506,118682],{"class":103},[29,119508,25454],{"class":39},[29,119510,119344],{"class":103},[29,119512,119513,119515,119517],{"class":31,"line":51},[29,119514,24749],{"class":35},[29,119516,117446],{"class":103},[29,119518,26371],{"class":103},[29,119520,119521],{"class":31,"line":59},[29,119522,2575],{"emptyLinePlaceholder":233},[29,119524,119525,119527,119529],{"class":31,"line":67},[29,119526,24749],{"class":35},[29,119528,117446],{"class":103},[29,119530,119531],{"class":103}," dist-update\n",[14,119533,119535],{"id":119534},"_33-中文输入法","3.3 中文输入法",[275,119537,119539],{"id":119538},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[171,119541,119542],{},"官网下载搜狗输入法",[171,119544,119545],{},[1638,119546],{"alt":24,"src":119547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[171,119549,119550],{},[1638,119551],{"alt":24,"src":119552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[171,119554,119555],{},"打开终端输入如下",[19,119557,119559],{"className":117425,"code":119558,"language":117427,"meta":24,"style":24},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[26,119560,119561,119568],{"__ignoreMap":24},[29,119562,119563,119565],{"class":31,"line":32},[29,119564,101405],{"class":39},[29,119566,119567],{"class":103}," ~\u002FDownloads\u002F\n",[29,119569,119570,119572,119574,119576],{"class":31,"line":43},[29,119571,24749],{"class":35},[29,119573,117446],{"class":103},[29,119575,24007],{"class":103},[29,119577,119578],{"class":103}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[171,119580,119581],{},"打开Fcitx",[171,119583,119584,119587],{},[1638,119585],{"alt":24,"src":119586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1638,119588],{"alt":24,"src":119589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[171,119591,119592],{},[1638,119593],{"alt":24,"src":119594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[171,119596,119597],{},"添加搜狗输入法",[171,119599,119600],{},[1638,119601],{"alt":24,"src":119602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[171,119604,119605],{},[1638,119606],{"alt":24,"src":119607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[171,119609,119610],{},"将搜狗输入法设置为唯一输入法",[171,119612,119613],{},[1638,119614],{"alt":24,"src":119615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[275,119617,119619],{"id":119618},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[259,119621,119622],{},[178,119623,119624],{},"卸载旧输入法",[19,119626,119628],{"className":118652,"code":119627,"language":118654,"meta":24,"style":24},"sudo apt purge fcitx* ibus*\n",[26,119629,119630],{"__ignoreMap":24},[29,119631,119632,119634,119636,119638,119641,119643,119646],{"class":31,"line":32},[29,119633,24749],{"class":35},[29,119635,117446],{"class":103},[29,119637,117787],{"class":103},[29,119639,119640],{"class":103}," fcitx",[29,119642,763],{"class":39},[29,119644,119645],{"class":103}," ibus",[29,119647,119377],{"class":39},[259,119649,119650],{"start":43},[178,119651,119652],{},"安装Fcitx5",[19,119654,119656],{"className":117425,"code":119655,"language":117427,"meta":24,"style":24},"# 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",[26,119657,119658,119663,119677,119681,119686,119695,119703],{"__ignoreMap":24},[29,119659,119660],{"class":31,"line":32},[29,119661,119662],{"class":367},"# Ubuntu22.04及以上、Debian12及以上\n",[29,119664,119665,119667,119669,119671,119674],{"class":31,"line":43},[29,119666,24749],{"class":35},[29,119668,117446],{"class":103},[29,119670,24007],{"class":103},[29,119672,119673],{"class":103}," fcitx5",[29,119675,119676],{"class":103}," fcitx5-chinese-addons\n",[29,119678,119679],{"class":31,"line":51},[29,119680,2575],{"emptyLinePlaceholder":233},[29,119682,119683],{"class":31,"line":59},[29,119684,119685],{"class":367},"# Ubuntu20.04\n",[29,119687,119688,119690,119692],{"class":31,"line":67},[29,119689,24749],{"class":35},[29,119691,118973],{"class":103},[29,119693,119694],{"class":103}," ppa:zhsj\u002Ffcitx5\n",[29,119696,119697,119699,119701],{"class":31,"line":75},[29,119698,24749],{"class":35},[29,119700,117446],{"class":103},[29,119702,26371],{"class":103},[29,119704,119705,119707,119709,119711,119713],{"class":31,"line":83},[29,119706,24749],{"class":35},[29,119708,117446],{"class":103},[29,119710,24007],{"class":103},[29,119712,119673],{"class":103},[29,119714,119676],{"class":103},[259,119716,119717,119720],{"start":51},[178,119718,119719],{},"Reboot System",[178,119721,119722],{},"启动Fcitx5",[171,119724,119725],{},[1638,119726],{"alt":24,"src":119727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[259,119729,119730],{"start":67},[178,119731,119732],{},"修改一些设置",[171,119734,119735],{},"将Pinyin和Keyboard - English US加入到左边。",[171,119737,119738],{},[1638,119739],{"alt":24,"src":119740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[171,119742,119743],{},"添加快捷键以便于更好切换中英文",[171,119745,119746],{},[1638,119747],{"alt":24,"src":119748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[259,119750,119751],{"start":75},[178,119752,119753],{},"重启",[19,119755,119757],{"className":118652,"code":119756,"language":118654,"meta":24,"style":24},"sudo shutdown -r now\n",[26,119758,119759],{"__ignoreMap":24},[29,119760,119761,119763,119766,119769],{"class":31,"line":32},[29,119762,24749],{"class":35},[29,119764,119765],{"class":103}," shutdown",[29,119767,119768],{"class":39}," -r",[29,119770,119771],{"class":103}," now\n",[259,119773,119774],{"start":83},[178,119775,119776],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[171,119778,119779],{},[546,119780,119781],{"href":119781,"rel":119782},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24038],[259,119784,119785],{"start":158},[178,119786,119787],{},"再重启",[19,119789,119790],{"className":118652,"code":119756,"language":118654,"meta":24,"style":24},[26,119791,119792],{"__ignoreMap":24},[29,119793,119794,119796,119798,119800],{"class":31,"line":32},[29,119795,24749],{"class":35},[29,119797,119765],{"class":103},[29,119799,119768],{"class":39},[29,119801,119771],{"class":103},[14,119803,119805],{"id":119804},"_34-pip3源替换","3.4 pip3源替换",[171,119807,119808],{},"非Debian系发行版需要做。",[171,119810,119811],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[171,119813,119814],{},"使用dnf的系统也可能不用做。",[19,119816,119818],{"className":117425,"code":119817,"language":117427,"meta":24,"style":24},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[26,119819,119820,119825,119832,119837,119842],{"__ignoreMap":24},[29,119821,119822],{"class":31,"line":32},[29,119823,119824],{"class":367},"# 检查是否已安装 pip\n",[29,119826,119827,119830],{"class":31,"line":43},[29,119828,119829],{"class":35},"pip3",[29,119831,26422],{"class":39},[29,119833,119834],{"class":31,"line":51},[29,119835,119836],{"class":367},"# 如果未安装，先安装 pip3（见下方）\n",[29,119838,119839],{"class":31,"line":59},[29,119840,119841],{"class":367},"# 配置 pip 使用清华源\n",[29,119843,119844,119846,119849,119852,119855],{"class":31,"line":67},[29,119845,119829],{"class":35},[29,119847,119848],{"class":103}," config",[29,119850,119851],{"class":103}," set",[29,119853,119854],{"class":103}," global.index-url",[29,119856,119857],{"class":103}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[171,119859,119860],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[171,119862,119863],{},[1638,119864],{"alt":24,"src":119865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[19,119867,119869],{"className":117425,"code":119868,"language":117427,"meta":24,"style":24},"#安装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",[26,119870,119871,119876,119884,119895,119899,119904,119923,119927,119932,119944,119948,119953],{"__ignoreMap":24},[29,119872,119873],{"class":31,"line":32},[29,119874,119875],{"class":367},"#安装pip3\n",[29,119877,119878,119880,119882],{"class":31,"line":43},[29,119879,24749],{"class":35},[29,119881,117446],{"class":103},[29,119883,26371],{"class":103},[29,119885,119886,119888,119890,119892],{"class":31,"line":51},[29,119887,24749],{"class":35},[29,119889,26205],{"class":103},[29,119891,24007],{"class":103},[29,119893,119894],{"class":103}," python3-pip\n",[29,119896,119897],{"class":31,"line":59},[29,119898,2575],{"emptyLinePlaceholder":233},[29,119900,119901],{"class":31,"line":67},[29,119902,119903],{"class":367},"#更新pip3\n",[29,119905,119906,119908,119910,119912,119914,119916,119919,119921],{"class":31,"line":75},[29,119907,101008],{"class":35},[29,119909,101011],{"class":39},[29,119911,101034],{"class":103},[29,119913,24007],{"class":103},[29,119915,26559],{"class":39},[29,119917,119918],{"class":103}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[29,119920,101039],{"class":39},[29,119922,101042],{"class":103},[29,119924,119925],{"class":31,"line":83},[29,119926,2575],{"emptyLinePlaceholder":233},[29,119928,119929],{"class":31,"line":158},[29,119930,119931],{"class":367},"#设置pip源为清华源\n",[29,119933,119934,119936,119938,119940,119942],{"class":31,"line":166},[29,119935,119829],{"class":35},[29,119937,119848],{"class":103},[29,119939,119851],{"class":103},[29,119941,119854],{"class":103},[29,119943,119857],{"class":103},[29,119945,119946],{"class":31,"line":1505},[29,119947,2575],{"emptyLinePlaceholder":233},[29,119949,119950],{"class":31,"line":1788},[29,119951,119952],{"class":367},"#测试\n",[29,119954,119955,119957,119959,119961,119963,119965],{"class":31,"line":1793},[29,119956,101008],{"class":35},[29,119958,101011],{"class":39},[29,119960,101034],{"class":103},[29,119962,24007],{"class":103},[29,119964,101039],{"class":39},[29,119966,101042],{"class":103},[171,119968,119969],{},"成功的话，会看到Looking后面是tsinghua字样。",[171,119971,119972],{},[1638,119973],{"alt":24,"src":119974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,119976,119978],{"id":119977},"_35-显卡驱动安装","3.5 显卡驱动安装",[275,119980,119982],{"id":119981},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[19,119984,119986],{"className":118652,"code":119985,"language":118654,"meta":24,"style":24},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[26,119987,119988,119993,120008,120013],{"__ignoreMap":24},[29,119989,119990],{"class":31,"line":32},[29,119991,119992],{"class":367},"# 如果是使用apt安装的驱动\n",[29,119994,119995,119997,119999,120001,120003,120006],{"class":31,"line":43},[29,119996,24749],{"class":35},[29,119998,26205],{"class":103},[29,120000,26208],{"class":103},[29,120002,119287],{"class":39},[29,120004,120005],{"class":103}," nvidia",[29,120007,119377],{"class":39},[29,120009,120010],{"class":31,"line":51},[29,120011,120012],{"class":367},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[29,120014,120015,120017],{"class":31,"line":59},[29,120016,24749],{"class":35},[29,120018,120019],{"class":103}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[275,120021,120023],{"id":120022},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22173,120025,120027],{"id":120026},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23085,120029,120031],{"id":120030},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[19,120033,120035],{"className":118652,"code":120034,"language":118654,"meta":24,"style":24},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,120036,120037,120042,120053,120058,120068,120073],{"__ignoreMap":24},[29,120038,120039],{"class":31,"line":32},[29,120040,120041],{"class":367},"# 安装英伟达驱动\n",[29,120043,120044,120046,120048,120050],{"class":31,"line":43},[29,120045,24749],{"class":35},[29,120047,117446],{"class":103},[29,120049,24007],{"class":103},[29,120051,120052],{"class":103}," nvidia-driver-版本号\n",[29,120054,120055],{"class":31,"line":51},[29,120056,120057],{"class":367},"# 重启 \n",[29,120059,120060,120062,120064,120066],{"class":31,"line":59},[29,120061,24749],{"class":35},[29,120063,119765],{"class":103},[29,120065,119768],{"class":39},[29,120067,119771],{"class":103},[29,120069,120070],{"class":31,"line":67},[29,120071,120072],{"class":367},"# 检查驱动是否安装成功\n",[29,120074,120075],{"class":31,"line":75},[29,120076,120077],{"class":35},"nvidia-smi\n",[23085,120079,120081],{"id":120080},"_35212-debian","3.5.2.1.2 Debian",[19,120083,120085],{"className":118652,"code":120084,"language":118654,"meta":24,"style":24},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,120086,120087,120091,120105,120109,120119,120123],{"__ignoreMap":24},[29,120088,120089],{"class":31,"line":32},[29,120090,120041],{"class":367},[29,120092,120093,120095,120097,120099,120102],{"class":31,"line":43},[29,120094,24749],{"class":35},[29,120096,117446],{"class":103},[29,120098,24007],{"class":103},[29,120100,120101],{"class":103}," nvidia-driver",[29,120103,120104],{"class":103}," nvidia-settings\n",[29,120106,120107],{"class":31,"line":51},[29,120108,120057],{"class":367},[29,120110,120111,120113,120115,120117],{"class":31,"line":59},[29,120112,24749],{"class":35},[29,120114,119765],{"class":103},[29,120116,119768],{"class":39},[29,120118,119771],{"class":103},[29,120120,120121],{"class":31,"line":67},[29,120122,120072],{"class":367},[29,120124,120125],{"class":31,"line":75},[29,120126,120077],{"class":35},[22173,120128,120130],{"id":120129},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[171,120132,120133,120134,120137],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[457,120135,120136],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[171,120139,120140,120141],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23728,120142,120143],{},[457,120144,120145],{},"（也可以不禁用桌面环境，直接进行下一步。）",[19,120147,120149],{"className":118652,"code":120148,"language":118654,"meta":24,"style":24},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[26,120150,120151,120156,120166,120171,120184,120189],{"__ignoreMap":24},[29,120152,120153],{"class":31,"line":32},[29,120154,120155],{"class":367},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[29,120157,120158,120160,120163],{"class":31,"line":43},[29,120159,24749],{"class":35},[29,120161,120162],{"class":103}," telinit",[29,120164,120165],{"class":39}," 3\n",[29,120167,120168],{"class":31,"line":51},[29,120169,120170],{"class":367},"# ubuntu 使用下方命令\n",[29,120172,120173,120175,120178,120181],{"class":31,"line":59},[29,120174,24749],{"class":35},[29,120176,120177],{"class":103}," service",[29,120179,120180],{"class":103}," lightdm",[29,120182,120183],{"class":103}," stop\n",[29,120185,120186],{"class":31,"line":67},[29,120187,120188],{"class":367},"# Fedora 使用下方命令\n",[29,120190,120191,120193,120195,120198],{"class":31,"line":75},[29,120192,24749],{"class":35},[29,120194,26642],{"class":103},[29,120196,120197],{"class":103}," isolate",[29,120199,120200],{"class":103}," multi-user.target\n",[171,120202,120203],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[19,120205,120207],{"className":118652,"code":120206,"language":118654,"meta":24,"style":24},"# 编译环境+准备工作\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",[26,120208,120209,120214,120225,120230,120237,120242,120254,120259,120266,120271],{"__ignoreMap":24},[29,120210,120211],{"class":31,"line":32},[29,120212,120213],{"class":367},"# 编译环境+准备工作\n",[29,120215,120216,120218,120220,120222],{"class":31,"line":43},[29,120217,24749],{"class":35},[29,120219,117446],{"class":103},[29,120221,24007],{"class":103},[29,120223,120224],{"class":103}," build-essential\n",[29,120226,120227],{"class":31,"line":51},[29,120228,120229],{"class":367},"# 进入到.run目录中\n",[29,120231,120232,120234],{"class":31,"line":59},[29,120233,101405],{"class":39},[29,120235,120236],{"class":103}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[29,120238,120239],{"class":31,"line":67},[29,120240,120241],{"class":367},"# 给驱动文件增加可执行权限：\n",[29,120243,120244,120246,120248,120251],{"class":31,"line":75},[29,120245,24749],{"class":35},[29,120247,24752],{"class":103},[29,120249,120250],{"class":103}," a+x",[29,120252,120253],{"class":103}," NVIDIA-Linux-x86_64-550.107.02.run\n",[29,120255,120256],{"class":31,"line":83},[29,120257,120258],{"class":367},"# 然后执行安装：\n",[29,120260,120261,120263],{"class":31,"line":158},[29,120262,24749],{"class":35},[29,120264,120265],{"class":103}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[29,120267,120268],{"class":31,"line":166},[29,120269,120270],{"class":367},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[29,120272,120273,120275,120278],{"class":31,"line":1505},[29,120274,24749],{"class":35},[29,120276,120277],{"class":103}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[29,120279,120280],{"class":39},"  --no-opengl-files\n",[171,120282,120283],{},"安装完毕重启即可",[19,120285,120287],{"className":118652,"code":120286,"language":118654,"meta":24,"style":24},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,120288,120289,120293,120299,120303],{"__ignoreMap":24},[29,120290,120291],{"class":31,"line":32},[29,120292,120057],{"class":367},[29,120294,120295,120297],{"class":31,"line":43},[29,120296,24749],{"class":35},[29,120298,26776],{"class":103},[29,120300,120301],{"class":31,"line":51},[29,120302,120072],{"class":367},[29,120304,120305],{"class":31,"line":59},[29,120306,120077],{"class":35},[275,120308,120310],{"id":120309},"_353-安装cuda","3.5.3 安装CUDA",[171,120312,120313],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[171,120315,120316],{},[1638,120317],{"alt":24,"src":120318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[259,120320,120321],{},[178,120322,120323],{},"先查看显卡驱动所支持的最高CUDA版本",[19,120325,120326],{"className":118652,"code":120077,"language":118654,"meta":24,"style":24},[26,120327,120328],{"__ignoreMap":24},[29,120329,120330],{"class":31,"line":32},[29,120331,120077],{"class":35},[171,120333,120334],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[171,120336,120337],{},[1638,120338],{"alt":24,"src":120339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[259,120341,120342],{"start":43},[178,120343,120344],{},"下载CUDA并安装CUDA",[171,120346,118431,120347],{},[546,120348,118434],{"href":118434,"rel":120349},[24038],[171,120351,120352],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[171,120354,120355],{},[1638,120356],{"alt":24,"src":120357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[171,120359,120360,120361,120366],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[546,120362,120365],{"href":120363,"rel":120364},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24038],"Vinci机器人队单片机教程","）",[171,120368,120369],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[171,120371,120372],{},[1638,120373],{"alt":24,"src":120374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[171,120376,120377],{},"将最下方框框里的命令敲入终端",[19,120379,120381],{"className":118652,"code":120380,"language":118654,"meta":24,"style":24},"# 在当前文件夹下创建一个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",[26,120382,120383,120388,120397,120402,120409,120414,120422,120427,120438,120443],{"__ignoreMap":24},[29,120384,120385],{"class":31,"line":32},[29,120386,120387],{"class":367},"# 在当前文件夹下创建一个ttt的子文件夹\n",[29,120389,120390,120392,120394],{"class":31,"line":43},[29,120391,101395],{"class":35},[29,120393,29345],{"class":39},[29,120395,120396],{"class":103}," .\u002Fttt\n",[29,120398,120399],{"class":31,"line":51},[29,120400,120401],{"class":367},"# 进入ttt文件夹\n",[29,120403,120404,120406],{"class":31,"line":59},[29,120405,101405],{"class":39},[29,120407,120408],{"class":103}," ttt\n",[29,120410,120411],{"class":31,"line":67},[29,120412,120413],{"class":367},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[29,120415,120416,120419],{"class":31,"line":75},[29,120417,120418],{"class":35},"wget",[29,120420,120421],{"class":103}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[29,120423,120424],{"class":31,"line":83},[29,120425,120426],{"class":367},"# 给予权限\n",[29,120428,120429,120431,120433,120435],{"class":31,"line":158},[29,120430,24749],{"class":35},[29,120432,24752],{"class":103},[29,120434,120250],{"class":103},[29,120436,120437],{"class":103}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[29,120439,120440],{"class":31,"line":166},[29,120441,120442],{"class":367},"# 运行脚本\n",[29,120444,120445,120447],{"class":31,"line":1505},[29,120446,24749],{"class":35},[29,120448,120437],{"class":103},[171,120450,120451],{},[1638,120452],{"alt":24,"src":120453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[171,120455,120456],{},"正在安装中：",[171,120458,120459],{},[1638,120460],{"alt":24,"src":120461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[171,120463,120464],{},"输入accept接受即可",[171,120466,120467],{},[1638,120468],{"alt":24,"src":120469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[171,120471,120472],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[171,120474,120475],{},[1638,120476],{"alt":24,"src":120477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[171,120479,120480],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[171,120482,120483],{},[1638,120484],{"alt":24,"src":120485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[259,120487,120488],{"start":51},[178,120489,120490],{},"配置环境",[171,120492,120493],{},"根据上方确认一下路径，比如我上面红色框起来的为",[19,120495,120497],{"className":118652,"code":120496,"language":118654,"meta":24,"style":24},"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",[26,120498,120499,120515,120530],{"__ignoreMap":24},[29,120500,120501,120504,120507,120510,120513],{"class":31,"line":32},[29,120502,120503],{"class":35},"Please",[29,120505,120506],{"class":103}," make",[29,120508,120509],{"class":103}," sure",[29,120511,120512],{"class":103}," that",[29,120514,2849],{"class":309},[29,120516,120517,120519,120522,120525,120528],{"class":31,"line":43},[29,120518,52400],{"class":35},[29,120520,120521],{"class":103},"   PATH",[29,120523,120524],{"class":103}," includes",[29,120526,120527],{"class":103}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[29,120529,2849],{"class":309},[29,120531,120532,120534,120537,120539,120542,120545,120547,120550,120553,120556,120559,120561,120564,120566],{"class":31,"line":51},[29,120533,52400],{"class":35},[29,120535,120536],{"class":103},"   LD_LIBRARY_PATH",[29,120538,120524],{"class":103},[29,120540,120541],{"class":103}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[29,120543,120544],{"class":103}," or,",[29,120546,5384],{"class":103},[29,120548,120549],{"class":103}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[29,120551,120552],{"class":103}," to",[29,120554,120555],{"class":103}," \u002Fetc\u002Fld.so.conf",[29,120557,120558],{"class":103}," and",[29,120560,27359],{"class":103},[29,120562,120563],{"class":103}," ldconfig",[29,120565,64733],{"class":103},[29,120567,120568],{"class":103}," root\n",[171,120570,120571],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[19,120573,120575],{"className":118652,"code":120574,"language":118654,"meta":24,"style":24},"which nvcc\n",[26,120576,120577],{"__ignoreMap":24},[29,120578,120579,120582],{"class":31,"line":32},[29,120580,120581],{"class":39},"which",[29,120583,120584],{"class":103}," nvcc\n",[171,120586,120587],{},[1638,120588],{"alt":24,"src":120589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[171,120591,120592],{},"所以我进行以下操作：",[19,120594,120596],{"className":118652,"code":120595,"language":118654,"meta":24,"style":24},"sudo vim ~\u002F.bashrc\n",[26,120597,120598],{"__ignoreMap":24},[29,120599,120600,120602,120604],{"class":31,"line":32},[29,120601,24749],{"class":35},[29,120603,118712],{"class":103},[29,120605,120606],{"class":103}," ~\u002F.bashrc\n",[171,120608,120609],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[19,120611,120613],{"className":118652,"code":120612,"language":118654,"meta":24,"style":24},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[26,120614,120615,120627],{"__ignoreMap":24},[29,120616,120617,120619,120622,120624],{"class":31,"line":32},[29,120618,25171],{"class":305},[29,120620,120621],{"class":309}," PATH",[29,120623,355],{"class":305},[29,120625,120626],{"class":309},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[29,120628,120629,120631,120634,120636],{"class":31,"line":43},[29,120630,25171],{"class":305},[29,120632,120633],{"class":309}," LD_LIBRARY_PATH",[29,120635,355],{"class":305},[29,120637,120638],{"class":309},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[171,120640,120641],{},[1638,120642],{"alt":24,"src":120643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[19,120645,120647],{"className":118652,"code":120646,"language":118654,"meta":24,"style":24},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[26,120648,120649,120654,120660,120665],{"__ignoreMap":24},[29,120650,120651],{"class":31,"line":32},[29,120652,120653],{"class":367},"# 刷新当前终端的环境变量\n",[29,120655,120656,120658],{"class":31,"line":43},[29,120657,101022],{"class":39},[29,120659,120606],{"class":103},[29,120661,120662],{"class":31,"line":51},[29,120663,120664],{"class":367},"# 验证CUDA是否安装成功\n",[29,120666,120667,120670],{"class":31,"line":59},[29,120668,120669],{"class":35},"nvcc",[29,120671,120672],{"class":39}," -V\n",[171,120674,120675],{},"出现下图这种则安装成功。",[171,120677,120678],{},[1638,120679],{"alt":24,"src":120680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[275,120682,120684],{"id":120683},"_354-安装cudnn","3.5.4 安装cuDNN",[259,120686,120687],{},[178,120688,120689],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[171,120691,120692,120693,120698],{},"前往 NVIDIA cuDNN 下载页面：",[546,120694,120697],{"href":120695,"rel":120696},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24038],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[171,120700,120701],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[171,120703,120704],{},[1638,120705],{"alt":24,"src":120706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[171,120708,120709],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[171,120711,120712],{},[1638,120713],{"alt":24,"src":120714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[171,120716,120717],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[171,120719,120720],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[171,120722,120723],{},[457,120724,120725],{},"我这里选择所有Linux X86_64最通用的办法：",[171,120727,120728],{},"下载好的：",[171,120730,120731],{},[1638,120732],{"alt":24,"src":120733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[259,120735,120736],{"start":43},[178,120737,120738],{},"安装cuDNN",[171,120740,120741],{},"找到该文件所在目录，并打开终端，cd到该目录。",[171,120743,120744],{},[1638,120745],{"alt":24,"src":120746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[171,120748,120749],{},"解压文件，并复制到对应位置完成安装",[19,120751,120753],{"className":118652,"code":120752,"language":118654,"meta":24,"style":24},"# 解压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",[26,120754,120755,120760,120771,120776,120783,120788,120804,120818,120823,120834,120843,120847,120863],{"__ignoreMap":24},[29,120756,120757],{"class":31,"line":32},[29,120758,120759],{"class":367},"# 解压cuDNN文件\n",[29,120761,120762,120765,120768],{"class":31,"line":43},[29,120763,120764],{"class":35},"tar",[29,120766,120767],{"class":39}," -xvf",[29,120769,120770],{"class":103}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[29,120772,120773],{"class":31,"line":51},[29,120774,120775],{"class":367},"# cd进文件夹\n",[29,120777,120778,120780],{"class":31,"line":59},[29,120779,101405],{"class":39},[29,120781,120782],{"class":103}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[29,120784,120785],{"class":31,"line":67},[29,120786,120787],{"class":367},"# 复制cuDNN文件到CUDA目录\n",[29,120789,120790,120792,120794,120797,120799,120802],{"class":31,"line":75},[29,120791,24749],{"class":35},[29,120793,27990],{"class":103},[29,120795,120796],{"class":103}," include\u002Fcudnn",[29,120798,763],{"class":39},[29,120800,120801],{"class":103},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[29,120803,2849],{"class":309},[29,120805,120806,120808,120810,120813,120815],{"class":31,"line":83},[29,120807,24749],{"class":35},[29,120809,27990],{"class":103},[29,120811,120812],{"class":103}," lib\u002Flibcudnn",[29,120814,763],{"class":39},[29,120816,120817],{"class":103},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[29,120819,120820],{"class":31,"line":158},[29,120821,120822],{"class":367},"# 对比一下有没有缺文件\n",[29,120824,120825,120827,120830,120832],{"class":31,"line":166},[29,120826,26890],{"class":35},[29,120828,120829],{"class":103}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[29,120831,763],{"class":39},[29,120833,2849],{"class":309},[29,120835,120836,120838,120841],{"class":31,"line":1505},[29,120837,26890],{"class":35},[29,120839,120840],{"class":103}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[29,120842,119377],{"class":39},[29,120844,120845],{"class":31,"line":1788},[29,120846,120426],{"class":367},[29,120848,120849,120851,120853,120856,120858,120860],{"class":31,"line":1793},[29,120850,24749],{"class":35},[29,120852,24752],{"class":103},[29,120854,120855],{"class":103}," a+r",[29,120857,120829],{"class":103},[29,120859,763],{"class":39},[29,120861,120862],{"class":309},"   \n",[29,120864,120865,120867,120869,120871,120873],{"class":31,"line":1799},[29,120866,24749],{"class":35},[29,120868,24752],{"class":103},[29,120870,120855],{"class":103},[29,120872,120840],{"class":103},[29,120874,119377],{"class":39},[259,120876,120877],{"start":51},[178,120878,120879],{},"检查是否安装成功",[19,120881,120883],{"className":118652,"code":120882,"language":118654,"meta":24,"style":24},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[26,120884,120885,120890],{"__ignoreMap":24},[29,120886,120887],{"class":31,"line":32},[29,120888,120889],{"class":367},"# 检查cuDNN版本命令\n",[29,120891,120892,120895,120898,120900,120902,120905,120908],{"class":31,"line":43},[29,120893,120894],{"class":35},"cat",[29,120896,120897],{"class":103}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[29,120899,25238],{"class":305},[29,120901,30365],{"class":35},[29,120903,120904],{"class":103}," CUDNN_MAJOR",[29,120906,120907],{"class":39}," -A",[29,120909,47852],{"class":39},[171,120911,120912],{},"出现下图这样的就是安装成功了",[171,120914,120915],{},[1638,120916],{"alt":24,"src":120917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[259,120919,120920],{"start":59},[178,120921,120922],{},"软链接(一般不需要)",[19,120924,120926],{"className":118652,"code":120925,"language":118654,"meta":24,"style":24},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[26,120927,120928,120933],{"__ignoreMap":24},[29,120929,120930],{"class":31,"line":32},[29,120931,120932],{"class":367},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[29,120934,120935,120937],{"class":31,"line":43},[29,120936,24749],{"class":35},[29,120938,120939],{"class":103}," ldconfig\n",[171,120941,120942],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[19,120944,120949],{"className":120945,"code":120946,"language":120947,"meta":120948,"style":24},"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",[26,120950,120951,120956,120961,120966,120971,120976,120981],{"__ignoreMap":24},[29,120952,120953],{"class":31,"line":32},[29,120954,120955],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[29,120957,120958],{"class":31,"line":43},[29,120959,120960],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[29,120962,120963],{"class":31,"line":51},[29,120964,120965],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[29,120967,120968],{"class":31,"line":59},[29,120969,120970],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[29,120972,120973],{"class":31,"line":67},[29,120974,120975],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[29,120977,120978],{"class":31,"line":75},[29,120979,120980],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[29,120982,120983],{"class":31,"line":83},[29,120984,120985],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[171,120987,120988],{},"运行下方的命令",[19,120990,120992],{"className":118652,"code":120991,"language":118654,"meta":24,"style":24},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[26,120993,120994,120999,121006,121011],{"__ignoreMap":24},[29,120995,120996],{"class":31,"line":32},[29,120997,120998],{"class":367},"# cd进入CUDA路径\n",[29,121000,121001,121003],{"class":31,"line":43},[29,121002,101405],{"class":39},[29,121004,121005],{"class":103}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[29,121007,121008],{"class":31,"line":51},[29,121009,121010],{"class":367}," # 查看本路径下的需要软链接的文件名\n",[29,121012,121013],{"class":31,"line":59},[29,121014,121015],{"class":35}," ls\n",[171,121017,121018],{},[1638,121019],{"alt":24,"src":121020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[171,121022,121023,121024,18585,121027,18585,121030,121033],{},"如上图，我需要将",[26,121025,121026],{},"libcudnn_xxx_xxxxx.so.8.9.7",[26,121028,121029],{},"libcudnn_xxx_xxxxx.so.8",[26,121031,121032],{},"libcudnn_xxx_xxxxx.so","软链接",[19,121035,121037],{"className":118652,"code":121036,"language":118654,"meta":24,"style":24},"# 创建符号链接。对于每个 .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",[26,121038,121039,121044,121060,121074,121088,121102,121116,121130,121144,121149,121155,121160],{"__ignoreMap":24},[29,121040,121041],{"class":31,"line":32},[29,121042,121043],{"class":367},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[29,121045,121046,121048,121051,121054,121057],{"class":31,"line":43},[29,121047,24749],{"class":35},[29,121049,121050],{"class":103}," ln",[29,121052,121053],{"class":39}," -sf",[29,121055,121056],{"class":103}," libcudnn_cnn_train.so.8.9.7",[29,121058,121059],{"class":103}," libcudnn_cnn_train.so.8\n",[29,121061,121062,121064,121066,121068,121071],{"class":31,"line":51},[29,121063,24749],{"class":35},[29,121065,121050],{"class":103},[29,121067,121053],{"class":39},[29,121069,121070],{"class":103}," libcudnn_adv_infer.so.8.9.7",[29,121072,121073],{"class":103}," libcudnn_adv_infer.so.8\n",[29,121075,121076,121078,121080,121082,121085],{"class":31,"line":59},[29,121077,24749],{"class":35},[29,121079,121050],{"class":103},[29,121081,121053],{"class":39},[29,121083,121084],{"class":103}," libcudnn_adv_train.so.8.9.7",[29,121086,121087],{"class":103}," libcudnn_adv_train.so.8\n",[29,121089,121090,121092,121094,121096,121099],{"class":31,"line":67},[29,121091,24749],{"class":35},[29,121093,121050],{"class":103},[29,121095,121053],{"class":39},[29,121097,121098],{"class":103}," libcudnn_cnn_infer.so.8.9.7",[29,121100,121101],{"class":103}," libcudnn_cnn_infer.so.8\n",[29,121103,121104,121106,121108,121110,121113],{"class":31,"line":75},[29,121105,24749],{"class":35},[29,121107,121050],{"class":103},[29,121109,121053],{"class":39},[29,121111,121112],{"class":103}," libcudnn.so.8.9.7",[29,121114,121115],{"class":103}," libcudnn.so.8\n",[29,121117,121118,121120,121122,121124,121127],{"class":31,"line":83},[29,121119,24749],{"class":35},[29,121121,121050],{"class":103},[29,121123,121053],{"class":39},[29,121125,121126],{"class":103}," libcudnn_ops_infer.so.8.9.7",[29,121128,121129],{"class":103}," libcudnn_ops_infer.so.8\n",[29,121131,121132,121134,121136,121138,121141],{"class":31,"line":158},[29,121133,24749],{"class":35},[29,121135,121050],{"class":103},[29,121137,121053],{"class":39},[29,121139,121140],{"class":103}," libcudnn_ops_train.so.8.9.7",[29,121142,121143],{"class":103}," libcudnn_ops_train.so.8\n",[29,121145,121146],{"class":31,"line":166},[29,121147,121148],{"class":367},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[29,121150,121151,121153],{"class":31,"line":1505},[29,121152,24749],{"class":35},[29,121154,120939],{"class":103},[29,121156,121157],{"class":31,"line":1788},[29,121158,121159],{"class":367},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[29,121161,121162,121164,121167,121170,121172,121175],{"class":31,"line":1793},[29,121163,26890],{"class":35},[29,121165,121166],{"class":39}," -l",[29,121168,121169],{"class":103}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[29,121171,763],{"class":39},[29,121173,121174],{"class":103},".so",[29,121176,119377],{"class":39},[275,121178,121180],{"id":121179},"_355-常见问题","3.5.5 常见问题",[259,121182,121183],{},[178,121184,121185],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[19,121187,121189],{"className":118652,"code":121188,"language":118654,"meta":24,"style":24},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[26,121190,121191],{"__ignoreMap":24},[29,121192,121193,121195,121197],{"class":31,"line":32},[29,121194,24749],{"class":35},[29,121196,118712],{"class":103},[29,121198,121199],{"class":103}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[171,121201,121202],{},"blacklist-nouveau.conf文件内容如下：",[19,121204,121206],{"className":118652,"code":121205,"language":118654,"meta":24,"style":24},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[26,121207,121208,121216,121223,121235,121245],{"__ignoreMap":24},[29,121209,121210,121213],{"class":31,"line":32},[29,121211,121212],{"class":35},"blacklist",[29,121214,121215],{"class":103}," nouveau\n",[29,121217,121218,121220],{"class":31,"line":43},[29,121219,121212],{"class":35},[29,121221,121222],{"class":103}," lbm-nouveau\n",[29,121224,121225,121227,121230,121233],{"class":31,"line":51},[29,121226,116059],{"class":35},[29,121228,121229],{"class":103}," nouveau",[29,121231,121232],{"class":103}," modeset=",[29,121234,3260],{"class":39},[29,121236,121237,121240,121242],{"class":31,"line":59},[29,121238,121239],{"class":39},"alias",[29,121241,121229],{"class":103},[29,121243,121244],{"class":103}," off\n",[29,121246,121247,121249,121252],{"class":31,"line":67},[29,121248,121239],{"class":39},[29,121250,121251],{"class":103}," lbm-nouveau",[29,121253,121244],{"class":103},[171,121255,121256],{},"接着运行下方命令",[19,121258,121260],{"className":118652,"code":121259,"language":118654,"meta":24,"style":24},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[26,121261,121262,121272,121277],{"__ignoreMap":24},[29,121263,121264,121266,121269],{"class":31,"line":32},[29,121265,24749],{"class":35},[29,121267,121268],{"class":103}," update-initramfs",[29,121270,121271],{"class":39}," -u\n",[29,121273,121274],{"class":31,"line":43},[29,121275,121276],{"class":35},"或者\n",[29,121278,121279,121281,121284],{"class":31,"line":51},[29,121280,24749],{"class":35},[29,121282,121283],{"class":103}," dracut",[29,121285,121286],{"class":39}," --force\n",[171,121288,121289],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[19,121291,121293],{"className":118652,"code":121292,"language":118654,"meta":24,"style":24},"lsmod | grep nouveau\n",[26,121294,121295],{"__ignoreMap":24},[29,121296,121297,121300,121302,121304],{"class":31,"line":32},[29,121298,121299],{"class":35},"lsmod",[29,121301,25238],{"class":305},[29,121303,30365],{"class":35},[29,121305,121215],{"class":103},[259,121307,121308],{"start":43},[178,121309,121310],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[19,121312,121314],{"className":118652,"code":121313,"language":118654,"meta":24,"style":24},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[26,121315,121316],{"__ignoreMap":24},[29,121317,121318,121320,121322],{"class":31,"line":32},[29,121319,24749],{"class":35},[29,121321,118712],{"class":103},[29,121323,121324],{"class":103}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[171,121326,121327],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[19,121329,121331],{"className":118652,"code":121330,"language":118654,"meta":24,"style":24},"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",[26,121332,121333,121341,121349,121357,121364,121372,121382,121390],{"__ignoreMap":24},[29,121334,121335,121338],{"class":31,"line":32},[29,121336,121337],{"class":35},"Section",[29,121339,121340],{"class":103}," \"OutputClass\"\n",[29,121342,121343,121346],{"class":31,"line":43},[29,121344,121345],{"class":35},"   Identifier",[29,121347,121348],{"class":103}," \"nvidia\"\n",[29,121350,121351,121354],{"class":31,"line":51},[29,121352,121353],{"class":35},"   MatchDriver",[29,121355,121356],{"class":103}," \"nvidia-drm\"\n",[29,121358,121359,121362],{"class":31,"line":59},[29,121360,121361],{"class":35},"   Driver",[29,121363,121348],{"class":103},[29,121365,121366,121369],{"class":31,"line":67},[29,121367,121368],{"class":35},"   Option",[29,121370,121371],{"class":103}," \"AllowEmptyInitialConfiguration\"\n",[29,121373,121374,121376,121379],{"class":31,"line":75},[29,121375,121368],{"class":35},[29,121377,121378],{"class":103}," \"PrimaryGPU\"",[29,121380,121381],{"class":103}," \"yes\"\n",[29,121383,121384,121387],{"class":31,"line":83},[29,121385,121386],{"class":35},"   ModulePath",[29,121388,121389],{"class":103}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[29,121391,121392],{"class":31,"line":158},[29,121393,121394],{"class":35},"EndSection\n",[259,121396,121397],{"start":51},[178,121398,121399],{},"安装N卡驱动提示错误",[19,121401,121403],{"className":120945,"code":121402,"language":120947,"meta":120948,"style":24},"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",[26,121404,121405],{"__ignoreMap":24},[29,121406,121407],{"class":31,"line":32},[29,121408,121402],{},[259,121410,121411],{},[178,121412,121413],{},"检查当前运行的内核版本：",[171,121415,121416],{},"运行以下命令以查看你当前正在使用的内核版本：",[19,121418,121420],{"className":117425,"code":121419,"language":117427,"meta":24,"style":24},"uname -r\n",[26,121421,121422],{"__ignoreMap":24},[29,121423,121424,121426],{"class":31,"line":32},[29,121425,70333],{"class":35},[29,121427,121428],{"class":39}," -r\n",[259,121430,121431],{"start":43},[178,121432,121433],{},"安装内核开发文件：",[171,121435,121436,121437,121440],{},"确保你已经安装了与当前内核版本相匹配的 ",[26,121438,121439],{},"kernel-devel"," 包。运行以下命令来安装：",[19,121442,121444],{"className":117425,"code":121443,"language":117427,"meta":24,"style":24},"sudo dnf install kernel-devel-$(uname -r)\n",[26,121445,121446],{"__ignoreMap":24},[29,121447,121448,121450,121452,121454,121457,121459,121461,121463],{"class":31,"line":32},[29,121449,24749],{"class":35},[29,121451,26444],{"class":103},[29,121453,24007],{"class":103},[29,121455,121456],{"class":103}," kernel-devel-",[29,121458,25228],{"class":309},[29,121460,70333],{"class":35},[29,121462,119768],{"class":39},[29,121464,316],{"class":309},[171,121466,121467],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[259,121469,121470],{"start":51},[178,121471,121472],{},"安装内核源代码（如果需要）：",[171,121474,121475],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[19,121477,121479],{"className":117425,"code":121478,"language":117427,"meta":24,"style":24},"sudo dnf install kernel-headers kernel-source\n",[26,121480,121481],{"__ignoreMap":24},[29,121482,121483,121485,121487,121489,121492],{"class":31,"line":32},[29,121484,24749],{"class":35},[29,121486,26444],{"class":103},[29,121488,24007],{"class":103},[29,121490,121491],{"class":103}," kernel-headers",[29,121493,121494],{"class":103}," kernel-source\n",[259,121496,121497],{"start":59},[178,121498,121499],{},"检查安装：",[171,121501,121502,121503,121506],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[26,121504,121505],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[19,121508,121510],{"className":117425,"code":121509,"language":117427,"meta":24,"style":24},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[26,121511,121512],{"__ignoreMap":24},[29,121513,121514,121516],{"class":31,"line":32},[29,121515,26890],{"class":35},[29,121517,121518],{"class":103}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[171,121520,121521,121522,121525],{},"如果仍然遇到问题，可以通过 ",[26,121523,121524],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[223,121527,121528],{},"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":24,"searchDepth":43,"depth":43,"links":121530},[121531,121535,121545,121549,121550],{"id":118628,"depth":43,"text":118629,"children":121532},[121533,121534],{"id":118638,"depth":51,"text":118639},{"id":118648,"depth":51,"text":118649},{"id":118848,"depth":43,"text":118849,"children":121536},[121537,121538,121539,121540,121541,121542,121543,121544],{"id":118852,"depth":51,"text":118853},{"id":118922,"depth":51,"text":118923},{"id":119011,"depth":51,"text":119012},{"id":119256,"depth":51,"text":119257},{"id":119326,"depth":51,"text":119327},{"id":119393,"depth":51,"text":119394},{"id":119428,"depth":51,"text":119429},{"id":119483,"depth":51,"text":119484},{"id":119534,"depth":43,"text":119535,"children":121546},[121547,121548],{"id":119538,"depth":51,"text":119539},{"id":119618,"depth":51,"text":119619},{"id":119804,"depth":43,"text":119805},{"id":119977,"depth":43,"text":119978,"children":121551},[121552,121553,121554,121555,121556],{"id":119981,"depth":51,"text":119982},{"id":120022,"depth":51,"text":120023},{"id":120309,"depth":51,"text":120310},{"id":120683,"depth":51,"text":120684},{"id":121179,"depth":51,"text":121180},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118620,"description":230},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121563,"title":121564,"body":121565,"description":230,"extension":231,"meta":121905,"navigation":233,"path":121906,"seo":121907,"stem":121908,"__hash__":121909},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121566,"toc":121903},[121567,121570,121575,121578,121824,121829,121832,121868,121871,121900],[10,121568,121564],{"id":121569},"_4-命令教程长期积累",[259,121571,121572],{},[178,121573,121574],{},"大多数命令",[171,121576,121577],{},"常用 Linux 命令速查：",[19,121579,121581],{"className":117425,"code":121580,"language":117427,"meta":24,"style":24},"# 文件与目录\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",[26,121582,121583,121588,121595,121602,121610,121617,121624,121632,121640,121647,121654,121662,121666,121671,121678,121686,121693,121697,121702,121709,121717,121725,121733,121741,121745,121750,121758,121765,121772,121780,121788,121792,121797,121806,121815],{"__ignoreMap":24},[29,121584,121585],{"class":31,"line":32},[29,121586,121587],{"class":367},"# 文件与目录\n",[29,121589,121590,121592],{"class":31,"line":43},[29,121591,26890],{"class":35},[29,121593,121594],{"class":367},"        # 列出目录内容\n",[29,121596,121597,121599],{"class":31,"line":51},[29,121598,101405],{"class":39},[29,121600,121601],{"class":367},"        # 切换目录\n",[29,121603,121604,121607],{"class":31,"line":59},[29,121605,121606],{"class":39},"pwd",[29,121608,121609],{"class":367},"       # 显示当前路径\n",[29,121611,121612,121614],{"class":31,"line":67},[29,121613,101395],{"class":35},[29,121615,121616],{"class":367},"     # 创建目录\n",[29,121618,121619,121621],{"class":31,"line":75},[29,121620,25451],{"class":35},[29,121622,121623],{"class":367},"        # 删除文件或目录\n",[29,121625,121626,121629],{"class":31,"line":83},[29,121627,121628],{"class":35},"cp",[29,121630,121631],{"class":367},"        # 复制文件或目录\n",[29,121633,121634,121637],{"class":31,"line":158},[29,121635,121636],{"class":35},"mv",[29,121638,121639],{"class":367},"        # 移动\u002F重命名文件或目录\n",[29,121641,121642,121644],{"class":31,"line":166},[29,121643,101412],{"class":35},[29,121645,121646],{"class":367},"     # 创建空文件\n",[29,121648,121649,121651],{"class":31,"line":1505},[29,121650,120894],{"class":35},[29,121652,121653],{"class":367},"       # 查看文件内容\n",[29,121655,121656,121659],{"class":31,"line":1788},[29,121657,121658],{"class":35},"head\u002Ftail",[29,121660,121661],{"class":367}," # 查看文件头部\u002F尾部\n",[29,121663,121664],{"class":31,"line":1793},[29,121665,2575],{"emptyLinePlaceholder":233},[29,121667,121668],{"class":31,"line":1799},[29,121669,121670],{"class":367},"# 权限管理\n",[29,121672,121673,121675],{"class":31,"line":1804},[29,121674,24784],{"class":35},[29,121676,121677],{"class":367},"     # 修改文件权限\n",[29,121679,121680,121683],{"class":31,"line":1818},[29,121681,121682],{"class":35},"chown",[29,121684,121685],{"class":367},"     # 修改文件所有者\n",[29,121687,121688,121690],{"class":31,"line":1823},[29,121689,24749],{"class":35},[29,121691,121692],{"class":367},"      # 以管理员身份执行\n",[29,121694,121695],{"class":31,"line":1829},[29,121696,2575],{"emptyLinePlaceholder":233},[29,121698,121699],{"class":31,"line":1850},[29,121700,121701],{"class":367},"# 系统信息\n",[29,121703,121704,121706],{"class":31,"line":1855},[29,121705,70333],{"class":35},[29,121707,121708],{"class":367},"     # 系统信息\n",[29,121710,121711,121714],{"class":31,"line":1869},[29,121712,121713],{"class":35},"df",[29,121715,121716],{"class":367},"        # 磁盘使用情况\n",[29,121718,121719,121722],{"class":31,"line":1874},[29,121720,121721],{"class":35},"free",[29,121723,121724],{"class":367},"      # 内存使用情况\n",[29,121726,121727,121730],{"class":31,"line":1903},[29,121728,121729],{"class":35},"top\u002Fhtop",[29,121731,121732],{"class":367},"  # 进程监控\n",[29,121734,121735,121738],{"class":31,"line":1908},[29,121736,121737],{"class":35},"ps",[29,121739,121740],{"class":367},"        # 查看进程\n",[29,121742,121743],{"class":31,"line":1925},[29,121744,2575],{"emptyLinePlaceholder":233},[29,121746,121747],{"class":31,"line":1930},[29,121748,121749],{"class":367},"# 网络\n",[29,121751,121752,121755],{"class":31,"line":1935},[29,121753,121754],{"class":35},"ping",[29,121756,121757],{"class":367},"      # 测试网络连通性\n",[29,121759,121760,121762],{"class":31,"line":1940},[29,121761,26978],{"class":35},[29,121763,121764],{"class":367},"      # 发送 HTTP 请求\n",[29,121766,121767,121769],{"class":31,"line":1954},[29,121768,120418],{"class":35},[29,121770,121771],{"class":367},"      # 下载文件\n",[29,121773,121774,121777],{"class":31,"line":1959},[29,121775,121776],{"class":35},"ssh",[29,121778,121779],{"class":367},"       # 远程登录\n",[29,121781,121782,121785],{"class":31,"line":2752},[29,121783,121784],{"class":35},"scp",[29,121786,121787],{"class":367},"       # 远程文件传输\n",[29,121789,121790],{"class":31,"line":2766},[29,121791,2575],{"emptyLinePlaceholder":233},[29,121793,121794],{"class":31,"line":2774},[29,121795,121796],{"class":367},"# 包管理（Debian\u002FUbuntu）\n",[29,121798,121799,121801,121803],{"class":31,"line":2779},[29,121800,117497],{"class":35},[29,121802,117476],{"class":103},[29,121804,121805],{"class":367},"   # 更新软件源\n",[29,121807,121808,121810,121812],{"class":31,"line":2785},[29,121809,117497],{"class":35},[29,121811,24007],{"class":103},[29,121813,121814],{"class":367},"  # 安装软件包\n",[29,121816,121817,121819,121821],{"class":31,"line":2791},[29,121818,117497],{"class":35},[29,121820,26208],{"class":103},[29,121822,121823],{"class":367},"   # 卸载软件包\n",[259,121825,121826],{"start":43},[178,121827,121828],{},"KDE Dolphin 以root打开",[171,121830,121831],{},"kde5",[19,121833,121835],{"className":117425,"code":121834,"language":117427,"meta":24,"style":24},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[26,121836,121837],{"__ignoreMap":24},[29,121838,121839,121842,121845,121848,121850,121852,121855,121858,121860,121863,121865],{"class":31,"line":32},[29,121840,121841],{"class":35},"pkexec",[29,121843,121844],{"class":103}," env",[29,121846,121847],{"class":103}," DISPLAY=",[29,121849,28272],{"class":309},[29,121851,28330],{"class":103},[29,121853,121854],{"class":309},"$XAUTHORITY ",[29,121856,121857],{"class":103},"KDE_SESSION_VERSION=",[29,121859,627],{"class":39},[29,121861,121862],{"class":103}," KDE_FULL_SESSION=",[29,121864,1538],{"class":39},[29,121866,121867],{"class":103}," dolphin\n",[171,121869,121870],{},"kde6",[19,121872,121874],{"className":117425,"code":121873,"language":117427,"meta":24,"style":24},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[26,121875,121876],{"__ignoreMap":24},[29,121877,121878,121880,121882,121884,121886,121888,121890,121892,121894,121896,121898],{"class":31,"line":32},[29,121879,121841],{"class":35},[29,121881,121844],{"class":103},[29,121883,121847],{"class":103},[29,121885,28272],{"class":309},[29,121887,28330],{"class":103},[29,121889,121854],{"class":309},[29,121891,121857],{"class":103},[29,121893,652],{"class":39},[29,121895,121862],{"class":103},[29,121897,1538],{"class":39},[29,121899,121867],{"class":103},[223,121901,121902],{},"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":24,"searchDepth":43,"depth":43,"links":121904},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121564,"description":230},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121911,"title":121912,"body":121913,"description":230,"extension":231,"meta":121927,"navigation":233,"path":121928,"seo":121929,"stem":121930,"__hash__":121931},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121914,"toc":121925},[121915,121918],[10,121916,121912],{"id":121917},"_5-各种环境配置",[171,121919,121920],{},[546,121921,121924],{"href":121922,"rel":121923},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24038],"电控组环境搭建大全",{"title":24,"searchDepth":43,"depth":43,"links":121926},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121912,"description":230},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121933,"title":121934,"body":121935,"description":230,"extension":231,"meta":122283,"navigation":233,"path":122284,"seo":122285,"stem":122286,"__hash__":122287},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121936,"toc":122275},[121937,121940,121944,121948,121952,121957,121964,121968,122261,122265,122272],[10,121938,121934],{"id":121939},"_6-拓展功能",[14,121941,121943],{"id":121942},"_61-wine","6.1 Wine",[14,121945,121947],{"id":121946},"_62-android","6.2 Android",[275,121949,121951],{"id":121950},"_621-i卡a卡","6.2.1 I卡、A卡",[259,121953,121954],{},[178,121955,121956],{},"Wayland-Waydroid(体验超级好)",[171,121958,121959,121960],{},"Waydroid 官网与安装指南：",[546,121961,121962],{"href":121962,"rel":121963},"https:\u002F\u002Fwaydro.id\u002F",[24038],[275,121965,121967],{"id":121966},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[259,121969,121970],{},[178,121971,121972,121973,121975,121976,121980,121982,121985,121990,122187],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53845,121974],{},"BlissOS 官网下载：",[546,121977,121978],{"href":121978,"rel":121979},"https:\u002F\u002Fblissos.org\u002F",[24038],[53845,121981],{},[1638,121983],{"alt":24,"src":121984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[259,121986,121987],{"start":51},[178,121988,121989],{},"比较推荐的配置",[19,121991,121993],{"className":117425,"code":121992,"language":117427,"meta":24,"style":24},"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",[26,121994,121995,122002,122012,122022,122032,122044,122054,122061,122071,122080,122089,122099,122109,122118,122128,122138,122150,122160,122169,122179],{"__ignoreMap":24},[29,121996,121997,122000],{"class":31,"line":32},[29,121998,121999],{"class":35},"qemu-system-x86_64",[29,122001,40],{"class":39},[29,122003,122004,122007,122010],{"class":31,"line":43},[29,122005,122006],{"class":39},"        -M",[29,122008,122009],{"class":103}," q35,vmport=off",[29,122011,40],{"class":39},[29,122013,122014,122017,122020],{"class":31,"line":51},[29,122015,122016],{"class":39},"        -accel",[29,122018,122019],{"class":103}," kvm",[29,122021,40],{"class":39},[29,122023,122024,122027,122030],{"class":31,"line":59},[29,122025,122026],{"class":39},"        -cpu",[29,122028,122029],{"class":103}," qemu64,+sse3,+sse4.2",[29,122031,40],{"class":39},[29,122033,122034,122037,122040,122042],{"class":31,"line":67},[29,122035,122036],{"class":39},"        -smp",[29,122038,122039],{"class":103}," 8,cores=",[29,122041,601],{"class":39},[29,122043,40],{"class":39},[29,122045,122046,122049,122052],{"class":31,"line":75},[29,122047,122048],{"class":39},"        -m",[29,122050,122051],{"class":103}," 6G",[29,122053,40],{"class":39},[29,122055,122056,122059],{"class":31,"line":83},[29,122057,122058],{"class":39},"        -usb",[29,122060,40],{"class":39},[29,122062,122063,122066,122069],{"class":31,"line":158},[29,122064,122065],{"class":39},"        -device",[29,122067,122068],{"class":103}," virtio-tablet",[29,122070,40],{"class":39},[29,122072,122073,122075,122078],{"class":31,"line":166},[29,122074,122065],{"class":39},[29,122076,122077],{"class":103}," virtio-keyboard",[29,122079,40],{"class":39},[29,122081,122082,122084,122087],{"class":31,"line":1505},[29,122083,122065],{"class":39},[29,122085,122086],{"class":103}," usb-tablet",[29,122088,40],{"class":39},[29,122090,122091,122094,122097],{"class":31,"line":1788},[29,122092,122093],{"class":39},"        -bios",[29,122095,122096],{"class":103}," OVMF-pure-efi64.fd",[29,122098,40],{"class":39},[29,122100,122101,122104,122107],{"class":31,"line":1793},[29,122102,122103],{"class":39},"        -net",[29,122105,122106],{"class":103}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[29,122108,40],{"class":39},[29,122110,122111,122113,122116],{"class":31,"line":1799},[29,122112,122103],{"class":39},[29,122114,122115],{"class":103}," nic,model=virtio",[29,122117,40],{"class":39},[29,122119,122120,122123,122126],{"class":31,"line":1804},[29,122121,122122],{"class":39},"        -audio",[29,122124,122125],{"class":103}," sdl,model=hda",[29,122127,40],{"class":39},[29,122129,122130,122133,122136],{"class":31,"line":1818},[29,122131,122132],{"class":39},"        -display",[29,122134,122135],{"class":103}," sdl,gl=on,show-cursor=on",[29,122137,40],{"class":39},[29,122139,122140,122142,122145,122148],{"class":31,"line":1823},[29,122141,122065],{"class":39},[29,122143,122144],{"class":103}," virtio-vga-gl,xres=1920,yres=",[29,122146,122147],{"class":39},"1080",[29,122149,40],{"class":39},[29,122151,122152,122155,122158],{"class":31,"line":1829},[29,122153,122154],{"class":39},"        -drive",[29,122156,122157],{"class":103}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[29,122159,40],{"class":39},[29,122161,122162,122164,122167],{"class":31,"line":1850},[29,122163,122154],{"class":39},[29,122165,122166],{"class":103}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[29,122168,40],{"class":39},[29,122170,122171,122174,122177],{"class":31,"line":1855},[29,122172,122173],{"class":39},"        -monitor",[29,122175,122176],{"class":103}," stdio",[29,122178,40],{"class":39},[29,122180,122181,122184],{"class":31,"line":1869},[29,122182,122183],{"class":39},"        -serial",[29,122185,122186],{"class":103}," none\n",[259,122188,122189],{"start":67},[178,122190,122191,122192],{},"常用操作：",[259,122193,122194,122197,122253],{},[178,122195,122196],{},"全屏：Ctrl+Alt+F",[178,122198,122199,122200,122205],{},"adb调试",[259,122201,122202],{},[178,122203,122204],{},"使Linux与Android用ADB连接。",[19,122206,122208],{"className":117425,"code":122207,"language":117427,"meta":24,"style":24},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[26,122209,122210,122215,122226,122231,122243,122248],{"__ignoreMap":24},[29,122211,122212],{"class":31,"line":32},[29,122213,122214],{"class":367},"# 连接安卓\n",[29,122216,122217,122220,122223],{"class":31,"line":43},[29,122218,122219],{"class":35},"adb",[29,122221,122222],{"class":103}," connect",[29,122224,122225],{"class":39}," 127.0.0.1\n",[29,122227,122228],{"class":31,"line":51},[29,122229,122230],{"class":367},"# 打开shell\n",[29,122232,122233,122235,122237,122240],{"class":31,"line":59},[29,122234,122219],{"class":35},[29,122236,27012],{"class":39},[29,122238,122239],{"class":103}," 127.0.0.1:5555",[29,122241,122242],{"class":103}," shell\n",[29,122244,122245],{"class":31,"line":67},[29,122246,122247],{"class":367},"# 使用root权限\n",[29,122249,122250],{"class":31,"line":75},[29,122251,122252],{"class":35},"su\n",[178,122254,122255,122256],{},"中文输入法",[259,122257,122258],{},[178,122259,122260],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122262,122264],{"id":122263},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[171,122266,122267,122268],{},"rEFInd 官网与文档：",[546,122269,122270],{"href":122270,"rel":122271},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24038],[223,122273,122274],{},"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":24,"searchDepth":43,"depth":43,"links":122276},[122277,122278,122282],{"id":121942,"depth":43,"text":121943},{"id":121946,"depth":43,"text":121947,"children":122279},[122280,122281],{"id":121950,"depth":51,"text":121951},{"id":121966,"depth":51,"text":121967},{"id":122263,"depth":43,"text":122264},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121934,"description":230},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122289,"title":122290,"body":122291,"description":230,"extension":231,"meta":125590,"navigation":233,"path":125591,"seo":125592,"stem":125593,"__hash__":125594},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122292,"toc":125564},[122293,122296,122300,122303,122310,122560,122563,122635,122638,122642,122646,122651,122654,122657,122660,122665,122668,122671,122674,122679,122682,122687,122690,122693,122698,122701,122706,122709,122713,122717,122720,122725,122728,122742,122745,122748,122757,122760,122769,122772,122775,122784,122787,122796,122799,122802,122811,122814,122817,122832,122835,122838,122847,122852,122855,122858,122867,122870,122879,122882,122891,122894,122903,122908,122911,122919,122924,122927,122936,122939,122947,122952,122955,122964,122967,122970,122974,122977,122982,122985,122990,123004,123009,123014,123025,123030,123036,123041,123056,123061,123064,123069,123074,123079,123087,123092,123099,123104,123115,123120,123123,123127,123130,123133,123138,123141,123160,123165,123168,123177,123182,123185,123207,123210,123240,123243,123248,123251,123265,123270,123289,123292,123295,123300,123312,123317,123322,123325,123330,123333,123348,123351,123356,123361,123365,123370,123410,123413,123417,123423,123429,123434,123437,123444,123449,123456,123459,123462,123469,123483,123486,123546,123549,123563,123575,123578,123581,123584,123648,123651,123654,123657,123677,123680,123685,123692,123696,123699,123703,123708,123713,123717,123720,123723,123765,123770,123773,123795,123810,123812,123817,123829,123889,123891,123893,123947,123949,123951,123957,123962,123965,123970,123974,123977,124039,124044,124047,124049,124053,124065,124147,124149,124151,124205,124211,124213,124217,124222,124224,124229,124233,124253,124288,124292,124295,124298,124301,124308,124311,124323,124326,124341,124344,124363,124411,124414,124431,124434,124448,124453,124456,124465,124480,124492,124530,124535,124544,124549,124554,124580,124589,124593,124597,124602,124605,124609,124613,124618,124621,124626,124629,124634,124637,124642,124645,124649,124654,124657,124662,124665,124669,124674,124677,124682,124685,124690,124693,124697,124702,124705,124710,124713,124718,124721,124725,124730,124733,124738,124741,124746,124749,124754,124757,124762,124765,124770,124773,124777,124782,124785,124790,124797,124801,124806,124809,124814,124817,124821,124826,124829,124832,124835,124838,124841,124845,124848,124858,124863,124868,124890,124895,124900,124907,124911,124916,124919,124922,124927,124930,124933,124936,124939,124942,124945,124948,124951,124954,124957,124960,124963,124968,124973,124978,124983,124988,124993,124998,125001,125005,125008,125012,125017,125022,125027,125032,125036,125042,125050,125055,125058,125063,125078,125081,125086,125120,125135,125138,125193,125219,125231,125234,125243,125246,125261,125266,125269,125275,125280,125283,125288,125291,125296,125301,125308,125311,125326,125329,125364,125369,125377,125415,125418,125421,125426,125429,125434,125445,125479,125484,125487,125496,125501,125507,125510,125515,125524,125529,125532,125535,125540,125548,125551,125556,125561],[10,122294,122290],{"id":122295},"_7-其他操作",[14,122297,122299],{"id":122298},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[171,122301,122302],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[171,122304,122305,122306,122309],{},"进入工控机的硬盘目录，进入",[26,122307,122308],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[19,122311,122315],{"className":122312,"code":122313,"language":122314,"meta":24,"style":24},"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",[26,122316,122317,122325,122336,122343,122350,122362,122369,122381,122392,122403,122410,122417,122424,122436,122448,122455,122467,122479,122486,122498,122510,122522,122533,122540,122551],{"__ignoreMap":24},[29,122318,122319,122322],{"class":31,"line":32},[29,122320,122321],{"class":51429},"network",[29,122323,122324],{"class":309},": \n",[29,122326,122327,122330,122332,122334],{"class":31,"line":43},[29,122328,122329],{"class":51429},"  version",[29,122331,51566],{"class":309},[29,122333,386],{"class":39},[29,122335,2849],{"class":309},[29,122337,122338,122341],{"class":31,"line":51},[29,122339,122340],{"class":51429},"  wifis",[29,122342,122324],{"class":309},[29,122344,122345,122348],{"class":31,"line":59},[29,122346,122347],{"class":51429},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[29,122349,122324],{"class":309},[29,122351,122352,122355,122357,122360],{"class":31,"line":67},[29,122353,122354],{"class":51429},"      renderer",[29,122356,51566],{"class":309},[29,122358,122359],{"class":103},"NetworkManager",[29,122361,2849],{"class":309},[29,122363,122364,122367],{"class":31,"line":75},[29,122365,122366],{"class":51429},"      match",[29,122368,122324],{"class":309},[29,122370,122371,122374,122376,122379],{"class":31,"line":83},[29,122372,122373],{"class":51429},"        name",[29,122375,51566],{"class":309},[29,122377,122378],{"class":103},"\"wlan0\"",[29,122380,2849],{"class":309},[29,122382,122383,122386,122388,122390],{"class":31,"line":158},[29,122384,122385],{"class":51429},"      dhcp4",[29,122387,51566],{"class":309},[29,122389,1538],{"class":39},[29,122391,2849],{"class":309},[29,122393,122394,122397,122399,122401],{"class":31,"line":166},[29,122395,122396],{"class":51429},"      dhcp6",[29,122398,51566],{"class":309},[29,122400,1538],{"class":39},[29,122402,2849],{"class":309},[29,122404,122405,122408],{"class":31,"line":1505},[29,122406,122407],{"class":51429},"      access-points",[29,122409,122324],{"class":309},[29,122411,122412,122415],{"class":31,"line":1788},[29,122413,122414],{"class":103},"        \"EMIS_Vinci_Robocon_5G\"",[29,122416,122324],{"class":309},[29,122418,122419,122422],{"class":31,"line":1793},[29,122420,122421],{"class":51429},"          auth",[29,122423,122324],{"class":309},[29,122425,122426,122429,122431,122434],{"class":31,"line":1799},[29,122427,122428],{"class":51429},"            key-management",[29,122430,51566],{"class":309},[29,122432,122433],{"class":103},"\"psk\"",[29,122435,2849],{"class":309},[29,122437,122438,122441,122443,122446],{"class":31,"line":1804},[29,122439,122440],{"class":51429},"            password",[29,122442,51566],{"class":309},[29,122444,122445],{"class":103},"\"vinci666\"",[29,122447,2849],{"class":309},[29,122449,122450,122453],{"class":31,"line":1818},[29,122451,122452],{"class":51429},"          networkmanager",[29,122454,122324],{"class":309},[29,122456,122457,122460,122462,122465],{"class":31,"line":1823},[29,122458,122459],{"class":51429},"            uuid",[29,122461,51566],{"class":309},[29,122463,122464],{"class":103},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[29,122466,2849],{"class":309},[29,122468,122469,122472,122474,122477],{"class":31,"line":1829},[29,122470,122471],{"class":51429},"            name",[29,122473,51566],{"class":309},[29,122475,122476],{"class":103},"\"EMIS_Vinci_Robocon_5G\"",[29,122478,2849],{"class":309},[29,122480,122481,122484],{"class":31,"line":1850},[29,122482,122483],{"class":51429},"            passthrough",[29,122485,122324],{"class":309},[29,122487,122488,122491,122493,122496],{"class":31,"line":1855},[29,122489,122490],{"class":51429},"              wifi-security.auth-alg",[29,122492,51566],{"class":309},[29,122494,122495],{"class":103},"\"open\"",[29,122497,2849],{"class":309},[29,122499,122500,122503,122505,122508],{"class":31,"line":1869},[29,122501,122502],{"class":51429},"              ipv6.addr-gen-mode",[29,122504,51566],{"class":309},[29,122506,122507],{"class":103},"\"default\"",[29,122509,2849],{"class":309},[29,122511,122512,122515,122517,122520],{"class":31,"line":1874},[29,122513,122514],{"class":51429},"              ipv6.ip6-privacy",[29,122516,51566],{"class":309},[29,122518,122519],{"class":103},"\"-1\"",[29,122521,2849],{"class":309},[29,122523,122524,122527,122529,122531],{"class":31,"line":1903},[29,122525,122526],{"class":51429},"              proxy._",[29,122528,51566],{"class":309},[29,122530,7827],{"class":103},[29,122532,2849],{"class":309},[29,122534,122535,122538],{"class":31,"line":1908},[29,122536,122537],{"class":51429},"      networkmanager",[29,122539,122324],{"class":309},[29,122541,122542,122545,122547,122549],{"class":31,"line":1925},[29,122543,122544],{"class":51429},"        uuid",[29,122546,51566],{"class":309},[29,122548,122464],{"class":103},[29,122550,2849],{"class":309},[29,122552,122553,122555,122557],{"class":31,"line":1930},[29,122554,122373],{"class":51429},[29,122556,51566],{"class":309},[29,122558,122559],{"class":103},"\"EMIS_Vinci_Robocon_5G\"\n",[171,122561,122562],{},"将其改为新wifi的名和密码：",[19,122564,122566],{"className":122312,"code":122565,"language":122314,"meta":24,"style":24},"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",[26,122567,122568,122574,122583,122589,122596,122605,122613,122619,122625],{"__ignoreMap":24},[29,122569,122570,122572],{"class":31,"line":32},[29,122571,122321],{"class":51429},[29,122573,3914],{"class":309},[29,122575,122576,122578,122580],{"class":31,"line":43},[29,122577,122329],{"class":51429},[29,122579,51566],{"class":309},[29,122581,122582],{"class":39},"2\n",[29,122584,122585,122587],{"class":31,"line":51},[29,122586,122340],{"class":51429},[29,122588,3914],{"class":309},[29,122590,122591,122594],{"class":31,"line":59},[29,122592,122593],{"class":51429},"    wlan0",[29,122595,3914],{"class":309},[29,122597,122598,122600,122602],{"class":31,"line":67},[29,122599,122385],{"class":51429},[29,122601,51566],{"class":309},[29,122603,122604],{"class":39},"true\n",[29,122606,122607,122609,122611],{"class":31,"line":75},[29,122608,122396],{"class":51429},[29,122610,51566],{"class":309},[29,122612,122604],{"class":39},[29,122614,122615,122617],{"class":31,"line":83},[29,122616,122407],{"class":51429},[29,122618,3914],{"class":309},[29,122620,122621,122623],{"class":31,"line":158},[29,122622,122414],{"class":103},[29,122624,3914],{"class":309},[29,122626,122627,122630,122632],{"class":31,"line":166},[29,122628,122629],{"class":51429},"          password",[29,122631,51566],{"class":309},[29,122633,122634],{"class":103},"\"vinci666\"\n",[171,122636,122637],{},"工控机开机即可连上网。",[14,122639,122641],{"id":122640},"_72-ssh远程开发","7.2 SSH远程开发",[275,122643,122645],{"id":122644},"_721-环境准备","7.2.1 环境准备",[171,122647,122648],{},[457,122649,122650],{},"1.硬件准备",[171,122652,122653],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[171,122655,122656],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[171,122658,122659],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[171,122661,122662],{},[457,122663,122664],{},"2.设置固定IP",[171,122666,122667],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[171,122669,122670],{},"1.进入设置界面",[171,122672,122673],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[171,122675,122676],{},[1638,122677],{"alt":24,"src":122678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[171,122680,122681],{},"2.配置所连接的网络",[171,122683,122684],{},[1638,122685],{"alt":24,"src":122686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[171,122688,122689],{},"3.设置固定IP",[171,122691,122692],{},"查看当前IP地址。",[171,122694,122695],{},[1638,122696],{"alt":24,"src":122697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[171,122699,122700],{},"设置固定IP。",[171,122702,122703],{},[1638,122704],{"alt":24,"src":122705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[171,122707,122708],{},"至此，IP配置完毕。",[275,122710,122712],{"id":122711},"_722-环境搭建","7.2.2 环境搭建",[171,122714,122715],{},[457,122716,25882],{},[171,122718,122719],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[171,122721,122722],{},[457,122723,122724],{},"实现",[171,122726,122727],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[259,122729,122730,122733,122736,122739],{},[178,122731,122732],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[178,122734,122735],{},"远程主机启动SSH服务；",[178,122737,122738],{},"本地主机登陆远程主机；",[178,122740,122741],{},"实现数据传输。",[171,122743,122744],{},"1.安装SSH客户端与服务端",[171,122746,122747],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[19,122749,122751],{"className":120945,"code":122750,"language":120947,"meta":120948,"style":24}," sudo apt install openssh-server\n",[26,122752,122753],{"__ignoreMap":24},[29,122754,122755],{"class":31,"line":32},[29,122756,122750],{},[171,122758,122759],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[19,122761,122763],{"className":120945,"code":122762,"language":120947,"meta":120948,"style":24},"sudo apt install openssh-client\n",[26,122764,122765],{"__ignoreMap":24},[29,122766,122767],{"class":31,"line":32},[29,122768,122762],{},[171,122770,122771],{},"2.远程主机启动SSH服务",[171,122773,122774],{},"远程主机启动 ssh 服务命令如下：",[19,122776,122778],{"className":120945,"code":122777,"language":120947,"meta":120948,"style":24},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[26,122779,122780],{"__ignoreMap":24},[29,122781,122782],{"class":31,"line":32},[29,122783,122777],{},[171,122785,122786],{},"启动后可使用如下命令查看服务是否正常运行：",[19,122788,122790],{"className":120945,"code":122789,"language":120947,"meta":120948,"style":24},"ps -e | grep ssh\n",[26,122791,122792],{"__ignoreMap":24},[29,122793,122794],{"class":31,"line":32},[29,122795,122789],{},[171,122797,122798],{},"如果启动成功，会包含 sshd 程序。",[171,122800,122801],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[19,122803,122805],{"className":120945,"code":122804,"language":120947,"meta":120948,"style":24},"sudo systemctl enable ssh\n",[26,122806,122807],{"__ignoreMap":24},[29,122808,122809],{"class":31,"line":32},[29,122810,122804],{},[171,122812,122813],{},"3.本地远程登录",[171,122815,122816],{},"登录远程主机可以调用如下命令:",[19,122818,122820],{"className":117425,"code":122819,"language":117427,"meta":24,"style":24},"ssh -X 用户名@ip地址\n",[26,122821,122822],{"__ignoreMap":24},[29,122823,122824,122826,122829],{"class":31,"line":32},[29,122825,121776],{"class":35},[29,122827,122828],{"class":39}," -X",[29,122830,122831],{"class":103}," 用户名@ip地址\n",[171,122833,122834],{},"然后根据提示，录入登陆密码，即可成功登录。",[171,122836,122837],{},"如果退出，可以调用exit命令：",[19,122839,122841],{"className":120945,"code":122840,"language":120947,"meta":120948,"style":24},"exit\n",[26,122842,122843],{"__ignoreMap":24},[29,122844,122845],{"class":31,"line":32},[29,122846,122840],{},[171,122848,122849],{},[457,122850,122851],{},"4.实现数据传输",[171,122853,122854],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[171,122856,122857],{},"上传文件指令格式如下：",[19,122859,122861],{"className":120945,"code":122860,"language":120947,"meta":120948,"style":24},"scp 本地文件路径 账号@ip:路径\n",[26,122862,122863],{"__ignoreMap":24},[29,122864,122865],{"class":31,"line":32},[29,122866,122860],{},[171,122868,122869],{},"上传文件夹指令格式如下：",[19,122871,122873],{"className":120945,"code":122872,"language":120947,"meta":120948,"style":24},"scp -r 本地文件夹路径 账号@ip:路径\n",[26,122874,122875],{"__ignoreMap":24},[29,122876,122877],{"class":31,"line":32},[29,122878,122872],{},[171,122880,122881],{},"下载文件指令格式如下：",[19,122883,122885],{"className":120945,"code":122884,"language":120947,"meta":120948,"style":24},"scp 账号@ip:路径 本地文件夹路径\n",[26,122886,122887],{"__ignoreMap":24},[29,122888,122889],{"class":31,"line":32},[29,122890,122884],{},[171,122892,122893],{},"下载文件夹指令格式如下：",[19,122895,122897],{"className":120945,"code":122896,"language":120947,"meta":120948,"style":24},"scp -r 账号@ip:路径 本地文件夹路径\n",[26,122898,122899],{"__ignoreMap":24},[29,122900,122901],{"class":31,"line":32},[29,122902,122896],{},[171,122904,122905],{},[457,122906,122907],{},"优化",[171,122909,122910],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[259,122912,122913,122916],{},[178,122914,122915],{},"本地生成密钥对；",[178,122917,122918],{},"将公钥上传至远程主机。",[171,122920,122921],{},[457,122922,122923],{},"1.生成密钥对",[171,122925,122926],{},"本地客户端生成公私钥：（一路回车默认即可）",[19,122928,122930],{"className":120945,"code":122929,"language":120947,"meta":120948,"style":24},"ssh-keygen\n",[26,122931,122932],{"__ignoreMap":24},[29,122933,122934],{"class":31,"line":32},[29,122935,122929],{},[171,122937,122938],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[259,122940,122941,122944],{},[178,122942,122943],{},"id_rsa （私钥）；",[178,122945,122946],{},"id_rsa.pub (公钥)。",[171,122948,122949],{},[457,122950,122951],{},"2.公钥上传",[171,122953,122954],{},"上传指令如下：",[19,122956,122958],{"className":120945,"code":122957,"language":120947,"meta":120948,"style":24},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[26,122959,122960],{"__ignoreMap":24},[29,122961,122962],{"class":31,"line":32},[29,122963,122957],{},[171,122965,122966],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[171,122968,122969],{},"以后再远程登录就无需录入密码了。",[275,122971,122973],{"id":122972},"_723-使用vscode优化","7.2.3 使用VScode优化",[171,122975,122976],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[171,122978,122979],{},[457,122980,122981],{},"1.准备工作",[171,122983,122984],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[171,122986,122987],{},[457,122988,122989],{},"2.为VScode安装远程开发插件",[171,122991,122992,122993,122996,122997,123000,123001,28514],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[26,122994,122995],{},"扩展：商店","的搜索栏输入",[26,122998,122999],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[26,123002,123003],{},"安装",[171,123005,123006],{},[1638,123007],{"alt":24,"src":123008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[171,123010,123011],{},[457,123012,123013],{},"3.配置远程连接",[171,123015,123016,123017,123020,123021,123024],{},"步骤1：使用快捷键",[26,123018,123019],{},"ctrl + shift + p","打开命令输入窗口，并输入",[26,123022,123023],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[171,123026,123027],{},[1638,123028],{"alt":24,"src":123029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[171,123031,123032,123033,28514],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[26,123034,123035],{},"Add New SSH Host",[171,123037,123038],{},[1638,123039],{"alt":24,"src":123040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[171,123042,123043,123044,123047,123048,123051,123052,123055],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[26,123045,123046],{},"ssh +X ubuntu@192.168.43.164","，其中，",[26,123049,123050],{},"ubuntu","需要替换为你的登录用户名，",[26,123053,123054],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[171,123057,123058],{},[1638,123059],{"alt":24,"src":123060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[171,123062,123063],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[171,123065,123066],{},[1638,123067],{"alt":24,"src":123068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[171,123070,123071],{},[1638,123072],{"alt":24,"src":123073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[171,123075,123076],{},[457,123077,123078],{},"4.使用",[171,123080,123081,123082,123020,123084,123086],{},"步骤1：继续使用快捷键",[26,123083,123019],{},[26,123085,123023],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[171,123088,123089],{},[1638,123090],{"alt":24,"src":123091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[171,123093,123094,123095,123098],{},"或者，也可以点击侧边栏的",[26,123096,123097],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[171,123100,123101],{},[1638,123102],{"alt":24,"src":123103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[171,123105,123106,123107,123110,123111,123114],{},"步骤2：选择菜单栏的",[26,123108,123109],{},"文件","下的",[26,123112,123113],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[171,123116,123117],{},[1638,123118],{"alt":24,"src":123119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[171,123121,123122],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123124,123126],{"id":123125},"_73-远程桌面","7.3 远程桌面",[171,123128,123129],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[171,123131,123132],{},"我们选择使用VNC来看。",[259,123134,123135],{},[178,123136,123137],{},"安装VNC服务器：",[171,123139,123140],{},"这里以TigerVNC为例进行安装：",[19,123142,123144],{"className":117425,"code":123143,"language":117427,"meta":24,"style":24},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[26,123145,123146],{"__ignoreMap":24},[29,123147,123148,123150,123152,123154,123157],{"class":31,"line":32},[29,123149,24749],{"class":35},[29,123151,117446],{"class":103},[29,123153,24007],{"class":103},[29,123155,123156],{"class":103}," tigervnc-standalone-server",[29,123158,123159],{"class":103}," tigervnc-common\n",[259,123161,123162],{"start":43},[178,123163,123164],{},"设置VNC密码：",[171,123166,123167],{},"为VNC用户设置密码，运行以下命令：",[19,123169,123171],{"className":117425,"code":123170,"language":117427,"meta":24,"style":24},"vncpasswd\n",[26,123172,123173],{"__ignoreMap":24},[29,123174,123175],{"class":31,"line":32},[29,123176,123170],{"class":35},[259,123178,123179],{"start":51},[178,123180,123181],{},"配置VNC启动脚本:",[171,123183,123184],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[19,123186,123188],{"className":117425,"code":123187,"language":117427,"meta":24,"style":24},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[26,123189,123190,123199],{"__ignoreMap":24},[29,123191,123192,123194,123196],{"class":31,"line":32},[29,123193,101395],{"class":35},[29,123195,29345],{"class":39},[29,123197,123198],{"class":103}," ~\u002F.vnc\n",[29,123200,123201,123204],{"class":31,"line":43},[29,123202,123203],{"class":35},"nano",[29,123205,123206],{"class":103}," ~\u002F.vnc\u002Fxstartup\n",[171,123208,123209],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[19,123211,123213],{"className":117425,"code":123212,"language":117427,"meta":24,"style":24},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[26,123214,123215,123220,123228,123235],{"__ignoreMap":24},[29,123216,123217],{"class":31,"line":32},[29,123218,123219],{"class":367},"#!\u002Fbin\u002Fsh\n",[29,123221,123222,123225],{"class":31,"line":43},[29,123223,123224],{"class":39},"unset",[29,123226,123227],{"class":103}," SESSION_MANAGER\n",[29,123229,123230,123232],{"class":31,"line":51},[29,123231,123224],{"class":39},[29,123233,123234],{"class":103}," DBUS_SESSION_BUS_ADDRESS\n",[29,123236,123237],{"class":31,"line":59},[29,123238,123239],{"class":35},"gnome-session\n",[171,123241,123242],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[259,123244,123245],{"start":59},[178,123246,123247],{},"给予执行权限：",[171,123249,123250],{},"为xstartup文件设置执行权限：",[19,123252,123254],{"className":117425,"code":123253,"language":117427,"meta":24,"style":24},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[26,123255,123256],{"__ignoreMap":24},[29,123257,123258,123260,123263],{"class":31,"line":32},[29,123259,24784],{"class":35},[29,123261,123262],{"class":103}," +x",[29,123264,123206],{"class":103},[259,123266,123267],{"start":67},[178,123268,123269],{},"启动VNC服务器：",[19,123271,123273],{"className":117425,"code":123272,"language":117427,"meta":24,"style":24},"vncserver -geometry 1920x1080 -localhost=0\n",[26,123274,123275],{"__ignoreMap":24},[29,123276,123277,123280,123283,123286],{"class":31,"line":32},[29,123278,123279],{"class":35},"vncserver",[29,123281,123282],{"class":39}," -geometry",[29,123284,123285],{"class":103}," 1920x1080",[29,123287,123288],{"class":39}," -localhost=0\n",[171,123290,123291],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[171,123293,123294],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[259,123296,123297],{"start":75},[178,123298,123299],{},"查看已开启的VNC服务器：",[19,123301,123303],{"className":117425,"code":123302,"language":117427,"meta":24,"style":24},"vncserver -list\n",[26,123304,123305],{"__ignoreMap":24},[29,123306,123307,123309],{"class":31,"line":32},[29,123308,123279],{"class":35},[29,123310,123311],{"class":39}," -list\n",[171,123313,123314],{},[1638,123315],{"alt":24,"src":123316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[259,123318,123319],{"start":83},[178,123320,123321],{},"连接到VNC服务器：",[171,123323,123324],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[259,123326,123327],{"start":158},[178,123328,123329],{},"停止VNC服务器：",[171,123331,123332],{},"如果需要停止VNC服务器，可以使用以下命令：",[19,123334,123336],{"className":117425,"code":123335,"language":117427,"meta":24,"style":24},"vncserver -kill :1\n",[26,123337,123338],{"__ignoreMap":24},[29,123339,123340,123342,123345],{"class":31,"line":32},[29,123341,123279],{"class":35},[29,123343,123344],{"class":39}," -kill",[29,123346,123347],{"class":103}," :1\n",[171,123349,123350],{},"将:1替换为你实际使用的显示编号。",[171,123352,123353],{},[1638,123354],{"alt":24,"src":123355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[171,123357,123358],{},[1638,123359],{"alt":24,"src":123360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123362,123364],{"id":123363},"_74-usb端口设置","7.4 USB端口设置",[171,123366,123367],{},[457,123368,123369],{},"首先先配置好权限",[19,123371,123373],{"className":117425,"code":123372,"language":117427,"meta":24,"style":24},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[26,123374,123375,123380,123393,123400,123405],{"__ignoreMap":24},[29,123376,123377],{"class":31,"line":32},[29,123378,123379],{"class":367},"# 将用户权限提高\n",[29,123381,123382,123384,123386,123388,123391],{"class":31,"line":43},[29,123383,24749],{"class":35},[29,123385,26703],{"class":103},[29,123387,26706],{"class":39},[29,123389,123390],{"class":103}," dialout",[29,123392,26711],{"class":309},[29,123394,123395,123397],{"class":31,"line":51},[29,123396,26730],{"class":35},[29,123398,123399],{"class":103}," dialout\n",[29,123401,123402],{"class":31,"line":59},[29,123403,123404],{"class":367},"# 查看下面命令是否输出dialout（若输出才正常）\n",[29,123406,123407],{"class":31,"line":67},[29,123408,123409],{"class":35},"groups\n",[171,123411,123412],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[275,123414,123416],{"id":123415},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[171,123418,123419,123422],{},[457,123420,123421],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[171,123424,123425,123428],{},[457,123426,123427],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[171,123430,123431],{},[457,123432,123433],{},"流程如下：",[171,123435,123436],{},"（1）.查找设备idVendor和idProduct",[171,123438,123439,123440,123443],{},"接入两个USB设备，在终端调用指令",[26,123441,123442],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[171,123445,123446],{},[1638,123447],{"alt":24,"src":123448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[171,123450,123451,123452,123455],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[26,123453,123454],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[171,123457,123458],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[171,123460,123461],{},"（2）.编写映射规则",[171,123463,123464,123465,123468],{},"在",[26,123466,123467],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[19,123470,123472],{"className":117425,"code":123471,"language":117427,"meta":24,"style":24},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[26,123473,123474],{"__ignoreMap":24},[29,123475,123476,123478,123480],{"class":31,"line":32},[29,123477,24749],{"class":35},[29,123479,118712],{"class":103},[29,123481,123482],{"class":103}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[171,123484,123485],{},"输入如下内容：",[19,123487,123489],{"className":117425,"code":123488,"language":117427,"meta":24,"style":24},"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",[26,123490,123491,123521],{"__ignoreMap":24},[29,123492,123493,123496,123498,123501,123504,123507,123510,123512,123515,123518],{"class":31,"line":32},[29,123494,123495],{"class":309},"KERNEL",[29,123497,355],{"class":305},[29,123499,123500],{"class":103},"=\"ttyUSB*\",",[29,123502,123503],{"class":35}," ATTRS",[29,123505,123506],{"class":103},"{idVendor}==",[29,123508,123509],{"class":35},"\"10c4\"",[29,123511,686],{"class":35},[29,123513,123514],{"class":103}," ATTRS{idProduct}==\"ea60\",",[29,123516,123517],{"class":103}," MODE:=\"0777\",",[29,123519,123520],{"class":103}," SYMLINK+=\"mylidar\"\n",[29,123522,123523,123525,123527,123529,123531,123533,123536,123538,123541,123543],{"class":31,"line":43},[29,123524,123495],{"class":309},[29,123526,355],{"class":305},[29,123528,123500],{"class":103},[29,123530,123503],{"class":35},[29,123532,123506],{"class":103},[29,123534,123535],{"class":35},"\"1a86\"",[29,123537,686],{"class":35},[29,123539,123540],{"class":103}," ATTRS{idProduct}==\"7523\",",[29,123542,123517],{"class":103},[29,123544,123545],{"class":103}," SYMLINK+=\"mycar\"\n",[171,123547,123548],{},"代码解释：",[175,123550,123551,123554,123557,123560],{},[178,123552,123553],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[178,123555,123556],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[178,123558,123559],{},"SYMLINK是符号连接，即绑定的别名；",[178,123561,123562],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[171,123564,123565,123566,123569,123572],{},"***小提示：***",[23728,123567,123568],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[26,123570,123571],{},"\u002Fetc\u002Fudev\u002Frule.d",[23728,123573,123574],{},"目录即可。",[171,123576,123577],{},"表格 还在加载中，请等待加载完成后再尝试复制",[171,123579,123580],{},"（3）.使规则生效",[171,123582,123583],{},"在终端下输入如下指令：",[19,123585,123587],{"className":117425,"code":123586,"language":117427,"meta":24,"style":24},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[26,123588,123589,123594,123606,123617,123621,123626,123639],{"__ignoreMap":24},[29,123590,123591],{"class":31,"line":32},[29,123592,123593],{"class":367},"# Ubuntu用下方命令\n",[29,123595,123596,123598,123600,123603],{"class":31,"line":43},[29,123597,24749],{"class":35},[29,123599,120177],{"class":103},[29,123601,123602],{"class":103}," udev",[29,123604,123605],{"class":103}," reload\n",[29,123607,123608,123610,123612,123614],{"class":31,"line":51},[29,123609,24749],{"class":35},[29,123611,120177],{"class":103},[29,123613,123602],{"class":103},[29,123615,123616],{"class":103}," restart\n",[29,123618,123619],{"class":31,"line":59},[29,123620,2575],{"emptyLinePlaceholder":233},[29,123622,123623],{"class":31,"line":67},[29,123624,123625],{"class":367},"#Fedora用下方命令\n",[29,123627,123628,123630,123633,123636],{"class":31,"line":75},[29,123629,24749],{"class":35},[29,123631,123632],{"class":103}," udevadm",[29,123634,123635],{"class":103}," control",[29,123637,123638],{"class":39}," --reload\n",[29,123640,123641,123643,123645],{"class":31,"line":83},[29,123642,24749],{"class":35},[29,123644,123632],{"class":103},[29,123646,123647],{"class":103}," trigger\n",[171,123649,123650],{},"再重新插拔设备即可。",[171,123652,123653],{},"（4）.测试",[171,123655,123656],{},"终端下输入如下指令",[19,123658,123660],{"className":117425,"code":123659,"language":117427,"meta":24,"style":24},"ll \u002Fdev | grep ttyUSB\n",[26,123661,123662],{"__ignoreMap":24},[29,123663,123664,123667,123670,123672,123674],{"class":31,"line":32},[29,123665,123666],{"class":35},"ll",[29,123668,123669],{"class":103}," \u002Fdev",[29,123671,25238],{"class":305},[29,123673,30365],{"class":35},[29,123675,123676],{"class":103}," ttyUSB\n",[171,123678,123679],{},"运行结果如下：",[171,123681,123682],{},[1638,123683],{"alt":24,"src":123684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[171,123686,123687,123688,123691],{},"也可以多次插拔USB设备，会发现设备端口",[26,123689,123690],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[171,123693,123694],{},[457,123695,118093],{},[171,123697,123698],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[275,123700,123702],{"id":123701},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[171,123704,123705,123707],{},[457,123706,123421],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[171,123709,123710,123712],{},[457,123711,123427],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[171,123714,123715],{},[457,123716,123433],{},[171,123718,123719],{},"（1）.查看所连接的主机USB接口的KERNELS",[171,123721,123722],{},"调用如下指令查看第一台雷达的USB信息：",[19,123724,123726],{"className":117425,"code":123725,"language":117427,"meta":24,"style":24},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[26,123727,123728,123748],{"__ignoreMap":24},[29,123729,123730,123733,123735,123738,123741,123743,123745],{"class":31,"line":32},[29,123731,123732],{"class":35},"udevadm",[29,123734,69950],{"class":103},[29,123736,123737],{"class":39}," --attribute-walk",[29,123739,123740],{"class":39}," --name=\u002Fdev\u002FttyUSB0",[29,123742,25238],{"class":305},[29,123744,30365],{"class":35},[29,123746,123747],{"class":103}," KERNELS\n",[29,123749,123750,123752,123754,123756,123759,123761,123763],{"class":31,"line":43},[29,123751,123732],{"class":35},[29,123753,69950],{"class":103},[29,123755,123737],{"class":39},[29,123757,123758],{"class":39}," --name=\u002Fdev\u002FttyACM0",[29,123760,25238],{"class":305},[29,123762,30365],{"class":35},[29,123764,123747],{"class":103},[171,123766,123767],{},[1638,123768],{"alt":24,"src":123769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[171,123771,123772],{},"调用如下指令查看第二台雷达的USB信息：",[19,123774,123776],{"className":117425,"code":123775,"language":117427,"meta":24,"style":24},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[26,123777,123778],{"__ignoreMap":24},[29,123779,123780,123782,123784,123786,123789,123791,123793],{"class":31,"line":32},[29,123781,123732],{"class":35},[29,123783,69950],{"class":103},[29,123785,123737],{"class":39},[29,123787,123788],{"class":39}," --name=\u002Fdev\u002FttyUSB1",[29,123790,25238],{"class":305},[29,123792,30365],{"class":35},[29,123794,123747],{"class":103},[171,123796,123797,123798,123801,123802,123805,123806,123809],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[26,123799,123800],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[26,123803,123804],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[457,123807,123808],{},"唯一性标识","”。",[171,123811,123461],{},[171,123813,123464,123814,123816],{},[26,123815,123467],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[19,123818,123819],{"className":117425,"code":123471,"language":117427,"meta":24,"style":24},[26,123820,123821],{"__ignoreMap":24},[29,123822,123823,123825,123827],{"class":31,"line":32},[29,123824,24749],{"class":35},[29,123826,118712],{"class":103},[29,123828,123482],{"class":103},[19,123830,123832],{"className":117425,"code":123831,"language":117427,"meta":24,"style":24},"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",[26,123833,123834,123863],{"__ignoreMap":24},[29,123835,123836,123838,123840,123842,123845,123847,123850,123853,123855,123858,123860],{"class":31,"line":32},[29,123837,123495],{"class":309},[29,123839,355],{"class":305},[29,123841,123500],{"class":103},[29,123843,123844],{"class":309}," KERNELS",[29,123846,355],{"class":305},[29,123848,123849],{"class":103},"=\"1-1.3:1.0\",",[29,123851,123852],{"class":35}," MODE:",[29,123854,355],{"class":103},[29,123856,123857],{"class":35},"\"0777\"",[29,123859,686],{"class":35},[29,123861,123862],{"class":103}," SYMLINK+=\"rplidar_front\"\n",[29,123864,123865,123867,123869,123871,123873,123875,123878,123880,123882,123884,123886],{"class":31,"line":43},[29,123866,123495],{"class":309},[29,123868,355],{"class":305},[29,123870,123500],{"class":103},[29,123872,123844],{"class":309},[29,123874,355],{"class":305},[29,123876,123877],{"class":103},"=\"1-1.4:1.0\",",[29,123879,123852],{"class":35},[29,123881,355],{"class":103},[29,123883,123857],{"class":35},[29,123885,686],{"class":35},[29,123887,123888],{"class":103}," SYMLINK+=\"rplidar_back\"\n",[171,123890,123580],{},[171,123892,123583],{},[19,123894,123895],{"className":117425,"code":123586,"language":117427,"meta":24,"style":24},[26,123896,123897,123901,123911,123921,123925,123929,123939],{"__ignoreMap":24},[29,123898,123899],{"class":31,"line":32},[29,123900,123593],{"class":367},[29,123902,123903,123905,123907,123909],{"class":31,"line":43},[29,123904,24749],{"class":35},[29,123906,120177],{"class":103},[29,123908,123602],{"class":103},[29,123910,123605],{"class":103},[29,123912,123913,123915,123917,123919],{"class":31,"line":51},[29,123914,24749],{"class":35},[29,123916,120177],{"class":103},[29,123918,123602],{"class":103},[29,123920,123616],{"class":103},[29,123922,123923],{"class":31,"line":59},[29,123924,2575],{"emptyLinePlaceholder":233},[29,123926,123927],{"class":31,"line":67},[29,123928,123625],{"class":367},[29,123930,123931,123933,123935,123937],{"class":31,"line":75},[29,123932,24749],{"class":35},[29,123934,123632],{"class":103},[29,123936,123635],{"class":103},[29,123938,123638],{"class":39},[29,123940,123941,123943,123945],{"class":31,"line":83},[29,123942,24749],{"class":35},[29,123944,123632],{"class":103},[29,123946,123647],{"class":103},[171,123948,123650],{},[171,123950,123653],{},[171,123952,123656,123953,123956],{},[26,123954,123955],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[171,123958,123959],{},[1638,123960],{"alt":24,"src":123961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[171,123963,123964],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[171,123966,123967,123969],{},[457,123968,118093],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[275,123971,123973],{"id":123972},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[171,123975,123976],{},"（1）.查看所连接的主机USB接口的信息",[19,123978,123980],{"className":117425,"code":123979,"language":117427,"meta":24,"style":24},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[26,123981,123982,124012],{"__ignoreMap":24},[29,123983,123984,123986,123988,123991,123993,123995,123997,123999,124002,124005,124007,124010],{"class":31,"line":32},[29,123985,123732],{"class":35},[29,123987,69950],{"class":103},[29,123989,123990],{"class":39}," -a",[29,123992,29345],{"class":39},[29,123994,28551],{"class":309},[29,123996,123732],{"class":35},[29,123998,69950],{"class":103},[29,124000,124001],{"class":39}," -q",[29,124003,124004],{"class":103}," path",[29,124006,25244],{"class":39},[29,124008,124009],{"class":103}," \u002Fdev\u002FttyACM0",[29,124011,316],{"class":309},[29,124013,124014,124016,124018,124020,124022,124024,124026,124028,124030,124032,124034,124037],{"class":31,"line":43},[29,124015,123732],{"class":35},[29,124017,69950],{"class":103},[29,124019,123990],{"class":39},[29,124021,29345],{"class":39},[29,124023,28551],{"class":309},[29,124025,123732],{"class":35},[29,124027,69950],{"class":103},[29,124029,124001],{"class":39},[29,124031,124004],{"class":103},[29,124033,25244],{"class":39},[29,124035,124036],{"class":103}," \u002Fdev\u002FttyUSB0",[29,124038,316],{"class":309},[171,124040,124041],{},[1638,124042],{"alt":24,"src":124043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[171,124045,124046],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[171,124048,123461],{},[171,124050,123464,124051,123816],{},[26,124052,123467],{},[19,124054,124055],{"className":117425,"code":123471,"language":117427,"meta":24,"style":24},[26,124056,124057],{"__ignoreMap":24},[29,124058,124059,124061,124063],{"class":31,"line":32},[29,124060,24749],{"class":35},[29,124062,118712],{"class":103},[29,124064,123482],{"class":103},[19,124066,124068],{"className":117425,"code":124067,"language":117427,"meta":24,"style":24},"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",[26,124069,124070,124098,124124],{"__ignoreMap":24},[29,124071,124072,124074,124076,124079,124081,124083,124085,124087,124090,124093,124095],{"class":31,"line":32},[29,124073,123495],{"class":309},[29,124075,355],{"class":305},[29,124077,124078],{"class":103},"=\"ttyACM*\",",[29,124080,123503],{"class":35},[29,124082,123506],{"class":103},[29,124084,123535],{"class":35},[29,124086,686],{"class":35},[29,124088,124089],{"class":103}," ATTRS{idProduct}==\"55d4\",",[29,124091,124092],{"class":103}," ATTRS{serial}==\"0001\",",[29,124094,123517],{"class":103},[29,124096,124097],{"class":103}," SYMLINK+=\"ttyACM_MCU\"\n",[29,124099,124100,124102,124104,124106,124108,124110,124112,124114,124116,124119,124121],{"class":31,"line":43},[29,124101,123495],{"class":309},[29,124103,355],{"class":305},[29,124105,124078],{"class":103},[29,124107,123503],{"class":35},[29,124109,123506],{"class":103},[29,124111,123535],{"class":35},[29,124113,686],{"class":35},[29,124115,124089],{"class":103},[29,124117,124118],{"class":103}," ATTRS{serial}==\"0002\",",[29,124120,123517],{"class":103},[29,124122,124123],{"class":103}," SYMLINK+=\"ttyACM_Lidar\"\n",[29,124125,124126,124128,124130,124132,124134,124136,124138,124140,124142,124144],{"class":31,"line":51},[29,124127,123495],{"class":309},[29,124129,355],{"class":305},[29,124131,123500],{"class":103},[29,124133,123503],{"class":35},[29,124135,123506],{"class":103},[29,124137,123535],{"class":35},[29,124139,686],{"class":35},[29,124141,123540],{"class":103},[29,124143,123517],{"class":103},[29,124145,124146],{"class":103}," SYMLINK+=\"ttyUSB_IMU\"\n",[171,124148,123580],{},[171,124150,123583],{},[19,124152,124153],{"className":117425,"code":123586,"language":117427,"meta":24,"style":24},[26,124154,124155,124159,124169,124179,124183,124187,124197],{"__ignoreMap":24},[29,124156,124157],{"class":31,"line":32},[29,124158,123593],{"class":367},[29,124160,124161,124163,124165,124167],{"class":31,"line":43},[29,124162,24749],{"class":35},[29,124164,120177],{"class":103},[29,124166,123602],{"class":103},[29,124168,123605],{"class":103},[29,124170,124171,124173,124175,124177],{"class":31,"line":51},[29,124172,24749],{"class":35},[29,124174,120177],{"class":103},[29,124176,123602],{"class":103},[29,124178,123616],{"class":103},[29,124180,124181],{"class":31,"line":59},[29,124182,2575],{"emptyLinePlaceholder":233},[29,124184,124185],{"class":31,"line":67},[29,124186,123625],{"class":367},[29,124188,124189,124191,124193,124195],{"class":31,"line":75},[29,124190,24749],{"class":35},[29,124192,123632],{"class":103},[29,124194,123635],{"class":103},[29,124196,123638],{"class":39},[29,124198,124199,124201,124203],{"class":31,"line":83},[29,124200,24749],{"class":35},[29,124202,123632],{"class":103},[29,124204,123647],{"class":103},[171,124206,124207,124208],{},"再重新插拔设备即可，或者 ",[457,124209,124210],{},"直接重启系统。",[171,124212,123653],{},[171,124214,123656,124215,123956],{},[26,124216,123955],{},[171,124218,124219],{},[1638,124220],{"alt":24,"src":124221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[171,124223,123964],{},[171,124225,124226,124228],{},[457,124227,118093],{}," 一些设备可能没有串口号等。",[275,124230,124232],{"id":124231},"_744-其他注意事项","7.4.4 其他注意事项",[171,124234,124235,124236,124238,124239,124242,124243,18585,124246,124249,124250,124252],{},"并非所有的USB设备端口号都是",[26,124237,123690],{},"的格式，比如Arduino的端口号可能是",[26,124240,124241],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[26,124244,124245],{},"videon",[26,124247,124248],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[26,124251,124245],{},"端口，绑定时需要关联的也是该接口。",[171,124254,124255,124256,124259,124260,124263,124264,124266,124267,124270,124271,124274,124275,124278,124279,124278,124282,124278,124285,28514],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[26,124257,124258],{},"KERNEL==\"ttyUSB*\"","修改为",[26,124261,124262],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[26,124265,124258],{},"修改为类似于",[26,124268,124269],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[26,124272,124273],{},"video[0,2,4,6]","表示可以绑定的端口为",[26,124276,124277],{},"video0","或",[26,124280,124281],{},"video2",[26,124283,124284],{},"video4",[26,124286,124287],{},"video6",[14,124289,124291],{"id":124290},"_75-挂载内网网页","7.5 挂载内网网页",[171,124293,124294],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[171,124296,124297],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[171,124299,124300],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[171,124302,124303,124304],{},"Termux 下载地址（F-Droid）：",[546,124305,124306],{"href":124306,"rel":124307},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24038],[171,124309,124310],{},"首先打开app后，先更新软件缓存：",[19,124312,124314],{"className":117425,"code":124313,"language":117427,"meta":24,"style":24},"pkg update\n",[26,124315,124316],{"__ignoreMap":24},[29,124317,124318,124321],{"class":31,"line":32},[29,124319,124320],{"class":35},"pkg",[29,124322,26371],{"class":103},[171,124324,124325],{},"然后换源",[19,124327,124329],{"className":117425,"code":124328,"language":117427,"meta":24,"style":24},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[26,124330,124331],{"__ignoreMap":24},[29,124332,124333,124335,124338],{"class":31,"line":32},[29,124334,123203],{"class":35},[29,124336,124337],{"class":309}," $PREFIX",[29,124339,124340],{"class":103},"\u002Fetc\u002Fapt\u002Fsources.list\n",[171,124342,124343],{},"将该文件内容替换为下面：",[19,124345,124347],{"className":117425,"code":124346,"language":117427,"meta":24,"style":24},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[26,124348,124349],{"__ignoreMap":24},[29,124350,124351,124354,124357,124360],{"class":31,"line":32},[29,124352,124353],{"class":35},"deb",[29,124355,124356],{"class":103}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[29,124358,124359],{"class":103}," stable",[29,124361,124362],{"class":103}," main\n",[175,124364,124365,124392],{},[178,124366,124367,124368,124370,124371],{},"如果你使用的是",[26,124369,123203],{},"编辑器：",[175,124372,124373,124380,124386],{},[178,124374,124375,124376,124379],{},"按 ",[26,124377,124378],{},"Ctrl+O"," 保存文件。",[178,124381,124375,124382,124385],{},[26,124383,124384],{},"Enter"," 确认文件名。",[178,124387,124375,124388,124391],{},[26,124389,124390],{},"Ctrl+X"," 退出编辑器。",[178,124393,124367,124394,124370,124397],{},[26,124395,124396],{},"vim",[175,124398,124399,124405],{},[178,124400,124375,124401,124404],{},[26,124402,124403],{},"Esc"," 退出编辑模式。",[178,124406,124407,124408,124410],{},"输入 ",[26,124409,119350],{}," 保存并退出。",[171,124412,124413],{},"接下来重新更新软件源：",[19,124415,124417],{"className":117425,"code":124416,"language":117427,"meta":24,"style":24},"pkg update && pkg upgrade\n",[26,124418,124419],{"__ignoreMap":24},[29,124420,124421,124423,124425,124427,124429],{"class":31,"line":32},[29,124422,124320],{"class":35},[29,124424,117476],{"class":103},[29,124426,26319],{"class":309},[29,124428,124320],{"class":35},[29,124430,117462],{"class":103},[171,124432,124433],{},"安装python：",[19,124435,124437],{"className":117425,"code":124436,"language":117427,"meta":24,"style":24},"pkg install python\n",[26,124438,124439],{"__ignoreMap":24},[29,124440,124441,124443,124445],{"class":31,"line":32},[29,124442,124320],{"class":35},[29,124444,24007],{"class":103},[29,124446,124447],{"class":103}," python\n",[171,124449,124450,26602],{},[457,124451,124452],{},"通过Termux访问设备存储",[171,124454,124455],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[19,124457,124459],{"className":117425,"code":124458,"language":117427,"meta":24,"style":24},"termux-setup-storage\n",[26,124460,124461],{"__ignoreMap":24},[29,124462,124463],{"class":31,"line":32},[29,124464,124458],{"class":35},[259,124466,124467],{},[178,124468,124469,26602,124472],{},[457,124470,124471],{},"进入HTML文件所在的目录",[259,124473,124474],{},[178,124475,124476,124477,124479],{},"使用",[26,124478,101405],{},"命令进入HTML文件所在的目录：",[19,124481,124483],{"className":117425,"code":124482,"language":117427,"meta":24,"style":24},"cd ~\u002Fyour_html_folder\n",[26,124484,124485],{"__ignoreMap":24},[29,124486,124487,124489],{"class":31,"line":32},[29,124488,101405],{"class":39},[29,124490,124491],{"class":103}," ~\u002Fyour_html_folder\n",[259,124493,124494],{"start":43},[178,124495,124496,26602,124499,124504,124521],{},[457,124497,124498],{},"启动Python HTTP服务器",[259,124500,124501],{},[178,124502,124503],{},"运行以下命令启动一个简单的HTTP服务器：",[19,124505,124507],{"className":117425,"code":124506,"language":117427,"meta":24,"style":24},"python -m http.server 8000\n",[26,124508,124509],{"__ignoreMap":24},[29,124510,124511,124513,124515,124518],{"class":31,"line":32},[29,124512,30509],{"class":35},[29,124514,101011],{"class":39},[29,124516,124517],{"class":103}," http.server",[29,124519,124520],{"class":39}," 8000\n",[259,124522,124523],{"start":51},[178,124524,124525,124526,124529],{},"这会在端口",[26,124527,124528],{},"8000","上启动一个Web服务器。",[175,124531,124532],{},[178,124533,124534],{},"启动服务器后，Termux会显示日志信息，例如：",[19,124536,124538],{"className":120945,"code":124537,"language":120947,"meta":120948,"style":24},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[26,124539,124540],{"__ignoreMap":24},[29,124541,124542],{"class":31,"line":32},[29,124543,124537],{},[175,124545,124546],{},[178,124547,124548],{},"这表示服务器已成功启动。",[171,124550,124551],{},[457,124552,124553],{},"在浏览器中访问HTML文件",[259,124555,124556],{},[178,124557,124558,26602,124561,124566],{},[457,124559,124560],{},"在同一设备上访问",[259,124562,124563],{},[178,124564,124565],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[19,124567,124570],{"className":124568,"code":124569,"language":71793,"meta":24,"style":24},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[26,124571,124572],{"__ignoreMap":24},[29,124573,124574,124577],{"class":31,"line":32},[29,124575,124576],{"class":309},"http:",[29,124578,124579],{"class":367},"\u002F\u002Flocalhost:8000\n",[175,124581,124582],{},[178,124583,124584,124585,124588],{},"如果HTML文件中有",[26,124586,124587],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124590,124592],{"id":124591},"_76-linux重点知识","7.6 Linux重点知识",[275,124594,124596],{"id":124595},"_761-关于点的说明","7.6.1 关于点的说明",[171,124598,124599],{},[1638,124600],{"alt":24,"src":124601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[171,124603,124604],{},"一点本目录，两点上目录",[275,124606,124608],{"id":124607},"_762-目录","7.6.2 目录",[22173,124610,124612],{"id":124611},"_7621-系统启动必须","7.6.2.1 系统启动必须",[171,124614,124615],{},[457,124616,124617],{},"\u002Fboot:",[171,124619,124620],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[171,124622,124623],{},[457,124624,124625],{},"\u002Fetc:",[171,124627,124628],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[171,124630,124631],{},[457,124632,124633],{},"\u002Flib：",[171,124635,124636],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[171,124638,124639],{},[457,124640,124641],{},"\u002Fsys:",[171,124643,124644],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22173,124646,124648],{"id":124647},"_7622-指令集合","7.6.2.2 指令集合",[171,124650,124651],{},[457,124652,124653],{},"\u002Fbin:",[171,124655,124656],{},"为二进制文件的缩写，存放最经常使用的命令",[171,124658,124659],{},[457,124660,124661],{},"\u002Fsbin:",[171,124663,124664],{},"只有系统管理员才能使用的程序和指令",[22173,124666,124668],{"id":124667},"_7623-外部文件管理","7.6.2.3 外部文件管理",[171,124670,124671],{},[457,124672,124673],{},"\u002Fdev:",[171,124675,124676],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[171,124678,124679],{},[457,124680,124681],{},"\u002Fmedia:",[171,124683,124684],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[171,124686,124687],{},[457,124688,124689],{},"\u002Fmnt:",[171,124691,124692],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22173,124694,124696],{"id":124695},"_7624-临时文件","7.6.2.4 临时文件",[171,124698,124699],{},[457,124700,124701],{},"\u002Frun:",[171,124703,124704],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[171,124706,124707],{},[457,124708,124709],{},"\u002Flost+found:",[171,124711,124712],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[171,124714,124715],{},[457,124716,124717],{},"\u002Ftmp:",[171,124719,124720],{},"这个目录是用来存放一些临时文件的",[22173,124722,124724],{"id":124723},"_7625-账户","7.6.2.5 账户",[171,124726,124727],{},[457,124728,124729],{},"\u002Froot：",[171,124731,124732],{},"系统管理员的用户主目录",[171,124734,124735,26602],{},[457,124736,124737],{},"\u002Fhome",[171,124739,124740],{},"用户的主目录，以用户的账号命名的",[171,124742,124743,26602],{},[457,124744,124745],{},"\u002Fusr",[171,124747,124748],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[171,124750,124751],{},[457,124752,124753],{},"\u002Fusr\u002Fbin：",[171,124755,124756],{},"系统用户使用的应用程序与指令",[171,124758,124759],{},[457,124760,124761],{},"\u002Fusr\u002Fsbin：",[171,124763,124764],{},"超级用户使用的比较高级的管理程序和系统守护程序",[171,124766,124767],{},[457,124768,124769],{},"\u002Fusr\u002Fsrc：",[171,124771,124772],{},"内核源代码默认的放置目录",[22173,124774,124776],{"id":124775},"_7626-运行过程要用","7.6.2.6 运行过程要用",[171,124778,124779],{},[457,124780,124781],{},"\u002Fvar：",[171,124783,124784],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[171,124786,124787],{},[457,124788,124789],{},"\u002Fproc:",[171,124791,124792,124793,124796],{},"管理 ",[457,124794,124795],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22173,124798,124800],{"id":124799},"_7627-扩展用的","7.6.2.7 扩展用的",[171,124802,124803],{},[457,124804,124805],{},"\u002Fopt:",[171,124807,124808],{},"默认是空的，我们安装额外软件可以放在这个里面",[171,124810,124811],{},[457,124812,124813],{},"\u002Fsrv:",[171,124815,124816],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[275,124818,124820],{"id":124819},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[171,124822,124823],{},[1638,124824],{"alt":24,"src":124825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[171,124827,124828],{},"windows-->linux:",[171,124830,124831],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[171,124833,124834],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[171,124836,124837],{},"linux传输文件到windows",[171,124839,124840],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[275,124842,124844],{"id":124843},"_764-易忘知识","7.6.4 易忘知识",[171,124846,124847],{},"操作系统内核查看",[19,124849,124850],{"className":117425,"code":121419,"language":117427,"meta":24,"style":24},[26,124851,124852],{"__ignoreMap":24},[29,124853,124854,124856],{"class":31,"line":32},[29,124855,70333],{"class":35},[29,124857,121428],{"class":39},[171,124859,124860],{},[1638,124861],{"alt":24,"src":124862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[171,124864,124865],{},[1638,124866],{"alt":24,"src":124867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[19,124869,124871],{"className":117425,"code":124870,"language":117427,"meta":24,"style":24},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[26,124872,124873,124885],{"__ignoreMap":24},[29,124874,124875,124877,124880,124883],{"class":31,"line":32},[29,124876,121636],{"class":35},[29,124878,124879],{"class":103}," mvtest",[29,124881,124882],{"class":103}," mvtest2",[29,124884,2849],{"class":309},[29,124886,124887],{"class":31,"line":43},[29,124888,124889],{"class":35},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[171,124891,124892],{},[1638,124893],{"alt":24,"src":124894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[171,124896,124897],{},[1638,124898],{"alt":24,"src":124899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[171,124901,124902,124903,124906],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[26,124904,124905],{},"du -a"," 可以快速查看磁盘使用细节。",[275,124908,124910],{"id":124909},"_765-vim","7.6.5 Vim",[171,124912,124913],{},[1638,124914],{"alt":24,"src":124915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[171,124917,124918],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[171,124920,124921],{},"一开始进去为命令模式，此时点击输入的字母为命令",[171,124923,124924],{},[457,124925,124926],{},"1.命令模式：",[171,124928,124929],{},"i 切换到输入模式，在光标当前位置开始输入文本",[171,124931,124932],{},"x 删除当前光标所在处的字符",[171,124934,124935],{},"：切换到底线命令模式，以在最底一行输入命令",[171,124937,124938],{},"a 进行插入模式，在光标下一个位置输入文本",[171,124940,124941],{},"o 在当前的下方插入一个新行，并进入插入模式",[171,124943,124944],{},"0 在当前行的上方插入一个新行，并进入插入模式",[171,124946,124947],{},"dd 剪切当前行",[171,124949,124950],{},"yy 复制当前行",[171,124952,124953],{},"p 粘贴剪贴板内容到光标下方",[171,124955,124956],{},"P 粘贴剪贴板内容到光标上方",[171,124958,124959],{},"u 撤销上一次操作",[171,124961,124962],{},"ctrl+r 重做上一次操作",[171,124964,124965,124967],{},[1103,124966],{}," 保存文件",[171,124969,124970,124972],{},[953,124971],{}," 退出Vim编辑器",[171,124974,124975,124977],{},[953,124976],{},"! 强制退出Vim编辑器，不保存修改",[171,124979,124980],{},[457,124981,124982],{},"2.输入模式：",[171,124984,124985],{},[1638,124986],{"alt":24,"src":124987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[171,124989,124990],{},[457,124991,124992],{},"3.底线命令模式：",[171,124994,124995],{},[1638,124996],{"alt":24,"src":124997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[171,124999,125000],{},"按下esc可以退出底线命令模式",[275,125002,125004],{"id":125003},"_766-apt","7.6.6 apt",[171,125006,125007],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[275,125009,125011],{"id":125010},"_767-home与root的区别","7.6.7 home与root的区别",[171,125013,125014],{},[1638,125015],{"alt":24,"src":125016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[171,125018,125019],{},[1638,125020],{"alt":24,"src":125021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[171,125023,125024],{},[1638,125025],{"alt":24,"src":125026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[171,125028,125029],{},[1638,125030],{"alt":24,"src":125031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[275,125033,125035],{"id":125034},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[171,125037,125038],{},[546,125039,125040],{"href":125040,"rel":125041},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24038],[259,125043,125044,125047],{},[178,125045,125046],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[178,125048,125049],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[171,125051,125052],{},[1638,125053],{"alt":24,"src":125054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[171,125056,125057],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[171,125059,125060],{},[1638,125061],{"alt":24,"src":125062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[19,125064,125066],{"className":120945,"code":125065,"language":120947,"meta":120948,"style":24},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[26,125067,125068,125073],{"__ignoreMap":24},[29,125069,125070],{"class":31,"line":32},[29,125071,125072],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[29,125074,125075],{"class":31,"line":43},[29,125076,125077],{},".\u002Fpycharm.sh\n",[171,125079,125080],{},"3️⃣创建.desktop文件",[171,125082,125083],{},[457,125084,125085],{},"原理：",[175,125087,125088,125098],{},[178,125089,125090,125091,125097],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[457,125092,125093,125096],{},[26,125094,125095],{},".desktop"," 文件"," 来识别应用。",[178,125099,125100,125102,125103],{},[26,125101,125095],{}," 文件相当于一个“应用注册表”，告诉系统：",[175,125104,125105,125108,125111,125114,125117],{},[178,125106,125107],{},"应用名字（Name）",[178,125109,125110],{},"图标（Icon）",[178,125112,125113],{},"执行命令（Exec）",[178,125115,125116],{},"分类（Categories）",[178,125118,125119],{},"是否需要终端（Terminal）",[19,125121,125123],{"className":120945,"code":125122,"language":120947,"meta":120948,"style":24},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[26,125124,125125,125130],{"__ignoreMap":24},[29,125126,125127],{"class":31,"line":32},[29,125128,125129],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[29,125131,125132],{"class":31,"line":43},[29,125133,125134],{},"nano pycharm.desktop\n",[171,125136,125137],{},"nano是一个命令行下的编辑器，也可以使用vim",[19,125139,125141],{"className":120945,"code":125140,"language":120947,"meta":120948,"style":24},"[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",[26,125142,125143,125148,125153,125158,125163,125168,125173,125178,125183,125188],{"__ignoreMap":24},[29,125144,125145],{"class":31,"line":32},[29,125146,125147],{},"[Desktop Entry]\n",[29,125149,125150],{"class":31,"line":43},[29,125151,125152],{},"Version=1.0\n",[29,125154,125155],{"class":31,"line":51},[29,125156,125157],{},"Type=Application\n",[29,125159,125160],{"class":31,"line":59},[29,125161,125162],{},"Name=PyCharm\n",[29,125164,125165],{"class":31,"line":67},[29,125166,125167],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[29,125169,125170],{"class":31,"line":75},[29,125171,125172],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[29,125174,125175],{"class":31,"line":83},[29,125176,125177],{},"Comment=JetBrains PyCharm IDE\n",[29,125179,125180],{"class":31,"line":158},[29,125181,125182],{},"Categories=Development;IDE;\n",[29,125184,125185],{"class":31,"line":166},[29,125186,125187],{},"Terminal=false\n",[29,125189,125190],{"class":31,"line":1505},[29,125191,125192],{},"StartupWMClass=jetbrains-pycharm\n",[175,125194,125195,125201,125207,125213],{},[178,125196,125197,125200],{},[26,125198,125199],{},"Exec"," → 点击图标时执行的命令",[178,125202,125203,125206],{},[26,125204,125205],{},"Icon"," → 显示在菜单和桌面上的图标",[178,125208,125209,125212],{},[26,125210,125211],{},"Terminal=false"," → 不打开终端",[178,125214,125215,125218],{},[26,125216,125217],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125220,125221,125222],"blockquote",{},[171,125223,125224,125225,125227,125228],{},"可以理解成 ",[26,125226,125095],{}," 文件是 Linux 的 ",[457,125229,125230],{},"快捷方式配置文件",[171,125232,125233],{},"4️⃣设置可执行权限",[19,125235,125237],{"className":120945,"code":125236,"language":120947,"meta":120948,"style":24},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[26,125238,125239],{"__ignoreMap":24},[29,125240,125241],{"class":31,"line":32},[29,125242,125236],{},[171,125244,125245],{},"5️⃣桌面图标启动的话如下：",[19,125247,125249],{"className":120945,"code":125248,"language":120947,"meta":120948,"style":24},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,125250,125251,125256],{"__ignoreMap":24},[29,125252,125253],{"class":31,"line":32},[29,125254,125255],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[29,125257,125258],{"class":31,"line":43},[29,125259,125260],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[259,125262,125263],{"start":51},[178,125264,125265],{},"下载Appimage文件实现软件的安装",[171,125267,125268],{},"1️⃣先下载appimage",[171,125270,125271],{},[546,125272,125273],{"href":125273,"rel":125274},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24038],[171,125276,125277],{},[1638,125278],{"alt":24,"src":125279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[171,125281,125282],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[171,125284,125285],{},[1638,125286],{"alt":24,"src":125287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[171,125289,125290],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[171,125292,125293],{},[1638,125294],{"alt":24,"src":125295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[171,125297,125298],{},[1638,125299],{"alt":24,"src":125300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[171,125302,125303,125304,125307],{},"3️⃣给他们放在",[26,125305,125306],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[171,125309,125310],{},"4️⃣给软件执行权限",[19,125312,125314],{"className":120945,"code":125313,"language":120947,"meta":120948,"style":24},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[26,125315,125316,125321],{"__ignoreMap":24},[29,125317,125318],{"class":31,"line":32},[29,125319,125320],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[29,125322,125323],{"class":31,"line":43},[29,125324,125325],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[171,125327,125328],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[19,125330,125332],{"className":117425,"code":125331,"language":117427,"meta":24,"style":24},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[26,125333,125334,125341,125348,125354],{"__ignoreMap":24},[29,125335,125336,125338],{"class":31,"line":32},[29,125337,101405],{"class":39},[29,125339,125340],{"class":103}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[29,125342,125343,125345],{"class":31,"line":43},[29,125344,101412],{"class":35},[29,125346,125347],{"class":103}," .\u002Fqqmusic.desktop\n",[29,125349,125350,125352],{"class":31,"line":51},[29,125351,124396],{"class":35},[29,125353,125347],{"class":103},[29,125355,125356,125358,125360,125362],{"class":31,"line":59},[29,125357,24749],{"class":35},[29,125359,24752],{"class":103},[29,125361,123262],{"class":103},[29,125363,125347],{"class":103},[171,125365,125366,125368],{},[26,125367,101412],{},"：一个 Linux 命令，主要功能是：",[175,125370,125371,125374],{},[178,125372,125373],{},"如果文件不存在，就创建一个新的空文件",[178,125375,125376],{},"如果文件已存在，就更新该文件的最后修改时间",[19,125378,125380],{"className":120945,"code":125379,"language":120947,"meta":120948,"style":24},"[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",[26,125381,125382,125386,125391,125396,125401,125405,125410],{"__ignoreMap":24},[29,125383,125384],{"class":31,"line":32},[29,125385,125147],{},[29,125387,125388],{"class":31,"line":43},[29,125389,125390],{},"Name=QQ音乐\n",[29,125392,125393],{"class":31,"line":51},[29,125394,125395],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[29,125397,125398],{"class":31,"line":59},[29,125399,125400],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[29,125402,125403],{"class":31,"line":67},[29,125404,125157],{},[29,125406,125407],{"class":31,"line":75},[29,125408,125409],{},"Categories=Audio;Music;Player;\n",[29,125411,125412],{"class":31,"line":83},[29,125413,125414],{},"Comment=QQ Music Client for Linux\n",[171,125416,125417],{},"将文件复制进去",[171,125419,125420],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[171,125422,125423],{},[1638,125424],{"alt":24,"src":125425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[171,125427,125428],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[171,125430,125431],{},[1638,125432],{"alt":24,"src":125433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[171,125435,125436,125437,125440,125441,125444],{},"如果你用的不是KDE，那么也可以直接修改",[26,125438,125439],{},"qqmuic.desktop","：在exec的末尾加上",[26,125442,125443],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[19,125446,125448],{"className":120945,"code":125447,"language":120947,"meta":120948,"style":24},"[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",[26,125449,125450,125454,125458,125463,125467,125471,125475],{"__ignoreMap":24},[29,125451,125452],{"class":31,"line":32},[29,125453,125147],{},[29,125455,125456],{"class":31,"line":43},[29,125457,125390],{},[29,125459,125460],{"class":31,"line":51},[29,125461,125462],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[29,125464,125465],{"class":31,"line":59},[29,125466,125400],{},[29,125468,125469],{"class":31,"line":67},[29,125470,125157],{},[29,125472,125473],{"class":31,"line":75},[29,125474,125409],{},[29,125476,125477],{"class":31,"line":83},[29,125478,125414],{},[171,125480,125481],{},[1638,125482],{"alt":24,"src":125483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[171,125485,125486],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[19,125488,125490],{"className":120945,"code":125489,"language":120947,"meta":120948,"style":24},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[26,125491,125492],{"__ignoreMap":24},[29,125493,125494],{"class":31,"line":32},[29,125495,125489],{},[259,125497,125498],{"start":59},[178,125499,125500],{},"去Flathub上安装软件",[171,125502,125503],{},[546,125504,125505],{"href":125505,"rel":125506},"https:\u002F\u002Fflathub.org\u002F",[24038],[171,125508,125509],{},"1️⃣去上面的官网搜索软件+下载软件",[171,125511,125512],{},[1638,125513],{"alt":24,"src":125514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[19,125516,125518],{"className":120945,"code":125517,"language":120947,"meta":120948,"style":24},"flatpak install flathub com.obsproject.Studio\n",[26,125519,125520],{"__ignoreMap":24},[29,125521,125522],{"class":31,"line":32},[29,125523,125517],{},[171,125525,125526],{},[1638,125527],{"alt":24,"src":125528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[171,125530,125531],{},"2️⃣运行软件",[171,125533,125534],{},"a.官方方式：",[171,125536,125537],{},[1638,125538],{"alt":24,"src":125539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[19,125541,125542],{"className":120945,"code":125517,"language":120947,"meta":120948,"style":24},[26,125543,125544],{"__ignoreMap":24},[29,125545,125546],{"class":31,"line":32},[29,125547,125517],{},[171,125549,125550],{},"b.当普通软件运行：",[171,125552,125553],{},[1638,125554],{"alt":24,"src":125555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[171,125557,125558],{},[1638,125559],{"alt":24,"src":125560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[223,125562,125563],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":24,"searchDepth":43,"depth":43,"links":125565},[125566,125567,125572,125573,125579,125580],{"id":122298,"depth":43,"text":122299},{"id":122640,"depth":43,"text":122641,"children":125568},[125569,125570,125571],{"id":122644,"depth":51,"text":122645},{"id":122711,"depth":51,"text":122712},{"id":122972,"depth":51,"text":122973},{"id":123125,"depth":43,"text":123126},{"id":123363,"depth":43,"text":123364,"children":125574},[125575,125576,125577,125578],{"id":123415,"depth":51,"text":123416},{"id":123701,"depth":51,"text":123702},{"id":123972,"depth":51,"text":123973},{"id":124231,"depth":51,"text":124232},{"id":124290,"depth":43,"text":124291},{"id":124591,"depth":43,"text":124592,"children":125581},[125582,125583,125584,125585,125586,125587,125588,125589],{"id":124595,"depth":51,"text":124596},{"id":124607,"depth":51,"text":124608},{"id":124819,"depth":51,"text":124820},{"id":124843,"depth":51,"text":124844},{"id":124909,"depth":51,"text":124910},{"id":125003,"depth":51,"text":125004},{"id":125010,"depth":51,"text":125011},{"id":125034,"depth":51,"text":125035},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122290,"description":230},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125596,"title":125597,"body":125598,"description":230,"extension":231,"meta":125602,"navigation":233,"path":125603,"seo":125604,"stem":125605,"__hash__":125606},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125599,"toc":125600},[],{"title":24,"searchDepth":43,"depth":43,"links":125601},[],{"category":30392},"\u002Fwiki\u002F2025-01-27-linux",{"title":125597,"description":230},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125608,"title":125609,"body":125610,"description":125614,"extension":231,"meta":126005,"navigation":233,"path":126006,"seo":126007,"stem":126008,"__hash__":126009},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125611,"toc":126003},[125612,125615,125619,125636,125639,125692,125696,125698,125738,125747,125751,125754,125995,126000],[171,125613,125614],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125616,125618],{"id":125617},"_1ubuntu环境配置","1.Ubuntu环境配置",[259,125620,125621,125624,125627,125630,125633],{},[178,125622,125623],{},"ubuntu环境换源",[178,125625,125626],{},"安装cuda",[178,125628,125629],{},"安装miniconda",[178,125631,125632],{},"安装pytorch",[178,125634,125635],{},"安装genesis",[171,125637,125638],{},"参考链接：",[19,125640,125642],{"className":21,"code":125641,"language":23,"meta":24,"style":24},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[26,125643,125644],{"__ignoreMap":24},[29,125645,125646,125649,125652,125655,125657,125660,125663,125665,125668,125671,125673,125676,125679,125681,125684,125687,125689],{"class":31,"line":32},[29,125647,125648],{"class":35},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[29,125650,125651],{"class":103},"=blogdetail",[29,125653,125654],{"class":309},"&sharetype",[29,125656,355],{"class":305},[29,125658,125659],{"class":103},"blogdetail",[29,125661,125662],{"class":309},"&sharerId",[29,125664,355],{"class":305},[29,125666,125667],{"class":103},"144728092",[29,125669,125670],{"class":309},"&sharerefer",[29,125672,355],{"class":305},[29,125674,125675],{"class":103},"PC",[29,125677,125678],{"class":309},"&sharesource",[29,125680,355],{"class":305},[29,125682,125683],{"class":103},"qq_69379513",[29,125685,125686],{"class":309},"&sharefrom",[29,125688,355],{"class":305},[29,125690,125691],{"class":103},"from_link\n",[10,125693,125695],{"id":125694},"_2genesis-报错issue","2.Genesis 报错issue",[171,125697,125638],{},[19,125699,125700],{"className":21,"code":125641,"language":23,"meta":24,"style":24},[26,125701,125702],{"__ignoreMap":24},[29,125703,125704,125706,125708,125710,125712,125714,125716,125718,125720,125722,125724,125726,125728,125730,125732,125734,125736],{"class":31,"line":32},[29,125705,125648],{"class":35},[29,125707,125651],{"class":103},[29,125709,125654],{"class":309},[29,125711,355],{"class":305},[29,125713,125659],{"class":103},[29,125715,125662],{"class":309},[29,125717,355],{"class":305},[29,125719,125667],{"class":103},[29,125721,125670],{"class":309},[29,125723,355],{"class":305},[29,125725,125675],{"class":103},[29,125727,125678],{"class":309},[29,125729,355],{"class":305},[29,125731,125683],{"class":103},[29,125733,125686],{"class":309},[29,125735,355],{"class":305},[29,125737,125691],{"class":103},[19,125739,125741],{"className":21,"code":125740,"language":23,"meta":24,"style":24},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[26,125742,125743],{"__ignoreMap":24},[29,125744,125745],{"class":31,"line":32},[29,125746,125740],{"class":35},[10,125748,125750],{"id":125749},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[171,125752,125753],{},"hello_robot.py",[19,125755,125757],{"className":30507,"code":125756,"language":30509,"meta":24,"style":24},"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",[26,125758,125759,125765,125780,125784,125796,125808,125812,125825,125829,125848,125858,125868,125882,125886,125890,125895,125899,125909,125916,125930,125937,125947,125952,125956,125974,125979,125983,125990],{"__ignoreMap":24},[29,125760,125761,125763],{"class":31,"line":32},[29,125762,30521],{"class":305},[29,125764,45434],{"class":309},[29,125766,125767,125770,125773,125775,125777],{"class":31,"line":43},[29,125768,125769],{"class":309},"os.environ[",[29,125771,125772],{"class":103},"'PYOPENGL_PLATFORM'",[29,125774,4618],{"class":309},[29,125776,355],{"class":305},[29,125778,125779],{"class":103}," 'glx'\n",[29,125781,125782],{"class":31,"line":51},[29,125783,2575],{"emptyLinePlaceholder":233},[29,125785,125786,125788,125791,125793],{"class":31,"line":59},[29,125787,30521],{"class":305},[29,125789,125790],{"class":309}," genesis ",[29,125792,31512],{"class":305},[29,125794,125795],{"class":309}," gs\n",[29,125797,125798,125800,125803,125805],{"class":31,"line":67},[29,125799,30866],{"class":305},[29,125801,125802],{"class":309}," pynput ",[29,125804,30521],{"class":305},[29,125806,125807],{"class":309}," keyboard\n",[29,125809,125810],{"class":31,"line":75},[29,125811,2575],{"emptyLinePlaceholder":233},[29,125813,125814,125817,125820,125822],{"class":31,"line":83},[29,125815,125816],{"class":309},"gs.init(",[29,125818,125819],{"class":5391},"backend",[29,125821,355],{"class":305},[29,125823,125824],{"class":309},"gs.gpu)\n",[29,125826,125827],{"class":31,"line":158},[29,125828,2575],{"emptyLinePlaceholder":233},[29,125830,125831,125834,125836,125839,125842,125844,125846],{"class":31,"line":166},[29,125832,125833],{"class":309},"scene ",[29,125835,355],{"class":305},[29,125837,125838],{"class":309}," gs.Scene(",[29,125840,125841],{"class":5391},"show_viewer",[29,125843,355],{"class":305},[29,125845,31605],{"class":39},[29,125847,316],{"class":309},[29,125849,125850,125853,125855],{"class":31,"line":1505},[29,125851,125852],{"class":309},"plane ",[29,125854,355],{"class":305},[29,125856,125857],{"class":309}," scene.add_entity(gs.morphs.Plane())\n",[29,125859,125860,125863,125865],{"class":31,"line":1788},[29,125861,125862],{"class":309},"franka ",[29,125864,355],{"class":305},[29,125866,125867],{"class":309}," scene.add_entity(\n",[29,125869,125870,125873,125875,125877,125880],{"class":31,"line":1793},[29,125871,125872],{"class":309},"    gs.morphs.MJCF(",[29,125874,45483],{"class":5391},[29,125876,355],{"class":305},[29,125878,125879],{"class":103},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[29,125881,38176],{"class":309},[29,125883,125884],{"class":31,"line":1799},[29,125885,316],{"class":309},[29,125887,125888],{"class":31,"line":1804},[29,125889,2575],{"emptyLinePlaceholder":233},[29,125891,125892],{"class":31,"line":1818},[29,125893,125894],{"class":309},"scene.build()\n",[29,125896,125897],{"class":31,"line":1823},[29,125898,2575],{"emptyLinePlaceholder":233},[29,125900,125901,125903,125906],{"class":31,"line":1829},[29,125902,32076],{"class":305},[29,125904,125905],{"class":35}," on_press",[29,125907,125908],{"class":309},"(key):\n",[29,125910,125911,125914],{"class":31,"line":1850},[29,125912,125913],{"class":305},"    try",[29,125915,3914],{"class":309},[29,125917,125918,125920,125923,125925,125928],{"class":31,"line":1855},[29,125919,2672],{"class":305},[29,125921,125922],{"class":309}," key.char ",[29,125924,3124],{"class":305},[29,125926,125927],{"class":103}," 'q'",[29,125929,3914],{"class":309},[29,125931,125932,125934],{"class":31,"line":1869},[29,125933,15907],{"class":305},[29,125935,125936],{"class":39}," False\n",[29,125938,125939,125942,125945],{"class":31,"line":1874},[29,125940,125941],{"class":305},"    except",[29,125943,125944],{"class":39}," AttributeError",[29,125946,3914],{"class":309},[29,125948,125949],{"class":31,"line":1903},[29,125950,125951],{"class":305},"        pass\n",[29,125953,125954],{"class":31,"line":1908},[29,125955,2575],{"emptyLinePlaceholder":233},[29,125957,125958,125961,125963,125966,125969,125971],{"class":31,"line":1925},[29,125959,125960],{"class":309},"listener ",[29,125962,355],{"class":305},[29,125964,125965],{"class":309}," keyboard.Listener(",[29,125967,125968],{"class":5391},"on_press",[29,125970,355],{"class":305},[29,125972,125973],{"class":309},"on_press)\n",[29,125975,125976],{"class":31,"line":1930},[29,125977,125978],{"class":309},"listener.start()\n",[29,125980,125981],{"class":31,"line":1935},[29,125982,2575],{"emptyLinePlaceholder":233},[29,125984,125985,125987],{"class":31,"line":1940},[29,125986,108792],{"class":305},[29,125988,125989],{"class":309}," listener.running:\n",[29,125991,125992],{"class":31,"line":1954},[29,125993,125994],{"class":309},"    scene.step()\n",[171,125996,125997],{},[1638,125998],{"alt":24,"src":125999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[223,126001,126002],{},"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":24,"searchDepth":43,"depth":43,"links":126004},[],{"category":23553},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125609,"description":125614},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126011,"title":126012,"body":126013,"description":230,"extension":231,"meta":126028,"navigation":233,"path":126029,"seo":126030,"stem":126031,"__hash__":126032},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126014,"toc":126025},[126015,126018,126022],[10,126016,126012],{"id":126017},"_1-基础知识",[14,126019,126021],{"id":126020},"_11-js的组成","1.1 js的组成",[171,126023,126024],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":24,"searchDepth":43,"depth":43,"links":126026},[126027],{"id":126020,"depth":43,"text":126021},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126012,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126034,"title":126035,"body":126036,"description":230,"extension":231,"meta":126175,"navigation":233,"path":126176,"seo":126177,"stem":126178,"__hash__":126179},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126037,"toc":126163},[126038,126041,126045,126048,126052,126062,126066,126069,126072,126075,126079,126086,126092,126096,126102,126113,126117,126120,126124,126127,126131,126134,126138,126141,126145,126148,126151,126154,126157,126160],[10,126039,126035],{"id":126040},"_2-vscode必备内容",[14,126042,126044],{"id":126043},"_21-标签分类","2.1 标签分类",[171,126046,126047],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126049,126051],{"id":126050},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[171,126053,126054,126055,126057,126058,126061],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[26,126056,534],{}," 然后按 ",[26,126059,126060],{},"Tab","，快速自动生成基本结构。",[14,126063,126065],{"id":126064},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[171,126067,126068],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[171,126070,126071],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[171,126073,126074],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126076,126078],{"id":126077},"_24-视图缩放","2.4 视图缩放",[171,126080,126081,126082,126085],{},"缩放视图 ",[26,126083,126084],{},"ctrl+"," 可实现代码增大。",[171,126087,126088,126091],{},[26,126089,126090],{},"ctrl-"," 可实现代码减小。",[14,126093,126095],{"id":126094},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[171,126097,126098,126099,28514],{},"VSCode 新建文件快捷键为 ",[26,126100,126101],{},"ctrl+N",[171,126103,126104,126105,126108,126109,126112],{},"保存快捷键为 ",[26,126106,126107],{},"ctrl+S","，将文本保存为 ",[26,126110,126111],{},".html"," 文件。",[14,126114,126116],{"id":126115},"_26-auto-rename-tag","2.6 Auto Rename Tag",[171,126118,126119],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126121,126123],{"id":126122},"_27-vscode-icons","2.7 vscode-icons",[171,126125,126126],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126128,126130],{"id":126129},"_28-easy-less","2.8 Easy LESS",[171,126132,126133],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126135,126137],{"id":126136},"_29-会了吧插件","2.9 会了吧插件",[171,126139,126140],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126142,126144],{"id":126143},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[171,126146,126147],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[171,126149,126150],{},"②选定多个相同的单词:ctrl+D",[171,126152,126153],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[171,126155,126156],{},"④全局替换某些单词:ctrl+h",[171,126158,126159],{},"⑤快速定位到某一行:ctrl+g",[171,126161,126162],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":24,"searchDepth":43,"depth":43,"links":126164},[126165,126166,126167,126168,126169,126170,126171,126172,126173,126174],{"id":126043,"depth":43,"text":126044},{"id":126050,"depth":43,"text":126051},{"id":126064,"depth":43,"text":126065},{"id":126077,"depth":43,"text":126078},{"id":126094,"depth":43,"text":126095},{"id":126115,"depth":43,"text":126116},{"id":126122,"depth":43,"text":126123},{"id":126129,"depth":43,"text":126130},{"id":126136,"depth":43,"text":126137},{"id":126143,"depth":43,"text":126144},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126035,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126181,"title":126182,"body":126183,"description":230,"extension":231,"meta":126342,"navigation":233,"path":126343,"seo":126344,"stem":126345,"__hash__":126346},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126184,"toc":126334},[126185,126188,126192,126202,126208,126214,126218,126227,126231,126236,126239,126242,126246,126249,126259,126268,126277,126286,126296,126303,126308,126313,126326],[10,126186,126182],{"id":126187},"_3-html文本与容器标签",[14,126189,126191],{"id":126190},"_31-标题标签","3.1 标题标签",[171,126193,126194,126197,126198,126201],{},[26,126195,126196],{},"\u003Ch1>","我是一级标签",[26,126199,126200],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[171,126203,126204,126197,126206],{},[26,126205,126196],{},[26,126207,126200],{},[171,126209,123464,126210,126213],{},[26,126211,126212],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126215,126217],{"id":126216},"_32-段落标签","3.2 段落标签",[171,126219,126220,126223,126224],{},[26,126221,126222],{},"\u003Cp>","....",[26,126225,126226],{},"\u003C\u002Fp>",[14,126228,126230],{"id":126229},"_33-换行标签","3.3 换行标签",[171,126232,126233],{},[26,126234,126235],{},"\u003Cbr \u002F>",[171,126237,126238],{},"具有强制换行的作用",[171,126240,126241],{},"单标签",[14,126243,126245],{"id":126244},"_34-文本格式化标签","3.4 文本格式化标签",[171,126247,126248],{},"提供粗体、斜体和下划线等效果",[171,126250,126251,126252,82668,126255,126258],{},"加粗：",[26,126253,126254],{},"\u003Cstrong>...\u003C\u002Fstrong>",[26,126256,126257],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[171,126260,126261,126262,82668,126265,126258],{},"斜体：",[26,126263,126264],{},"\u003Cem>...\u003C\u002Fem>",[26,126266,126267],{},"\u003Ci>...\u003C\u002Fi>",[171,126269,126270,126271,82668,126274,126258],{},"删除线：",[26,126272,126273],{},"\u003Cdel>...\u003C\u002Fdel>",[26,126275,126276],{},"\u003Cs>...\u003C\u002Fs>",[171,126278,126279,126280,82668,126283,126258],{},"下划线：",[26,126281,126282],{},"\u003Cins>...\u003C\u002Fins>",[26,126284,126285],{},"\u003Cu>...\u003C\u002Fu>",[14,126287,126289,126290,18585,126293,102822],{"id":126288},"_35-div和span标签","3.5 ",[26,126291,126292],{},"\u003Cdiv>",[26,126294,126295],{},"\u003Cspan>",[171,126297,126298,101147,126300,126302],{},[26,126299,126292],{},[26,126301,126295],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[171,126304,126305],{},[26,126306,126307],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[171,126309,126310],{},[26,126311,126312],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[171,126314,126315,126316,126318,126319,126321,126322,126325],{},"两者特点：①",[26,126317,126292],{}," 标签用来布局，但一行通常只放一个 ",[26,126320,126292],{},"。可以理解为一个大盒子，独占一行，在 ",[26,126323,126324],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[171,126327,77378,126328,126330,126331,126333],{},[26,126329,126295],{}," 标签也可用于布局，一行可以放多个 ",[26,126332,126295],{},"，可理解为小盒子。",{"title":24,"searchDepth":43,"depth":43,"links":126335},[126336,126337,126338,126339,126340],{"id":126190,"depth":43,"text":126191},{"id":126216,"depth":43,"text":126217},{"id":126229,"depth":43,"text":126230},{"id":126244,"depth":43,"text":126245},{"id":126288,"depth":43,"text":126341},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126182,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126348,"title":126349,"body":126350,"description":230,"extension":231,"meta":126547,"navigation":233,"path":126548,"seo":126549,"stem":126550,"__hash__":126551},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126351,"toc":126539},[126352,126355,126359,126362,126368,126375,126381,126387,126390,126393,126396,126399,126402,126405,126408,126412,126415,126418,126421,126427,126433,126439,126446,126450,126456,126462,126465,126468,126474,126480,126486,126489,126492,126496,126499,126509,126515,126519,126528,126532,126535],[10,126353,126349],{"id":126354},"_4-html图像与链接",[14,126356,126358],{"id":126357},"_41-图像标签","4.1 图像标签",[171,126360,126361],{},"（1）标签",[171,126363,126364,126367],{},[26,126365,126366],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[171,126369,126370,126371,126374],{},"src是",[26,126372,126373],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[171,126376,126377,126378],{},"alt:文本，替换文本。图像不能显示的文字 ",[26,126379,126380],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[171,126382,126383,126384],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[26,126385,126386],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[171,126388,126389],{},"width:像素，设置图像的宽度",[171,126391,126392],{},"height:像素，设置图像的高度",[171,126394,126395],{},"border：像素，设置图像的边框粗细",[171,126397,126398],{},"（2）图像标签属性的注意点：",[171,126400,126401],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[171,126403,126404],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[171,126406,126407],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126409,126411],{"id":126410},"_42-路径注意要点","4.2 路径注意要点：",[171,126413,126414],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[171,126416,126417],{},"（2）根目录：就是打开文件夹的第一层根目录",[171,126419,126420],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[171,126422,126423,126424],{},"①同一级路径：图像文件位于HTML文件同一级，如",[26,126425,126426],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[171,126428,126429,126430],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[26,126431,126432],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[171,126434,126435,126436],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[26,126437,126438],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[171,126440,126441,126442,559],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[546,126443,126444],{"href":126444,"rel":126445},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24038],[14,126447,126449],{"id":126448},"_43-超链接标签","4.3 超链接标签",[171,126451,126452,126455],{},[26,126453,126454],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[171,126457,126458,126459],{},"①语法格式：",[26,126460,126461],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[171,126463,126464],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[171,126466,126467],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[171,126469,126470,126471],{},"③链接分类：外部链接：",[26,126472,126473],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[171,126475,126476,126477],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[26,126478,126479],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[171,126481,126482,126483],{},"空链接：如果当时没有确定链接目标时，",[26,126484,126485],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[171,126487,126488],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[171,126490,126491],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126493,126495],{"id":126494},"_44-锚点链接","4.4 锚点链接",[171,126497,126498],{},"点我们点击链接，可以快速定位到页面中的某个位置",[171,126500,126501,126502,126505,126506],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[26,126503,126504],{},"\u003Ca href=\"#two\">","第二级",[26,126507,126508],{},"\u003C\u002Fa>",[171,126510,126511,126512],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[26,126513,126514],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126516,126518],{"id":126517},"_45-注释标签","4.5 注释标签",[171,126520,126521,126524,126525],{},[26,126522,126523],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[26,126526,126527],{},"ctrl+\u002F",[14,126529,126531],{"id":126530},"_46-特殊字符","4.6 特殊字符",[171,126533,126534],{},"可以实现添加多个空格",[1638,126536],{"style":126537,"src":126538},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":24,"searchDepth":43,"depth":43,"links":126540},[126541,126542,126543,126544,126545,126546],{"id":126357,"depth":43,"text":126358},{"id":126410,"depth":43,"text":126411},{"id":126448,"depth":43,"text":126449},{"id":126494,"depth":43,"text":126495},{"id":126517,"depth":43,"text":126518},{"id":126530,"depth":43,"text":126531},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126349,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126553,"title":126554,"body":126555,"description":230,"extension":231,"meta":126848,"navigation":233,"path":126849,"seo":126850,"stem":126851,"__hash__":126852},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126556,"toc":126839},[126557,126560,126564,126567,126570,126573,126576,126579,126582,126585,126588,126591,126611,126617,126621,126624,126627,126630,126633,126636,126639,126643,126646,126649,126652,126655,126668,126673,126676,126679,126694,126697,126700,126703,126706,126709,126713,126716,126723,126726,126729,126732,126735,126738,126744,126747,126750,126756,126759,126762,126765,126771,126774,126777,126791,126798,126801,126804,126811,126820,126823,126826,126829,126833,126836],[10,126558,126554],{"id":126559},"_5-html表格列表与表单",[14,126561,126563],{"id":126562},"_51-表格标签","5.1 表格标签",[171,126565,126566],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[171,126568,126569],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[171,126571,126572],{},"②表格基本语法：",[1638,126574],{"style":126537,"src":126575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[171,126577,126578],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1638,126580],{"style":126537,"src":126581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[171,126583,126584],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1638,126586],{"style":126537,"src":126587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[171,126589,126590],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[171,126592,126593,126596,126597,126599,126600,126603,126604,126606,126607,126610],{},[26,126594,126595],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[26,126598,126595],{},"内部必须拥有",[26,126601,126602],{},"\u003Ctr>","标签，一般位于第一行，",[26,126605,126595],{},"比",[26,126608,126609],{},"\u003Cth>","范围广",[171,126612,126613,126616],{},[26,126614,126615],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126618,126620],{"id":126619},"_52-合并单元格","5.2 合并单元格",[171,126622,126623],{},"（1）合并单元格方式：",[171,126625,126626],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[171,126628,126629],{},"②跨列合并：colspan=\"合并单元格的个数\"",[171,126631,126632],{},"（2）目标单元格：",[171,126634,126635],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[171,126637,126638],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126640,126642],{"id":126641},"_53-列表标签","5.3 列表标签",[171,126644,126645],{},"（1）分类：无序列表、有序列表、自定义列表",[171,126647,126648],{},"①无序列表：",[1638,126650],{"style":126537,"src":126651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[171,126653,126654],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[171,126656,126657,126660,126661,126664,126665,126667],{},[26,126658,126659],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[26,126662,126663],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[26,126666,126659],{},"中输入其他标签或文字是不对的",[171,126669,126670,126672],{},[26,126671,126663],{},"之间相当于一个容器，可以容纳所有元素",[171,126674,126675],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[171,126677,126678],{},"在css中去除前边的小圆点采用如下代码:",[19,126680,126684],{"className":126681,"code":126682,"language":126683,"meta":24,"style":24},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[26,126685,126686],{"__ignoreMap":24},[29,126687,126688,126691],{"class":31,"line":32},[29,126689,126690],{"class":51429},"list-style",[29,126692,126693],{"class":309},": none;\n",[171,126695,126696],{},"②有序列表：",[1638,126698],{"style":126537,"src":126699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[171,126701,126702],{},"③自定义列表：",[1638,126704],{"style":126537,"src":126705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1638,126707],{"style":126537,"src":126708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126710,126712],{"id":126711},"_54-表单标签","5.4 表单标签",[171,126714,126715],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[171,126717,126718,126719,126722],{},"（1）表单域：包含单元素的区域，",[26,126720,126721],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1638,126724],{"style":126537,"src":126725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[171,126727,126728],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[171,126730,126731],{},"表单元素提交必须有name属性",[171,126733,126734],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[171,126736,126737],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[171,126739,77355,126740,126743],{},[26,126741,126742],{},"\u003Cinput>","输入表单元素",[1638,126745],{"style":126537,"src":126746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1638,126748],{"style":126537,"src":126749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[171,126751,126752,126753],{},"单选按钮：",[26,126754,126755],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1638,126757],{"style":126537,"src":126758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[171,126760,126761],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1638,126763],{"style":126537,"src":126764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[171,126766,126767,126770],{},[457,126768,126769],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[171,126772,126773],{},"②select下拉表单元素：可以节约页面控件",[1638,126775],{"style":126537,"src":126776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[171,126778,126779,13970,126781,126784,126785,126787,126788,126790],{},[457,126780,339],{},[26,126782,126783],{},"\u003Cselect>","中至少包含一对",[26,126786,102843],{},"；在",[26,126789,102843],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[171,126792,126793,126794,126797],{},"③",[26,126795,126796],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1638,126799],{"style":126537,"src":126800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[171,126802,126803],{},"3行20列",[14,126805,126807,126808,102822],{"id":126806},"_55-lable标签","5.5 ",[26,126809,126810],{},"\u003Clable>",[171,126812,126813,126814,126816,126817,126819],{},"它不是表单标签，但常常与表单标签搭配使用，",[26,126815,126810],{},"标签用于绑定一个表单标签，当点击",[26,126818,126810],{},"标签内的文本",[171,126821,126822],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1638,126824],{"style":126537,"src":126825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1638,126827],{"style":126537,"src":126828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126830,126832],{"id":126831},"_56-实例","5.6 实例",[1638,126834],{"style":126537,"src":126835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[223,126837,126838],{},"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":24,"searchDepth":43,"depth":43,"links":126840},[126841,126842,126843,126844,126845,126847],{"id":126562,"depth":43,"text":126563},{"id":126619,"depth":43,"text":126620},{"id":126641,"depth":43,"text":126642},{"id":126711,"depth":43,"text":126712},{"id":126806,"depth":43,"text":126846},"5.5 \u003Clable>标签",{"id":126831,"depth":43,"text":126832},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126554,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126854,"title":126855,"body":126856,"description":230,"extension":231,"meta":127405,"navigation":233,"path":127406,"seo":127407,"stem":127408,"__hash__":127409},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126857,"toc":127380},[126858,126861,126865,126868,126871,126875,126878,126881,126884,126887,126890,126893,126896,126900,126903,126907,126910,126913,126916,126920,126923,126926,126929,126935,126938,126941,126944,126947,126950,126953,126956,126989,126993,126996,126999,127002,127006,127009,127012,127015,127018,127021,127025,127028,127031,127034,127038,127041,127045,127048,127052,127055,127060,127064,127067,127071,127074,127077,127080,127083,127110,127113,127117,127120,127123,127128,127131,127134,127138,127141,127146,127149,127152,127155,127159,127162,127165,127168,127172,127175,127178,127181,127185,127189,127192,127232,127235,127239,127246,127249,127253,127256,127302,127306,127309,127312,127315,127343,127347,127350,127377],[10,126859,126855],{"id":126860},"_6-css语法与文本样式",[14,126862,126864],{"id":126863},"_61-css语法规范","6.1 css语法规范",[171,126866,126867],{},"由两部分组成，选择器及一条或多条声明",[1638,126869],{"style":126537,"src":126870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[171,126872,126873],{},[457,126874,339],{},[171,126876,126877],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[171,126879,126880],{},"②属性与属性值以“键值对”的形式出现",[171,126882,126883],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[171,126885,126886],{},"④属性和属性值之间用英文“;”分开",[1638,126888],{"style":126537,"src":126889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1638,126891],{"style":126537,"src":126892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1638,126894],{"style":126537,"src":126895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126897,126899],{"id":126898},"_62-css选择器","6.2 css选择器",[171,126901,126902],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[275,126904,126906],{"id":126905},"_621-标签选择器","6.2.1 标签选择器",[171,126908,126909],{},"①优点：能快速为页面中同类型的标签统一设置样式",[171,126911,126912],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1638,126914],{"style":126537,"src":126915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[275,126917,126919],{"id":126918},"_622-类选择器","6.2.2 类选择器",[171,126921,126922],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[171,126924,126925],{},"②样例",[1638,126927],{"style":126537,"src":126928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[171,126930,126931,126932,126934],{},"③ ",[457,126933,126769],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[171,126936,126937],{},"可以理解为给这个标签起了个名字，来表示；",[171,126939,126940],{},"长名称或词组可以使用横线来为选择器命名；",[171,126942,126943],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[171,126945,126946],{},"命名要有意义；",[1638,126948],{"style":126537,"src":126949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[171,126951,126952],{},"类选择器也可以指定特殊的元素p.center{}",[171,126954,126955],{},"p.center和.center都对",[19,126957,126959],{"className":126681,"code":126958,"language":126683,"meta":24,"style":24},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[26,126960,126961,126966,126975,126985],{"__ignoreMap":24},[29,126962,126963],{"class":31,"line":32},[29,126964,126965],{"class":367},"\u002F* 类选择器指定特殊元素 *\u002F\n",[29,126967,126968,126970,126973],{"class":31,"line":43},[29,126969,171],{"class":51429},[29,126971,126972],{"class":35},".center",[29,126974,15747],{"class":309},[29,126976,126977,126979,126981,126983],{"class":31,"line":51},[29,126978,70655],{"class":39},[29,126980,51566],{"class":309},[29,126982,51721],{"class":39},[29,126984,1468],{"class":309},[29,126986,126987],{"class":31,"line":59},[29,126988,1741],{"class":309},[275,126990,126992],{"id":126991},"_623-多类名使用","6.2.3 多类名使用",[171,126994,126995],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1638,126997],{"style":126537,"src":126998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[171,127000,127001],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[275,127003,127005],{"id":127004},"_624-id选择器","6.2.4 id选择器",[171,127007,127008],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[171,127010,127011],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1638,127013],{"style":126537,"src":127014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[171,127016,127017],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[171,127019,127020],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[275,127022,127024],{"id":127023},"_625-通配符选择器","6.2.5 通配符选择器",[171,127026,127027],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[171,127029,127030],{},"* {",[171,127032,127033],{},"color=\"red\"}",[275,127035,127037],{"id":127036},"_626-总结","6.2.6 总结",[1638,127039],{"style":126537,"src":127040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127042,127044],{"id":127043},"_63-css字体属性","6.3 css字体属性",[171,127046,127047],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[275,127049,127051],{"id":127050},"_631-字体系列","6.3.1 字体系列",[171,127053,127054],{},"font-family: '宋体';",[171,127056,127057,127059],{},[457,127058,339],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[275,127061,127063],{"id":127062},"_632-字体大小","6.3.2 字体大小",[171,127065,127066],{},"font-size: 20px",[171,127068,127069,26602],{},[457,127070,126769],{},[171,127072,127073],{},"①px（像素）大小是网页的最常用单位",[171,127075,127076],{},"②谷歌浏览器默认为16px",[171,127078,127079],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[171,127081,127082],{},"④可以给body指定整个页面的大小：会自动引用",[19,127084,127086],{"className":126681,"code":127085,"language":126683,"meta":24,"style":24},"body {\n  font-size: 16px;\n}\n",[26,127087,127088,127094,127106],{"__ignoreMap":24},[29,127089,127090,127092],{"class":31,"line":32},[29,127091,51929],{"class":51429},[29,127093,15747],{"class":309},[29,127095,127096,127098,127100,127102,127104],{"class":31,"line":43},[29,127097,70755],{"class":39},[29,127099,51566],{"class":309},[29,127101,909],{"class":39},[29,127103,51621],{"class":305},[29,127105,1468],{"class":309},[29,127107,127108],{"class":31,"line":51},[29,127109,1741],{"class":309},[171,127111,127112],{},"⑤标题标签比较特殊，需要单独指定大小",[275,127114,127116],{"id":127115},"_633-字体粗细","6.3.3 字体粗细",[171,127118,127119],{},"font-weight: bold;",[171,127121,127122],{},"font-weight: 100；",[171,127124,127125,127127],{},[457,127126,339],{}," ①粗体文字变细：尽量别用normal，多用数字",[171,127129,127130],{},"font-weight= 400;",[171,127132,127133],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[275,127135,127137],{"id":127136},"_634-文字样式","6.3.4 文字样式",[171,127139,127140],{},"font-style: normal；",[171,127142,127143,26602],{},[457,127144,127145],{},"属性值",[171,127147,127148],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[171,127150,127151],{},"②italic：浏览器会显示斜体的字体样式",[1638,127153],{"style":126537,"src":127154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[275,127156,127158],{"id":127157},"_635-字体符合属性","6.3.5 字体符合属性",[1638,127160],{"style":126537,"src":127161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1638,127163],{"style":126537,"src":127164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[171,127166,127167],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[171,127169,127170,26602],{},[457,127171,126769],{},[171,127173,127174],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[171,127176,127177],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[171,127179,127180],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127182,127184],{"id":127183},"_64-css-test文本属性","6.4 css test文本属性",[275,127186,127188],{"id":127187},"_641-文本颜色","6.4.1 文本颜色",[171,127190,127191],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[19,127193,127195],{"className":126681,"code":127194,"language":126683,"meta":24,"style":24},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[26,127196,127197,127202,127208,127218,127223,127228],{"__ignoreMap":24},[29,127198,127199],{"class":31,"line":32},[29,127200,127201],{"class":367},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[29,127203,127204,127206],{"class":31,"line":43},[29,127205,171],{"class":51429},[29,127207,15747],{"class":309},[29,127209,127210,127212,127214,127216],{"class":31,"line":51},[29,127211,71034],{"class":39},[29,127213,51566],{"class":309},[29,127215,57550],{"class":39},[29,127217,1468],{"class":309},[29,127219,127220],{"class":31,"line":59},[29,127221,127222],{"class":367},"  \u002F* color: #ff0000; *\u002F\n",[29,127224,127225],{"class":31,"line":67},[29,127226,127227],{"class":367},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[29,127229,127230],{"class":31,"line":75},[29,127231,1741],{"class":309},[1638,127233],{"style":126537,"src":127234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[275,127236,127238],{"id":127237},"_642-对齐文本","6.4.2 对齐文本",[171,127240,127241,127242,127245],{},"text-align属于用于设置元素内文本内容的 ",[457,127243,127244],{},"水平对齐"," 方式",[171,127247,127248],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[275,127250,127252],{"id":127251},"_643-装饰文本","6.4.3 装饰文本",[171,127254,127255],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[19,127257,127259],{"className":126681,"code":127258,"language":126683,"meta":24,"style":24},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[26,127260,127261,127267,127277,127281,127287,127298],{"__ignoreMap":24},[29,127262,127263,127265],{"class":31,"line":32},[29,127264,546],{"class":51429},[29,127266,15747],{"class":309},[29,127268,127269,127271,127273,127275],{"class":31,"line":43},[29,127270,70631],{"class":39},[29,127272,51566],{"class":309},[29,127274,54866],{"class":39},[29,127276,1468],{"class":309},[29,127278,127279],{"class":31,"line":51},[29,127280,1741],{"class":309},[29,127282,127283,127285],{"class":31,"line":59},[29,127284,171],{"class":51429},[29,127286,15747],{"class":309},[29,127288,127289,127291,127293,127296],{"class":31,"line":67},[29,127290,70631],{"class":39},[29,127292,51566],{"class":309},[29,127294,127295],{"class":39},"underline",[29,127297,1468],{"class":309},[29,127299,127300],{"class":31,"line":75},[29,127301,1741],{"class":309},[275,127303,127305],{"id":127304},"_644-文本缩进","6.4.4 文本缩进",[171,127307,127308],{},"实现文本的第一行首行缩进自己指定的距离",[171,127310,127311],{},"20px往右边走；-20px往左边走",[171,127313,127314],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[19,127316,127318],{"className":126681,"code":127317,"language":126683,"meta":24,"style":24},"p {\n  text-indent: 2em;\n}\n",[26,127319,127320,127326,127339],{"__ignoreMap":24},[29,127321,127322,127324],{"class":31,"line":32},[29,127323,171],{"class":51429},[29,127325,15747],{"class":309},[29,127327,127328,127331,127333,127335,127337],{"class":31,"line":43},[29,127329,127330],{"class":39},"  text-indent",[29,127332,51566],{"class":309},[29,127334,386],{"class":39},[29,127336,23728],{"class":305},[29,127338,1468],{"class":309},[29,127340,127341],{"class":31,"line":51},[29,127342,1741],{"class":309},[275,127344,127346],{"id":127345},"_645-行间距","6.4.5 行间距",[171,127348,127349],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[19,127351,127353],{"className":126681,"code":127352,"language":126683,"meta":24,"style":24},"p {\n  line-height: 1.6;\n}\n",[26,127354,127355,127361,127373],{"__ignoreMap":24},[29,127356,127357,127359],{"class":31,"line":32},[29,127358,171],{"class":51429},[29,127360,15747],{"class":309},[29,127362,127363,127366,127368,127371],{"class":31,"line":43},[29,127364,127365],{"class":39},"  line-height",[29,127367,51566],{"class":309},[29,127369,127370],{"class":39},"1.6",[29,127372,1468],{"class":309},[29,127374,127375],{"class":31,"line":51},[29,127376,1741],{"class":309},[223,127378,127379],{},"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":24,"searchDepth":43,"depth":43,"links":127381},[127382,127383,127391,127398],{"id":126863,"depth":43,"text":126864},{"id":126898,"depth":43,"text":126899,"children":127384},[127385,127386,127387,127388,127389,127390],{"id":126905,"depth":51,"text":126906},{"id":126918,"depth":51,"text":126919},{"id":126991,"depth":51,"text":126992},{"id":127004,"depth":51,"text":127005},{"id":127023,"depth":51,"text":127024},{"id":127036,"depth":51,"text":127037},{"id":127043,"depth":43,"text":127044,"children":127392},[127393,127394,127395,127396,127397],{"id":127050,"depth":51,"text":127051},{"id":127062,"depth":51,"text":127063},{"id":127115,"depth":51,"text":127116},{"id":127136,"depth":51,"text":127137},{"id":127157,"depth":51,"text":127158},{"id":127183,"depth":43,"text":127184,"children":127399},[127400,127401,127402,127403,127404],{"id":127187,"depth":51,"text":127188},{"id":127237,"depth":51,"text":127238},{"id":127251,"depth":51,"text":127252},{"id":127304,"depth":51,"text":127305},{"id":127345,"depth":51,"text":127346},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126855,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127411,"title":127412,"body":127413,"description":230,"extension":231,"meta":128062,"navigation":233,"path":128063,"seo":128064,"stem":128065,"__hash__":128066},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127414,"toc":128043},[127415,127418,127422,127426,127486,127490,127500,127503,127506,127510,127535,127539,127542,127545,127548,127551,127554,127558,127561,127564,127606,127609,127635,127641,127644,127648,127652,127658,127661,127664,127667,127670,127673,127676,127721,127725,127728,127731,127735,127739,127768,127771,127776,127779,127782,127785,127788,127792,127796,127799,127801,127804,127808,127811,127815,127818,127821,127824,127828,127832,127838,127848,127851,127854,127857,127860,127863,127986,127994,128002,128040],[10,127416,127412],{"id":127417},"_7-css引入方式与选择器进阶",[14,127419,127421],{"id":127420},"_71-css引入方式","7.1 css引入方式",[275,127423,127425],{"id":127424},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[19,127427,127431],{"className":127428,"code":127429,"language":127430,"meta":24,"style":24},"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",[26,127432,127433,127441,127448,127460,127473,127478],{"__ignoreMap":24},[29,127434,127435,127437,127439],{"class":31,"line":32},[29,127436,1218],{"class":309},[29,127438,223],{"class":51429},[29,127440,51436],{"class":309},[29,127442,127443,127446],{"class":31,"line":43},[29,127444,127445],{"class":51429},"  h1",[29,127447,15747],{"class":309},[29,127449,127450,127453,127455,127458],{"class":31,"line":51},[29,127451,127452],{"class":39},"    color",[29,127454,51566],{"class":309},[29,127456,127457],{"class":39},"blue",[29,127459,1468],{"class":309},[29,127461,127462,127465,127467,127469,127471],{"class":31,"line":59},[29,127463,127464],{"class":39},"    font-size",[29,127466,51566],{"class":309},[29,127468,1108],{"class":39},[29,127470,51621],{"class":305},[29,127472,1468],{"class":309},[29,127474,127475],{"class":31,"line":67},[29,127476,127477],{"class":309},"  }\n",[29,127479,127480,127482,127484],{"class":31,"line":75},[29,127481,51914],{"class":309},[29,127483,223],{"class":51429},[29,127485,51436],{"class":309},[171,127487,127488,26602],{},[457,127489,126769],{},[171,127491,77355,127492,127495,127496,127499],{},[26,127493,127494],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[26,127497,127498],{},"\u003Chead>","标签中",[171,127501,127502],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[171,127504,127505],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[275,127507,127509],{"id":127508},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[19,127511,127513],{"className":127428,"code":127512,"language":127430,"meta":24,"style":24},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[26,127514,127515],{"__ignoreMap":24},[29,127516,127517,127519,127521,127523,127525,127528,127531,127533],{"class":31,"line":32},[29,127518,1218],{"class":309},[29,127520,171],{"class":51429},[29,127522,62755],{"class":35},[29,127524,355],{"class":309},[29,127526,127527],{"class":103},"\"color: red; font-size: 16px;\"",[29,127529,127530],{"class":309},">这是一个段落\u003C\u002F",[29,127532,171],{"class":51429},[29,127534,51436],{"class":309},[171,127536,127537,26602],{},[457,127538,126769],{},[171,127540,127541],{},"①style其实就是标签的属性",[171,127543,127544],{},"②在双引号中间，写法要符合css规范",[171,127546,127547],{},"③可以控制当前的标签设置样式",[171,127549,127550],{},"④书写繁琐，简单时才用",[171,127552,127553],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[275,127555,127557],{"id":127556},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[171,127559,127560],{},"使用最多，单独建一个css文件，然后html引用",[171,127562,127563],{},"①css文件部分： style.css",[19,127565,127567],{"className":126681,"code":127566,"language":126683,"meta":24,"style":24},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[26,127568,127569,127574,127580,127590,127602],{"__ignoreMap":24},[29,127570,127571],{"class":31,"line":32},[29,127572,127573],{"class":367},"\u002F* style.css *\u002F\n",[29,127575,127576,127578],{"class":31,"line":43},[29,127577,10],{"class":51429},[29,127579,15747],{"class":309},[29,127581,127582,127584,127586,127588],{"class":31,"line":51},[29,127583,71034],{"class":39},[29,127585,51566],{"class":309},[29,127587,127457],{"class":39},[29,127589,1468],{"class":309},[29,127591,127592,127594,127596,127598,127600],{"class":31,"line":59},[29,127593,70755],{"class":39},[29,127595,51566],{"class":309},[29,127597,1108],{"class":39},[29,127599,51621],{"class":305},[29,127601,1468],{"class":309},[29,127603,127604],{"class":31,"line":67},[29,127605,1741],{"class":309},[171,127607,127608],{},"②html部分",[19,127610,127612],{"className":127428,"code":127611,"language":127430,"meta":24,"style":24},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[26,127613,127614],{"__ignoreMap":24},[29,127615,127616,127618,127620,127622,127624,127626,127628,127630,127633],{"class":31,"line":32},[29,127617,1218],{"class":309},[29,127619,69134],{"class":51429},[29,127621,69137],{"class":35},[29,127623,355],{"class":309},[29,127625,69142],{"class":103},[29,127627,61186],{"class":35},[29,127629,355],{"class":309},[29,127631,127632],{"class":103},"\"style.css\"",[29,127634,51436],{"class":309},[171,127636,127637,127640],{},[26,127638,127639],{},"\u003Chr>","水平线标签（但是不常用！）",[171,127642,127643],{},"ctrl+0回到页面原来大小",[14,127645,127647],{"id":127646},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[275,127649,127651],{"id":127650},"_721-快速生成html","7.2.1 快速生成html",[171,127653,127654,127655],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[26,127656,127657],{},"\u003Cdiv>``\u003C\u002Fdiv>",[171,127659,127660],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[171,127662,127663],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[171,127665,127666],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[171,127668,127669],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[171,127671,127672],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[171,127674,127675],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[19,127677,127679],{"className":127428,"code":127678,"language":127430,"meta":24,"style":24},"\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",[26,127680,127681,127686,127691,127696,127701,127706,127711,127716],{"__ignoreMap":24},[29,127682,127683],{"class":31,"line":32},[29,127684,127685],{"class":367},"\u003C!-- Emmet 语法示例 -->\n",[29,127687,127688],{"class":31,"line":43},[29,127689,127690],{"class":367},"\u003C!-- div*3        → 生成3个div -->\n",[29,127692,127693],{"class":31,"line":51},[29,127694,127695],{"class":367},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[29,127697,127698],{"class":31,"line":59},[29,127699,127700],{"class":367},"\u003C!-- div+p        → 兄弟div和p -->\n",[29,127702,127703],{"class":31,"line":67},[29,127704,127705],{"class":367},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[29,127707,127708],{"class":31,"line":75},[29,127709,127710],{"class":367},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[29,127712,127713],{"class":31,"line":83},[29,127714,127715],{"class":367},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[29,127717,127718],{"class":31,"line":158},[29,127719,127720],{"class":367},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[275,127722,127724],{"id":127723},"_722-快速生成css","7.2.2 快速生成css",[171,127726,127727],{},"简写开头",[171,127729,127730],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127732,127734],{"id":127733},"_73-css复合选择器","7.3 css复合选择器",[275,127736,127738],{"id":127737},"_731-后代选择器","7.3.1 后代选择器",[19,127740,127742],{"className":126681,"code":127741,"language":126683,"meta":24,"style":24},".parent .child {\n  color: blue;\n}\n",[26,127743,127744,127754,127764],{"__ignoreMap":24},[29,127745,127746,127749,127752],{"class":31,"line":32},[29,127747,127748],{"class":35},".parent",[29,127750,127751],{"class":35}," .child",[29,127753,15747],{"class":309},[29,127755,127756,127758,127760,127762],{"class":31,"line":43},[29,127757,71034],{"class":39},[29,127759,51566],{"class":309},[29,127761,127457],{"class":39},[29,127763,1468],{"class":309},[29,127765,127766],{"class":31,"line":51},[29,127767,1741],{"class":309},[171,127769,127770],{},"元素1 元素2 {样式声明}",[171,127772,127773],{},[457,127774,127775],{},"注意点:",[171,127777,127778],{},"①元素1和元素2中间用空格隔开",[171,127780,127781],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[171,127783,127784],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[171,127786,127787],{},"④元素1和元素2可以是任意基础选择器",[275,127789,127791],{"id":127790},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[171,127793,127794],{},[457,127795,127775],{},[171,127797,127798],{},"①元素1和元素2中间用大于号隔开",[171,127800,127781],{},[171,127802,127803],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[275,127805,127807],{"id":127806},"_733-并集选择器","7.3.3 并集选择器",[171,127809,127810],{},"元素1，元素2 {样式声明}",[171,127812,127813],{},[457,127814,127775],{},[171,127816,127817],{},"①元素1和元素2中间用逗号隔开",[171,127819,127820],{},"②逗号可以理解为和的意思",[171,127822,127823],{},"③并集选择器通常用于集体声明",[275,127825,127827],{"id":127826},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[171,127829,127830],{},[457,127831,127775],{},[171,127833,127834,127835,127837],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69134,127836],{},"－:visited－:hover－:active。",[171,127839,127840,127841,127844,127845,25869],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127842,127843],"hover",{}," 、 ",[127846,127847],"first-child",{},[171,127849,127850],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[171,127852,127853],{},"link对没访问的进行设置",[171,127855,127856],{},"vistied对已访问的进行改变",[171,127858,127859],{},"hover鼠标经过就会变",[171,127861,127862],{},"active常按(点)就会变",[19,127864,127866],{"className":126681,"code":127865,"language":126683,"meta":24,"style":24},"\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",[26,127867,127868,127873,127882,127892,127902,127906,127915,127926,127930,127938,127948,127958,127962,127971,127982],{"__ignoreMap":24},[29,127869,127870],{"class":31,"line":32},[29,127871,127872],{"class":367},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[29,127874,127875,127877,127880],{"class":31,"line":43},[29,127876,546],{"class":51429},[29,127878,127879],{"class":35},":link",[29,127881,15747],{"class":309},[29,127883,127884,127886,127888,127890],{"class":31,"line":51},[29,127885,71034],{"class":39},[29,127887,51566],{"class":309},[29,127889,62498],{"class":39},[29,127891,1468],{"class":309},[29,127893,127894,127896,127898,127900],{"class":31,"line":59},[29,127895,70631],{"class":39},[29,127897,51566],{"class":309},[29,127899,54866],{"class":39},[29,127901,1468],{"class":309},[29,127903,127904],{"class":31,"line":67},[29,127905,1741],{"class":309},[29,127907,127908,127910,127913],{"class":31,"line":75},[29,127909,546],{"class":51429},[29,127911,127912],{"class":35},":visited",[29,127914,15747],{"class":309},[29,127916,127917,127919,127921,127924],{"class":31,"line":83},[29,127918,71034],{"class":39},[29,127920,51566],{"class":309},[29,127922,127923],{"class":39},"purple",[29,127925,1468],{"class":309},[29,127927,127928],{"class":31,"line":158},[29,127929,1741],{"class":309},[29,127931,127932,127934,127936],{"class":31,"line":166},[29,127933,546],{"class":51429},[29,127935,61069],{"class":35},[29,127937,15747],{"class":309},[29,127939,127940,127942,127944,127946],{"class":31,"line":1505},[29,127941,71034],{"class":39},[29,127943,51566],{"class":309},[29,127945,55018],{"class":39},[29,127947,1468],{"class":309},[29,127949,127950,127952,127954,127956],{"class":31,"line":1788},[29,127951,70631],{"class":39},[29,127953,51566],{"class":309},[29,127955,127295],{"class":39},[29,127957,1468],{"class":309},[29,127959,127960],{"class":31,"line":1793},[29,127961,1741],{"class":309},[29,127963,127964,127966,127969],{"class":31,"line":1799},[29,127965,546],{"class":51429},[29,127967,127968],{"class":35},":active",[29,127970,15747],{"class":309},[29,127972,127973,127975,127977,127980],{"class":31,"line":1804},[29,127974,71034],{"class":39},[29,127976,51566],{"class":309},[29,127978,127979],{"class":39},"green",[29,127981,1468],{"class":309},[29,127983,127984],{"class":31,"line":1818},[29,127985,1741],{"class":309},[275,127987,127989,127990,127993],{"id":127988},"_735-伪类选择器","7.3.5 ",[127991,127992],"focus",{},"伪类选择器",[171,127995,127996,127998,127999,128001],{},[127991,127997],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[26,128000,126742],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[19,128003,128005],{"className":126681,"code":128004,"language":126683,"meta":24,"style":24},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[26,128006,128007,128015,128026,128036],{"__ignoreMap":24},[29,128008,128009,128011,128013],{"class":31,"line":32},[29,128010,53950],{"class":51429},[29,128012,62029],{"class":35},[29,128014,15747],{"class":309},[29,128016,128017,128020,128022,128024],{"class":31,"line":43},[29,128018,128019],{"class":39},"  border-color",[29,128021,51566],{"class":309},[29,128023,55018],{"class":39},[29,128025,1468],{"class":309},[29,128027,128028,128030,128032,128034],{"class":31,"line":51},[29,128029,70927],{"class":39},[29,128031,51566],{"class":309},[29,128033,54866],{"class":39},[29,128035,1468],{"class":309},[29,128037,128038],{"class":31,"line":59},[29,128039,1741],{"class":309},[223,128041,128042],{},"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":24,"searchDepth":43,"depth":43,"links":128044},[128045,128050,128054],{"id":127420,"depth":43,"text":127421,"children":128046},[128047,128048,128049],{"id":127424,"depth":51,"text":127425},{"id":127508,"depth":51,"text":127509},{"id":127556,"depth":51,"text":127557},{"id":127646,"depth":43,"text":127647,"children":128051},[128052,128053],{"id":127650,"depth":51,"text":127651},{"id":127723,"depth":51,"text":127724},{"id":127733,"depth":43,"text":127734,"children":128055},[128056,128057,128058,128059,128060],{"id":127737,"depth":51,"text":127738},{"id":127790,"depth":51,"text":127791},{"id":127806,"depth":51,"text":127807},{"id":127826,"depth":51,"text":127827},{"id":127988,"depth":51,"text":128061},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127412,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128068,"title":128069,"body":128070,"description":230,"extension":231,"meta":129993,"navigation":233,"path":129994,"seo":129995,"stem":129996,"__hash__":129997},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128071,"toc":129967},[128072,128075,128079,128088,128092,128118,128123,128126,128129,128132,128135,128139,128142,128152,128160,128164,128199,128204,128207,128210,128213,128216,128220,128223,128232,128236,128249,128254,128257,128260,128263,128267,128270,128274,128277,128332,128335,128366,128369,128423,128427,128430,128596,128719,128722,128725,128728,128731,128735,128738,128742,128745,128748,128752,128755,128786,128813,128841,128844,128848,128874,128917,128921,129015,129018,129045,129048,129051,129054,129057,129060,129063,129066,129069,129072,129076,129133,129160,129164,129212,129216,129257,129259,129262,129265,129268,129271,129275,129367,129370,129373,129376,129380,129503,129704,129708,129712,129715,129718,129721,129725,129728,129731,129756,129759,129762,129765,129768,129771,129775,129783,129845,129848,129906,129909,129912,129915,129918,129921,129924,129927,129964],[10,128073,128069],{"id":128074},"_8-css显示模式与背景特性",[14,128076,128078],{"id":128077},"_81-css元素显示模式","8.1 css元素显示模式",[171,128080,128081,128082,128084,128085,128087],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[26,128083,126292],{},"自己占一行，比如一行可以放多个",[26,128086,126295],{},"，HTML 元素一般分为块元素和行内元素两种类型",[275,128089,128091],{"id":128090},"_811-块元素","8.1.1 块元素",[171,128093,128094,128095,128097,128098,520,128101,520,128103,520,128105,520,128108,520,128111,128114,128115,128117],{},"常见的块元素有",[26,128096,126196],{},"~",[26,128099,128100],{},"\u003Ch6>",[26,128102,126222],{},[26,128104,126292],{},[26,128106,128107],{},"\u003Cul>",[26,128109,128110],{},"\u003Col>",[26,128112,128113],{},"\u003Cli>","等，其中 ",[26,128116,126292],{}," 标签是最典型的块元素",[171,128119,128120],{},[457,128121,128122],{},"块级元素的特点：",[171,128124,128125],{},"① 比较霸道，自己独占一行。",[171,128127,128128],{},"② 高度，宽度、外边距以及内边距都可以控制。",[171,128130,128131],{},"③ 宽度默认是容器（父级宽度）的100%。",[171,128133,128134],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[171,128136,128137],{},[457,128138,339],{},[171,128140,128141],{},"①文字类的元素内不能使用块级元素",[171,128143,77378,128144,128146,128147,128149,128150],{},[26,128145,126222],{}," 标签主要用于存放文字，因此 ",[26,128148,126222],{}," 里面不能放块级元素，特别是不能放",[26,128151,126292],{},[171,128153,128154,128155,128097,128157,128159],{},"⑥同理， ",[26,128156,126196],{},[26,128158,128100],{},"等都是文字类块级标签，里面也不能放其他块级元素",[275,128161,128163],{"id":128162},"_812-行内元素","8.1.2 行内元素",[171,128165,128166,128167,520,128169,520,128172,520,128175,520,128178,520,128181,520,128184,520,128187,520,128190,520,128193,128195,128196,128198],{},"常见的行内元素有 ",[26,128168,126454],{},[26,128170,128171],{},"\u003Cstrong>",[26,128173,128174],{},"\u003Cb>",[26,128176,128177],{},"\u003Cem>",[26,128179,128180],{},"\u003Ci>",[26,128182,128183],{},"\u003Cdel>",[26,128185,128186],{},"\u003Cs>",[26,128188,128189],{},"\u003Cins>",[26,128191,128192],{},"\u003Cu>",[26,128194,126295],{}," 等，其中 ",[26,128197,126295],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[171,128200,128201],{},[457,128202,128203],{},"特点：",[171,128205,128206],{},"① 相邻行内元素在一行上，一行可以显示多个。",[171,128208,128209],{},"② 高、宽直接设置是无效的。",[171,128211,128212],{},"③ 默认宽度就是它本身内容的宽度。",[171,128214,128215],{},"④ 行内元素只能容纳文本或其他行内元素。",[171,128217,128218],{},[457,128219,339],{},[171,128221,128222],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[171,128224,128225,128226,128228,128229,128231],{},"②特殊情况链接 ",[26,128227,126454],{}," 里面可以放块级元素，但是给 ",[26,128230,126454],{}," 转换一下块级模式最安全",[275,128233,128235],{"id":128234},"_813-行内块元素","8.1.3 行内块元素",[171,128237,128238,128239,520,128242,520,128245,128248],{},"在行内元素中有几个特殊的标签 —— ",[26,128240,128241],{},"\u003Cimg \u002F>",[26,128243,128244],{},"\u003Cinput \u002F>",[26,128246,128247],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[171,128250,128251],{},[457,128252,128253],{},"行内块元素的特点：",[171,128255,128256],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[171,128258,128259],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[171,128261,128262],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[275,128264,128266],{"id":128265},"_814-总结","8.1.4 总结",[1638,128268],{"style":126537,"src":128269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[275,128271,128273],{"id":128272},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[171,128275,128276],{},"①转换为块元素：display:block;",[19,128278,128280],{"className":126681,"code":128279,"language":126683,"meta":24,"style":24},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[26,128281,128282,128287,128293,128304,128316,128328],{"__ignoreMap":24},[29,128283,128284],{"class":31,"line":32},[29,128285,128286],{"class":367},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[29,128288,128289,128291],{"class":31,"line":43},[29,128290,546],{"class":51429},[29,128292,15747],{"class":309},[29,128294,128295,128298,128300,128302],{"class":31,"line":51},[29,128296,128297],{"class":39},"  display",[29,128299,51566],{"class":309},[29,128301,60998],{"class":39},[29,128303,1468],{"class":309},[29,128305,128306,128308,128310,128312,128314],{"class":31,"line":59},[29,128307,70697],{"class":39},[29,128309,51566],{"class":309},[29,128311,619],{"class":39},[29,128313,51621],{"class":305},[29,128315,1468],{"class":309},[29,128317,128318,128320,128322,128324,128326],{"class":31,"line":67},[29,128319,70917],{"class":39},[29,128321,51566],{"class":309},[29,128323,709],{"class":39},[29,128325,51621],{"class":305},[29,128327,1468],{"class":309},[29,128329,128330],{"class":31,"line":75},[29,128331,1741],{"class":309},[171,128333,128334],{},"②转换为行内元素：display:inline;",[19,128336,128338],{"className":126681,"code":128337,"language":126683,"meta":24,"style":24},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[26,128339,128340,128345,128351,128362],{"__ignoreMap":24},[29,128341,128342],{"class":31,"line":32},[29,128343,128344],{"class":367},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[29,128346,128347,128349],{"class":31,"line":43},[29,128348,51740],{"class":51429},[29,128350,15747],{"class":309},[29,128352,128353,128355,128357,128360],{"class":31,"line":51},[29,128354,128297],{"class":39},[29,128356,51566],{"class":309},[29,128358,128359],{"class":39},"inline",[29,128361,1468],{"class":309},[29,128363,128364],{"class":31,"line":59},[29,128365,1741],{"class":309},[171,128367,128368],{},"③转换为行内块：display:inline-block;",[19,128370,128372],{"className":126681,"code":128371,"language":126683,"meta":24,"style":24},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[26,128373,128374,128379,128385,128395,128407,128419],{"__ignoreMap":24},[29,128375,128376],{"class":31,"line":32},[29,128377,128378],{"class":367},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[29,128380,128381,128383],{"class":31,"line":43},[29,128382,29],{"class":51429},[29,128384,15747],{"class":309},[29,128386,128387,128389,128391,128393],{"class":31,"line":51},[29,128388,128297],{"class":39},[29,128390,51566],{"class":309},[29,128392,72512],{"class":39},[29,128394,1468],{"class":309},[29,128396,128397,128399,128401,128403,128405],{"class":31,"line":59},[29,128398,70697],{"class":39},[29,128400,51566],{"class":309},[29,128402,920],{"class":39},[29,128404,51621],{"class":305},[29,128406,1468],{"class":309},[29,128408,128409,128411,128413,128415,128417],{"class":31,"line":67},[29,128410,70917],{"class":39},[29,128412,51566],{"class":309},[29,128414,1259],{"class":39},[29,128416,51621],{"class":305},[29,128418,1468],{"class":309},[29,128420,128421],{"class":31,"line":75},[29,128422,1741],{"class":309},[275,128424,128426],{"id":128425},"_816-小米侧边栏","8.1.6 小米侧边栏",[1638,128428],{"style":126537,"src":128429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[19,128431,128433],{"className":127428,"code":128432,"language":127430,"meta":24,"style":24},"\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",[26,128434,128435,128440,128455,128474,128493,128512,128531,128550,128569,128588],{"__ignoreMap":24},[29,128436,128437],{"class":31,"line":32},[29,128438,128439],{"class":367},"\u003C!-- 小米侧边栏案例 -->\n",[29,128441,128442,128444,128446,128448,128450,128453],{"class":31,"line":43},[29,128443,1218],{"class":309},[29,128445,51740],{"class":51429},[29,128447,53615],{"class":35},[29,128449,355],{"class":309},[29,128451,128452],{"class":103},"\"sidebar\"",[29,128454,51436],{"class":309},[29,128456,128457,128459,128461,128463,128465,128467,128470,128472],{"class":31,"line":51},[29,128458,52273],{"class":309},[29,128460,546],{"class":51429},[29,128462,61186],{"class":35},[29,128464,355],{"class":309},[29,128466,61191],{"class":103},[29,128468,128469],{"class":309},">手机 电话卡\u003C\u002F",[29,128471,546],{"class":51429},[29,128473,51436],{"class":309},[29,128475,128476,128478,128480,128482,128484,128486,128489,128491],{"class":31,"line":59},[29,128477,52273],{"class":309},[29,128479,546],{"class":51429},[29,128481,61186],{"class":35},[29,128483,355],{"class":309},[29,128485,61191],{"class":103},[29,128487,128488],{"class":309},">电视 盒子\u003C\u002F",[29,128490,546],{"class":51429},[29,128492,51436],{"class":309},[29,128494,128495,128497,128499,128501,128503,128505,128508,128510],{"class":31,"line":67},[29,128496,52273],{"class":309},[29,128498,546],{"class":51429},[29,128500,61186],{"class":35},[29,128502,355],{"class":309},[29,128504,61191],{"class":103},[29,128506,128507],{"class":309},">笔记本 平板\u003C\u002F",[29,128509,546],{"class":51429},[29,128511,51436],{"class":309},[29,128513,128514,128516,128518,128520,128522,128524,128527,128529],{"class":31,"line":75},[29,128515,52273],{"class":309},[29,128517,546],{"class":51429},[29,128519,61186],{"class":35},[29,128521,355],{"class":309},[29,128523,61191],{"class":103},[29,128525,128526],{"class":309},">出行 穿戴\u003C\u002F",[29,128528,546],{"class":51429},[29,128530,51436],{"class":309},[29,128532,128533,128535,128537,128539,128541,128543,128546,128548],{"class":31,"line":83},[29,128534,52273],{"class":309},[29,128536,546],{"class":51429},[29,128538,61186],{"class":35},[29,128540,355],{"class":309},[29,128542,61191],{"class":103},[29,128544,128545],{"class":309},">智能 路由器\u003C\u002F",[29,128547,546],{"class":51429},[29,128549,51436],{"class":309},[29,128551,128552,128554,128556,128558,128560,128562,128565,128567],{"class":31,"line":158},[29,128553,52273],{"class":309},[29,128555,546],{"class":51429},[29,128557,61186],{"class":35},[29,128559,355],{"class":309},[29,128561,61191],{"class":103},[29,128563,128564],{"class":309},">健康 儿童\u003C\u002F",[29,128566,546],{"class":51429},[29,128568,51436],{"class":309},[29,128570,128571,128573,128575,128577,128579,128581,128584,128586],{"class":31,"line":166},[29,128572,52273],{"class":309},[29,128574,546],{"class":51429},[29,128576,61186],{"class":35},[29,128578,355],{"class":309},[29,128580,61191],{"class":103},[29,128582,128583],{"class":309},">耳机 音响\u003C\u002F",[29,128585,546],{"class":51429},[29,128587,51436],{"class":309},[29,128589,128590,128592,128594],{"class":31,"line":1505},[29,128591,51914],{"class":309},[29,128593,51740],{"class":51429},[29,128595,51436],{"class":309},[19,128597,128599],{"className":126681,"code":128598,"language":126683,"meta":24,"style":24},".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",[26,128600,128601,128610,128620,128633,128645,128657,128669,128679,128690,128694,128704,128715],{"__ignoreMap":24},[29,128602,128603,128606,128608],{"class":31,"line":32},[29,128604,128605],{"class":35},".sidebar",[29,128607,1574],{"class":51429},[29,128609,15747],{"class":309},[29,128611,128612,128614,128616,128618],{"class":31,"line":43},[29,128613,128297],{"class":39},[29,128615,51566],{"class":309},[29,128617,60998],{"class":39},[29,128619,1468],{"class":309},[29,128621,128622,128624,128626,128629,128631],{"class":31,"line":51},[29,128623,70697],{"class":39},[29,128625,51566],{"class":309},[29,128627,128628],{"class":39},"234",[29,128630,51621],{"class":305},[29,128632,1468],{"class":309},[29,128634,128635,128637,128639,128641,128643],{"class":31,"line":59},[29,128636,70917],{"class":39},[29,128638,51566],{"class":309},[29,128640,760],{"class":39},[29,128642,51621],{"class":305},[29,128644,1468],{"class":309},[29,128646,128647,128649,128651,128653,128655],{"class":31,"line":67},[29,128648,127365],{"class":39},[29,128650,51566],{"class":309},[29,128652,760],{"class":39},[29,128654,51621],{"class":305},[29,128656,1468],{"class":309},[29,128658,128659,128661,128663,128665,128667],{"class":31,"line":75},[29,128660,70952],{"class":39},[29,128662,51566],{"class":309},[29,128664,1259],{"class":39},[29,128666,51621],{"class":305},[29,128668,1468],{"class":309},[29,128670,128671,128673,128675,128677],{"class":31,"line":83},[29,128672,71034],{"class":39},[29,128674,51566],{"class":309},[29,128676,60971],{"class":39},[29,128678,1468],{"class":309},[29,128680,128681,128683,128685,128688],{"class":31,"line":158},[29,128682,71007],{"class":39},[29,128684,51566],{"class":309},[29,128686,128687],{"class":39},"#55585a",[29,128689,1468],{"class":309},[29,128691,128692],{"class":31,"line":166},[29,128693,1741],{"class":309},[29,128695,128696,128698,128700,128702],{"class":31,"line":1505},[29,128697,128605],{"class":35},[29,128699,1574],{"class":51429},[29,128701,61069],{"class":35},[29,128703,15747],{"class":309},[29,128705,128706,128708,128710,128713],{"class":31,"line":1788},[29,128707,71007],{"class":39},[29,128709,51566],{"class":309},[29,128711,128712],{"class":39},"#ff6700",[29,128714,1468],{"class":309},[29,128716,128717],{"class":31,"line":1793},[29,128718,1741],{"class":309},[1638,128720],{"style":126537,"src":128721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[171,128723,128724],{},"行高=盒子高度：实现文字的垂直居中",[171,128726,128727],{},"原理讲解：",[1638,128729],{"style":126537,"src":128730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128732,128734],{"id":128733},"_82-css背景","8.2 css背景",[171,128736,128737],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[275,128739,128741],{"id":128740},"_821-背景颜色","8.2.1 背景颜色",[171,128743,128744],{},"background-color:颜色值;",[171,128746,128747],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[275,128749,128751],{"id":128750},"_822-背景图片","8.2.2 背景图片",[171,128753,128754],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[19,128756,128758],{"className":126681,"code":128757,"language":126683,"meta":24,"style":24},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[26,128759,128760,128766,128782],{"__ignoreMap":24},[29,128761,128762,128764],{"class":31,"line":32},[29,128763,51740],{"class":51429},[29,128765,15747],{"class":309},[29,128767,128768,128771,128773,128775,128777,128780],{"class":31,"line":43},[29,128769,128770],{"class":39},"  background-image",[29,128772,51566],{"class":309},[29,128774,61855],{"class":39},[29,128776,310],{"class":309},[29,128778,128779],{"class":5391},"images\u002Fbg.png",[29,128781,2894],{"class":309},[29,128783,128784],{"class":31,"line":51},[29,128785,1741],{"class":309},[445,128787,128788,128797],{},[448,128789,128790],{},[451,128791,128792,128795],{},[454,128793,128794],{"align":23911},"参数值",[454,128796,102825],{"align":23911},[492,128798,128799,128806],{},[451,128800,128801,128803],{},[497,128802,54866],{"align":23911},[497,128804,128805],{"align":23911},"无背景图（默认的）",[451,128807,128808,128810],{},[497,128809,61855],{"align":23911},[497,128811,128812],{"align":23911},"使用绝对或相对地址指定背景图像",[19,128814,128815],{"className":126681,"code":128757,"language":126683,"meta":24,"style":24},[26,128816,128817,128823,128837],{"__ignoreMap":24},[29,128818,128819,128821],{"class":31,"line":32},[29,128820,51740],{"class":51429},[29,128822,15747],{"class":309},[29,128824,128825,128827,128829,128831,128833,128835],{"class":31,"line":43},[29,128826,128770],{"class":39},[29,128828,51566],{"class":309},[29,128830,61855],{"class":39},[29,128832,310],{"class":309},[29,128834,128779],{"class":5391},[29,128836,2894],{"class":309},[29,128838,128839],{"class":31,"line":51},[29,128840,1741],{"class":309},[171,128842,128843],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[275,128845,128847],{"id":128846},"_823-背景平铺","8.2.3 背景平铺",[19,128849,128851],{"className":126681,"code":128850,"language":126683,"meta":24,"style":24},"div {\n  background-repeat: no-repeat;\n}\n",[26,128852,128853,128859,128870],{"__ignoreMap":24},[29,128854,128855,128857],{"class":31,"line":32},[29,128856,51740],{"class":51429},[29,128858,15747],{"class":309},[29,128860,128861,128864,128866,128868],{"class":31,"line":43},[29,128862,128863],{"class":39},"  background-repeat",[29,128865,51566],{"class":309},[29,128867,61865],{"class":39},[29,128869,1468],{"class":309},[29,128871,128872],{"class":31,"line":51},[29,128873,1741],{"class":309},[445,128875,128876,128884],{},[448,128877,128878],{},[451,128879,128880,128882],{},[454,128881,128794],{"align":23911},[454,128883,102825],{"align":23911},[492,128885,128886,128894,128901,128909],{},[451,128887,128888,128891],{},[497,128889,128890],{"align":23911},"repeat",[497,128892,128893],{"align":23911},"背景图像在纵向和横向上平铺（默认的）",[451,128895,128896,128898],{},[497,128897,61865],{"align":23911},[497,128899,128900],{"align":23911},"背景图像不平铺",[451,128902,128903,128906],{},[497,128904,128905],{"align":23911},"repeat-x",[497,128907,128908],{"align":23911},"背景图像在横向上平铺",[451,128910,128911,128914],{},[497,128912,128913],{"align":23911},"repeat-y",[497,128915,128916],{"align":23911},"背景图像在纵向平铺",[275,128918,128920],{"id":128919},"_824-背景图片位置","8.2.4 背景图片位置",[19,128922,128924],{"className":126681,"code":128923,"language":126683,"meta":24,"style":24},"\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",[26,128925,128926,128931,128937,128951,128955,128960,128966,128982,128986,128991,128997,129011],{"__ignoreMap":24},[29,128927,128928],{"class":31,"line":32},[29,128929,128930],{"class":367},"\u002F* 方位名词 *\u002F\n",[29,128932,128933,128935],{"class":31,"line":43},[29,128934,51740],{"class":51429},[29,128936,15747],{"class":309},[29,128938,128939,128942,128944,128946,128949],{"class":31,"line":51},[29,128940,128941],{"class":39},"  background-position",[29,128943,51566],{"class":309},[29,128945,51721],{"class":39},[29,128947,128948],{"class":39}," top",[29,128950,1468],{"class":309},[29,128952,128953],{"class":31,"line":59},[29,128954,1741],{"class":309},[29,128956,128957],{"class":31,"line":67},[29,128958,128959],{"class":367},"\u002F* 精确单位 *\u002F\n",[29,128961,128962,128964],{"class":31,"line":75},[29,128963,51740],{"class":51429},[29,128965,15747],{"class":309},[29,128967,128968,128970,128972,128974,128976,128978,128980],{"class":31,"line":83},[29,128969,128941],{"class":39},[29,128971,51566],{"class":309},[29,128973,1008],{"class":39},[29,128975,51621],{"class":305},[29,128977,57633],{"class":39},[29,128979,51621],{"class":305},[29,128981,1468],{"class":309},[29,128983,128984],{"class":31,"line":158},[29,128985,1741],{"class":309},[29,128987,128988],{"class":31,"line":166},[29,128989,128990],{"class":367},"\u002F* 混合单位 *\u002F\n",[29,128992,128993,128995],{"class":31,"line":1505},[29,128994,51740],{"class":51429},[29,128996,15747],{"class":309},[29,128998,128999,129001,129003,129005,129007,129009],{"class":31,"line":1788},[29,129000,128941],{"class":39},[29,129002,51566],{"class":309},[29,129004,1008],{"class":39},[29,129006,51621],{"class":305},[29,129008,17319],{"class":39},[29,129010,1468],{"class":309},[29,129012,129013],{"class":31,"line":1793},[29,129014,1741],{"class":309},[171,129016,129017],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[445,129019,129020,129028],{},[448,129021,129022],{},[451,129023,129024,129026],{},[454,129025,128794],{"align":23911},[454,129027,25998],{"align":23911},[492,129029,129030,129037],{},[451,129031,129032,129034],{},[497,129033,52097],{"align":23911},[497,129035,129036],{"align":23911},"百分数|由浮点数和单位标识符组成的长度值",[451,129038,129039,129042],{},[497,129040,129041],{"align":23911},"position",[497,129043,129044],{"align":23911},"top|center|bottom|left|center|right 方位名词",[171,129046,129047],{},"其他说明：",[171,129049,129050],{},"①参数是方位名词",[171,129052,129053],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[171,129055,129056],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[171,129058,129059],{},"②参数是精确单位",[171,129061,129062],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[171,129064,129065],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[171,129067,129068],{},"③参数是混合单位",[171,129070,129071],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[275,129073,129075],{"id":129074},"_825-背景图片固定","8.2.5 背景图片固定",[19,129077,129079],{"className":126681,"code":129078,"language":126683,"meta":24,"style":24},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[26,129080,129081,129086,129092,129104,129108,129113,129119,129129],{"__ignoreMap":24},[29,129082,129083],{"class":31,"line":32},[29,129084,129085],{"class":367},"\u002F* 背景滚动（默认） *\u002F\n",[29,129087,129088,129090],{"class":31,"line":43},[29,129089,51740],{"class":51429},[29,129091,15747],{"class":309},[29,129093,129094,129097,129099,129102],{"class":31,"line":51},[29,129095,129096],{"class":39},"  background-attachment",[29,129098,51566],{"class":309},[29,129100,129101],{"class":39},"scroll",[29,129103,1468],{"class":309},[29,129105,129106],{"class":31,"line":59},[29,129107,1741],{"class":309},[29,129109,129110],{"class":31,"line":67},[29,129111,129112],{"class":367},"\u002F* 背景固定 *\u002F\n",[29,129114,129115,129117],{"class":31,"line":75},[29,129116,51740],{"class":51429},[29,129118,15747],{"class":309},[29,129120,129121,129123,129125,129127],{"class":31,"line":83},[29,129122,129096],{"class":39},[29,129124,51566],{"class":309},[29,129126,86362],{"class":39},[29,129128,1468],{"class":309},[29,129130,129131],{"class":31,"line":158},[29,129132,1741],{"class":309},[445,129134,129135,129144],{},[448,129136,129137],{},[451,129138,129139,129142],{},[454,129140,129141],{"align":23911},"参数",[454,129143,102825],{"align":23911},[492,129145,129146,129153],{},[451,129147,129148,129150],{},[497,129149,129101],{"align":23911},[497,129151,129152],{"align":23911},"背景图像是随对象内容滚动",[451,129154,129155,129157],{},[497,129156,86362],{"align":23911},[497,129158,129159],{"align":23911},"背景图像固定",[275,129161,129163],{"id":129162},"_826-背景样式合写","8.2.6 背景样式合写",[19,129165,129167],{"className":126681,"code":129166,"language":126683,"meta":24,"style":24},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[26,129168,129169,129174,129180,129208],{"__ignoreMap":24},[29,129170,129171],{"class":31,"line":32},[29,129172,129173],{"class":367},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[29,129175,129176,129178],{"class":31,"line":43},[29,129177,51740],{"class":51429},[29,129179,15747],{"class":309},[29,129181,129182,129184,129186,129188,129191,129193,129195,129197,129199,129202,129204,129206],{"class":31,"line":51},[29,129183,70740],{"class":39},[29,129185,51566],{"class":309},[29,129187,60971],{"class":39},[29,129189,129190],{"class":39}," url",[29,129192,310],{"class":309},[29,129194,128779],{"class":5391},[29,129196,13889],{"class":309},[29,129198,61865],{"class":39},[29,129200,129201],{"class":39}," fixed",[29,129203,17319],{"class":39},[29,129205,128948],{"class":39},[29,129207,1468],{"class":309},[29,129209,129210],{"class":31,"line":59},[29,129211,1741],{"class":309},[275,129213,129215],{"id":129214},"_827-背景色半透明","8.2.7 背景色半透明",[19,129217,129219],{"className":126681,"code":129218,"language":126683,"meta":24,"style":24},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[26,129220,129221,129227,129253],{"__ignoreMap":24},[29,129222,129223,129225],{"class":31,"line":32},[29,129224,51740],{"class":51429},[29,129226,15747],{"class":309},[29,129228,129229,129231,129233,129235,129237,129239,129241,129243,129245,129247,129249,129251],{"class":31,"line":43},[29,129230,70740],{"class":39},[29,129232,51566],{"class":309},[29,129234,55239],{"class":39},[29,129236,310],{"class":309},[29,129238,499],{"class":39},[29,129240,12610],{"class":309},[29,129242,499],{"class":39},[29,129244,12610],{"class":309},[29,129246,499],{"class":39},[29,129248,12610],{"class":309},[29,129250,100650],{"class":39},[29,129252,2894],{"class":309},[29,129254,129255],{"class":31,"line":51},[29,129256,1741],{"class":309},[171,129258,99525],{},[171,129260,129261],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[171,129263,129264],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[171,129266,129267],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[171,129269,129270],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[275,129272,129274],{"id":129273},"_828-总结","8.2.8 总结",[445,129276,129277,129288],{},[448,129278,129279],{},[451,129280,129281,129284,129286],{},[454,129282,129283],{"align":23911},"属性",[454,129285,102825],{"align":23911},[454,129287,460],{"align":23911},[492,129289,129290,129301,129312,129323,129334,129345,129356],{},[451,129291,129292,129295,129298],{},[497,129293,129294],{"align":23911},"background-color",[497,129296,129297],{"align":23911},"背景颜色",[497,129299,129300],{"align":23911},"预定义的颜色值\u002F十六进制\u002FRGB代码",[451,129302,129303,129306,129309],{},[497,129304,129305],{"align":23911},"background-image",[497,129307,129308],{"align":23911},"背景图片",[497,129310,129311],{"align":23911},"url(图片路径)",[451,129313,129314,129317,129320],{},[497,129315,129316],{"align":23911},"background-repeat",[497,129318,129319],{"align":23911},"是否平铺",[497,129321,129322],{"align":23911},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[451,129324,129325,129328,129331],{},[497,129326,129327],{"align":23911},"background-position",[497,129329,129330],{"align":23911},"背景位置",[497,129332,129333],{"align":23911},"length\u002Fposition 分别是x和y坐标",[451,129335,129336,129339,129342],{},[497,129337,129338],{"align":23911},"background-attachment",[497,129340,129341],{"align":23911},"背景附着",[497,129343,129344],{"align":23911},"scroll(背景滚动) \u002Ffixed (背景固定)",[451,129346,129347,129350,129353],{},[497,129348,129349],{"align":23911},"背景简写",[497,129351,129352],{"align":23911},"书写更简单",[497,129354,129355],{"align":23911},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[451,129357,129358,129361,129364],{},[497,129359,129360],{"align":23911},"背景半透明",[497,129362,129363],{"align":23911},"背景颜色半透明",[497,129365,129366],{"align":23911},"background: rgba(0,0,0.3); 后面必须是4个值",[171,129368,129369],{},"颜色渐变：",[1638,129371],{"style":126537,"src":129372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1638,129374],{"style":126537,"src":129375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[275,129377,129379],{"id":129378},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[19,129381,129383],{"className":127428,"code":129382,"language":127430,"meta":24,"style":24},"\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",[26,129384,129385,129400,129419,129438,129457,129476,129495],{"__ignoreMap":24},[29,129386,129387,129389,129391,129393,129395,129398],{"class":31,"line":32},[29,129388,1218],{"class":309},[29,129390,51740],{"class":51429},[29,129392,53615],{"class":35},[29,129394,355],{"class":309},[29,129396,129397],{"class":103},"\"nav\"",[29,129399,51436],{"class":309},[29,129401,129402,129404,129406,129408,129410,129412,129415,129417],{"class":31,"line":43},[29,129403,52273],{"class":309},[29,129405,546],{"class":51429},[29,129407,61186],{"class":35},[29,129409,355],{"class":309},[29,129411,61191],{"class":103},[29,129413,129414],{"class":309},">五彩导航1\u003C\u002F",[29,129416,546],{"class":51429},[29,129418,51436],{"class":309},[29,129420,129421,129423,129425,129427,129429,129431,129434,129436],{"class":31,"line":51},[29,129422,52273],{"class":309},[29,129424,546],{"class":51429},[29,129426,61186],{"class":35},[29,129428,355],{"class":309},[29,129430,61191],{"class":103},[29,129432,129433],{"class":309},">五彩导航2\u003C\u002F",[29,129435,546],{"class":51429},[29,129437,51436],{"class":309},[29,129439,129440,129442,129444,129446,129448,129450,129453,129455],{"class":31,"line":59},[29,129441,52273],{"class":309},[29,129443,546],{"class":51429},[29,129445,61186],{"class":35},[29,129447,355],{"class":309},[29,129449,61191],{"class":103},[29,129451,129452],{"class":309},">五彩导航3\u003C\u002F",[29,129454,546],{"class":51429},[29,129456,51436],{"class":309},[29,129458,129459,129461,129463,129465,129467,129469,129472,129474],{"class":31,"line":67},[29,129460,52273],{"class":309},[29,129462,546],{"class":51429},[29,129464,61186],{"class":35},[29,129466,355],{"class":309},[29,129468,61191],{"class":103},[29,129470,129471],{"class":309},">五彩导航4\u003C\u002F",[29,129473,546],{"class":51429},[29,129475,51436],{"class":309},[29,129477,129478,129480,129482,129484,129486,129488,129491,129493],{"class":31,"line":75},[29,129479,52273],{"class":309},[29,129481,546],{"class":51429},[29,129483,61186],{"class":35},[29,129485,355],{"class":309},[29,129487,61191],{"class":103},[29,129489,129490],{"class":309},">五彩导航5\u003C\u002F",[29,129492,546],{"class":51429},[29,129494,51436],{"class":309},[29,129496,129497,129499,129501],{"class":31,"line":83},[29,129498,51914],{"class":309},[29,129500,51740],{"class":51429},[29,129502,51436],{"class":309},[19,129504,129506],{"className":126681,"code":129505,"language":126683,"meta":24,"style":24},".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",[26,129507,129508,129517,129527,129539,129551,129561,129573,129583,129587,129612,129635,129658,129681],{"__ignoreMap":24},[29,129509,129510,129513,129515],{"class":31,"line":32},[29,129511,129512],{"class":35},".nav",[29,129514,1574],{"class":51429},[29,129516,15747],{"class":309},[29,129518,129519,129521,129523,129525],{"class":31,"line":43},[29,129520,128297],{"class":39},[29,129522,51566],{"class":309},[29,129524,72512],{"class":39},[29,129526,1468],{"class":309},[29,129528,129529,129531,129533,129535,129537],{"class":31,"line":51},[29,129530,70697],{"class":39},[29,129532,51566],{"class":309},[29,129534,1125],{"class":39},[29,129536,51621],{"class":305},[29,129538,1468],{"class":309},[29,129540,129541,129543,129545,129547,129549],{"class":31,"line":59},[29,129542,70917],{"class":39},[29,129544,51566],{"class":309},[29,129546,1164],{"class":39},[29,129548,51621],{"class":305},[29,129550,1468],{"class":309},[29,129552,129553,129555,129557,129559],{"class":31,"line":67},[29,129554,70655],{"class":39},[29,129556,51566],{"class":309},[29,129558,51721],{"class":39},[29,129560,1468],{"class":309},[29,129562,129563,129565,129567,129569,129571],{"class":31,"line":75},[29,129564,127365],{"class":39},[29,129566,51566],{"class":309},[29,129568,1164],{"class":39},[29,129570,51621],{"class":305},[29,129572,1468],{"class":309},[29,129574,129575,129577,129579,129581],{"class":31,"line":83},[29,129576,71034],{"class":39},[29,129578,51566],{"class":309},[29,129580,60971],{"class":39},[29,129582,1468],{"class":309},[29,129584,129585],{"class":31,"line":158},[29,129586,1741],{"class":309},[29,129588,129589,129591,129593,129596,129598,129600,129603,129605,129607,129609],{"class":31,"line":166},[29,129590,129512],{"class":35},[29,129592,1574],{"class":51429},[29,129594,129595],{"class":35},":nth-child",[29,129597,310],{"class":309},[29,129599,525],{"class":39},[29,129601,129602],{"class":309},") { ",[29,129604,129294],{"class":39},[29,129606,51566],{"class":309},[29,129608,128712],{"class":39},[29,129610,129611],{"class":309},"; }\n",[29,129613,129614,129616,129618,129620,129622,129624,129626,129628,129630,129633],{"class":31,"line":1505},[29,129615,129512],{"class":35},[29,129617,1574],{"class":51429},[29,129619,129595],{"class":35},[29,129621,310],{"class":309},[29,129623,386],{"class":39},[29,129625,129602],{"class":309},[29,129627,129294],{"class":39},[29,129629,51566],{"class":309},[29,129631,129632],{"class":39},"#ff0000",[29,129634,129611],{"class":309},[29,129636,129637,129639,129641,129643,129645,129647,129649,129651,129653,129656],{"class":31,"line":1788},[29,129638,129512],{"class":35},[29,129640,1574],{"class":51429},[29,129642,129595],{"class":35},[29,129644,310],{"class":309},[29,129646,380],{"class":39},[29,129648,129602],{"class":309},[29,129650,129294],{"class":39},[29,129652,51566],{"class":309},[29,129654,129655],{"class":39},"#00a4ff",[29,129657,129611],{"class":309},[29,129659,129660,129662,129664,129666,129668,129670,129672,129674,129676,129679],{"class":31,"line":1793},[29,129661,129512],{"class":35},[29,129663,1574],{"class":51429},[29,129665,129595],{"class":35},[29,129667,310],{"class":309},[29,129669,601],{"class":39},[29,129671,129602],{"class":309},[29,129673,129294],{"class":39},[29,129675,51566],{"class":309},[29,129677,129678],{"class":39},"#ff00ff",[29,129680,129611],{"class":309},[29,129682,129683,129685,129687,129689,129691,129693,129695,129697,129699,129702],{"class":31,"line":1799},[29,129684,129512],{"class":35},[29,129686,1574],{"class":51429},[29,129688,129595],{"class":35},[29,129690,310],{"class":309},[29,129692,627],{"class":39},[29,129694,129602],{"class":309},[29,129696,129294],{"class":39},[29,129698,51566],{"class":309},[29,129700,129701],{"class":39},"#00ff00",[29,129703,129611],{"class":309},[14,129705,129707],{"id":129706},"_83-css三大特性","8.3 css三大特性",[275,129709,129711],{"id":129710},"_831-层叠性","8.3.1 层叠性",[171,129713,129714],{},"为了解决样式冲突问题",[171,129716,129717],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[171,129719,129720],{},"   ②样式不冲突，不会层叠",[275,129722,129724],{"id":129723},"_832-继承性","8.3.2 继承性",[171,129726,129727],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[171,129729,129730],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[19,129732,129734],{"className":126681,"code":129733,"language":126683,"meta":24,"style":24},"p {\n  color: #333;\n}\n",[26,129735,129736,129742,129752],{"__ignoreMap":24},[29,129737,129738,129740],{"class":31,"line":32},[29,129739,171],{"class":51429},[29,129741,15747],{"class":309},[29,129743,129744,129746,129748,129750],{"class":31,"line":43},[29,129745,71034],{"class":39},[29,129747,51566],{"class":309},[29,129749,62498],{"class":39},[29,129751,1468],{"class":309},[29,129753,129754],{"class":31,"line":51},[29,129755,1741],{"class":309},[1638,129757],{"style":126537,"src":129758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[171,129760,129761],{},"解释：①行高可以跟单位也可以不跟单位",[171,129763,129764],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[171,129766,129767],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[171,129769,129770],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[275,129772,129774],{"id":129773},"_833-优先级","8.3.3 优先级",[259,129776,129777,129780],{},[178,129778,129779],{},"选择器相同，则执行层叠性",[178,129781,129782],{},"选择器不同，则根据选择器权重执行",[445,129784,129785,129795],{},[448,129786,129787],{},[451,129788,129789,129792],{},[454,129790,129791],{"align":23911},"选择器",[454,129793,129794],{"align":23911},"选择器权重",[492,129796,129797,129805,129813,129821,129829,129837],{},[451,129798,129799,129802],{},[497,129800,129801],{"align":23911},"继承 或者*",[497,129803,129804],{"align":23911},"0，0，0，0",[451,129806,129807,129810],{},[497,129808,129809],{"align":23911},"标签选择器",[497,129811,129812],{"align":23911},"0，0，0，1",[451,129814,129815,129818],{},[497,129816,129817],{"align":23911},"类选择器，伪类选择器",[497,129819,129820],{"align":23911},"0，0，1，0",[451,129822,129823,129826],{},[497,129824,129825],{"align":23911},"ID选择器",[497,129827,129828],{"align":23911},"0，1，0，0",[451,129830,129831,129834],{},[497,129832,129833],{"align":23911},"行内样式",[497,129835,129836],{"align":23911},"1，0，0，0",[451,129838,129839,129842],{},[497,129840,129841],{"align":23911},"！important",[497,129843,129844],{"align":23911},"无穷大",[171,129846,129847],{},"! important用法：",[19,129849,129851],{"className":126681,"code":129850,"language":126683,"meta":24,"style":24},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[26,129852,129853,129858,129864,129877,129881,129886,129892,129902],{"__ignoreMap":24},[29,129854,129855],{"class":31,"line":32},[29,129856,129857],{"class":367},"\u002F* !important 拥有最高优先级 *\u002F\n",[29,129859,129860,129862],{"class":31,"line":43},[29,129861,51740],{"class":51429},[29,129863,15747],{"class":309},[29,129865,129866,129868,129870,129872,129875],{"class":31,"line":51},[29,129867,71034],{"class":39},[29,129869,51566],{"class":309},[29,129871,51774],{"class":39},[29,129873,129874],{"class":305}," !important",[29,129876,1468],{"class":309},[29,129878,129879],{"class":31,"line":59},[29,129880,1741],{"class":309},[29,129882,129883],{"class":31,"line":67},[29,129884,129885],{"class":367},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[29,129887,129888,129890],{"class":31,"line":75},[29,129889,51740],{"class":51429},[29,129891,15747],{"class":309},[29,129893,129894,129896,129898,129900],{"class":31,"line":83},[29,129895,71034],{"class":39},[29,129897,51566],{"class":309},[29,129899,57550],{"class":39},[29,129901,1468],{"class":309},[29,129903,129904],{"class":31,"line":158},[29,129905,1741],{"class":309},[171,129907,129908],{},"优先级注意点：",[171,129910,129911],{},"①权重是有4组数字组成,但是不会有进位",[171,129913,129914],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[171,129916,129917],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[171,129919,129920],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[171,129922,129923],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[171,129925,129926],{},"⑥复合选择器",[445,129928,129929,129939],{},[448,129930,129931],{},[451,129932,129933,129936],{},[454,129934,129935],{"align":23911},"div ul li",[454,129937,129938],{"align":23911},"0,0,0,3",[492,129940,129941,129949,129957],{},[451,129942,129943,129946],{},[497,129944,129945],{"align":23911},".nav ul li",[497,129947,129948],{"align":23911},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[451,129950,129951,129954],{},[497,129952,129953],{"align":23911},"a:hover",[497,129955,129956],{"align":23911},"0,0,1,1",[451,129958,129959,129962],{},[497,129960,129961],{"align":23911},".nav a",[497,129963,129956],{"align":23911},[223,129965,129966],{},"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":24,"searchDepth":43,"depth":43,"links":129968},[129969,129977,129988],{"id":128077,"depth":43,"text":128078,"children":129970},[129971,129972,129973,129974,129975,129976],{"id":128090,"depth":51,"text":128091},{"id":128162,"depth":51,"text":128163},{"id":128234,"depth":51,"text":128235},{"id":128265,"depth":51,"text":128266},{"id":128272,"depth":51,"text":128273},{"id":128425,"depth":51,"text":128426},{"id":128733,"depth":43,"text":128734,"children":129978},[129979,129980,129981,129982,129983,129984,129985,129986,129987],{"id":128740,"depth":51,"text":128741},{"id":128750,"depth":51,"text":128751},{"id":128846,"depth":51,"text":128847},{"id":128919,"depth":51,"text":128920},{"id":129074,"depth":51,"text":129075},{"id":129162,"depth":51,"text":129163},{"id":129214,"depth":51,"text":129215},{"id":129273,"depth":51,"text":129274},{"id":129378,"depth":51,"text":129379},{"id":129706,"depth":43,"text":129707,"children":129989},[129990,129991,129992],{"id":129710,"depth":51,"text":129711},{"id":129723,"depth":51,"text":129724},{"id":129773,"depth":51,"text":129774},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128069,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129999,"title":130000,"body":130001,"description":230,"extension":231,"meta":131591,"navigation":233,"path":131592,"seo":131593,"stem":131594,"__hash__":131595},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130002,"toc":131570},[130003,130006,130010,130013,130016,130019,130022,130025,130028,130031,130035,130043,130080,130116,130119,130133,130138,130172,130175,130268,130273,130276,130306,130309,130314,130322,130326,130333,130379,130423,130428,130431,130434,130437,130440,130443,130446,130448,130451,130455,130460,130504,130509,130512,130515,130552,130557,130560,130563,130566,130569,130601,130604,130607,130610,130642,130645,130648,130651,130655,130658,130690,130693,130697,130717,130720,130728,130731,130735,130740,130743,130775,130780,130783,130821,130825,130830,130833,130836,130867,130870,130887,130892,130944,131004,131009,131063,131101,131105,131109,131112,131116,131124,131127,131129,131140,131145,131193,131227,131230,131233,131236,131239,131283,131286,131289,131292,131295,131298,131301,131345,131348,131351,131354,131357,131360,131363,131369,131372,131416,131419,131422,131425,131428,131431,131475,131478,131480,131483,131487,131491,131529,131533,131536,131539,131543,131551,131555,131558,131561,131564,131567],[10,130004,130000],{"id":130005},"_9-css盒模型浮动与切图",[14,130007,130009],{"id":130008},"_91-盒子模型","9.1 盒子模型",[171,130011,130012],{},"利用盒子来设计网页",[171,130014,130015],{},"盒子包含：边框、外边距、内边距、实际内容",[171,130017,130018],{},"网页布局设置：",[171,130020,130021],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[171,130023,130024],{},"②利用css设置好盒子样式，然后摆放到相应位置",[171,130026,130027],{},"③往盒子里装内容",[1638,130029],{"style":126537,"src":130030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[275,130032,130034],{"id":130033},"_911-边框border","9.1.1 边框（border）",[259,130036,130037,130040],{},[178,130038,130039],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[178,130041,130042],{},"语法",[19,130044,130046],{"className":126681,"code":130045,"language":126683,"meta":24,"style":24},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[26,130047,130048,130053,130059,130076],{"__ignoreMap":24},[29,130049,130050],{"class":31,"line":32},[29,130051,130052],{"class":367},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[29,130054,130055,130057],{"class":31,"line":43},[29,130056,51740],{"class":51429},[29,130058,15747],{"class":309},[29,130060,130061,130063,130065,130067,130069,130071,130074],{"class":31,"line":51},[29,130062,71025],{"class":39},[29,130064,51566],{"class":309},[29,130066,525],{"class":39},[29,130068,51621],{"class":305},[29,130070,51650],{"class":39},[29,130072,130073],{"class":39}," #ccc",[29,130075,1468],{"class":309},[29,130077,130078],{"class":31,"line":59},[29,130079,1741],{"class":309},[445,130081,130082,130090],{},[448,130083,130084],{},[451,130085,130086,130088],{},[454,130087,129283],{"align":23911},[454,130089,102825],{"align":23911},[492,130091,130092,130100,130108],{},[451,130093,130094,130097],{},[497,130095,130096],{"align":23911},"border-width",[497,130098,130099],{"align":23911},"定义边框粗细，单位是px",[451,130101,130102,130105],{},[497,130103,130104],{"align":23911},"border-style",[497,130106,130107],{"align":23911},"边框的样式",[451,130109,130110,130113],{},[497,130111,130112],{"align":23911},"border-color",[497,130114,130115],{"align":23911},"边框的颜色",[171,130117,130118],{},"边框样式 border-style 可以设置如下值：",[175,130120,130121,130124,130127,130130],{},[178,130122,130123],{},"none：没有边框即忽略所有边框的宽度（默认值）",[178,130125,130126],{},"solid：边框为单实线(最为常用的)",[178,130128,130129],{},"dashed：边框为虚线",[178,130131,130132],{},"dotted：边框为点线",[259,130134,130135],{"start":51},[178,130136,130137],{},"边框的合写分写",[19,130139,130140],{"className":126681,"code":130045,"language":126683,"meta":24,"style":24},[26,130141,130142,130146,130152,130168],{"__ignoreMap":24},[29,130143,130144],{"class":31,"line":32},[29,130145,130052],{"class":367},[29,130147,130148,130150],{"class":31,"line":43},[29,130149,51740],{"class":51429},[29,130151,15747],{"class":309},[29,130153,130154,130156,130158,130160,130162,130164,130166],{"class":31,"line":51},[29,130155,71025],{"class":39},[29,130157,51566],{"class":309},[29,130159,525],{"class":39},[29,130161,51621],{"class":305},[29,130163,51650],{"class":39},[29,130165,130073],{"class":39},[29,130167,1468],{"class":309},[29,130169,130170],{"class":31,"line":59},[29,130171,1741],{"class":309},[171,130173,130174],{},"边框分开写法：",[19,130176,130178],{"className":126681,"code":130177,"language":126683,"meta":24,"style":24},"\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",[26,130179,130180,130185,130191,130209,130227,130246,130264],{"__ignoreMap":24},[29,130181,130182],{"class":31,"line":32},[29,130183,130184],{"class":367},"\u002F* 边框分开写法 *\u002F\n",[29,130186,130187,130189],{"class":31,"line":43},[29,130188,51740],{"class":51429},[29,130190,15747],{"class":309},[29,130192,130193,130196,130198,130200,130202,130204,130207],{"class":31,"line":51},[29,130194,130195],{"class":39},"  border-top",[29,130197,51566],{"class":309},[29,130199,525],{"class":39},[29,130201,51621],{"class":305},[29,130203,51650],{"class":39},[29,130205,130206],{"class":39}," #000",[29,130208,1468],{"class":309},[29,130210,130211,130214,130216,130218,130220,130222,130225],{"class":31,"line":59},[29,130212,130213],{"class":39},"  border-right",[29,130215,51566],{"class":309},[29,130217,386],{"class":39},[29,130219,51621],{"class":305},[29,130221,62370],{"class":39},[29,130223,130224],{"class":39}," #333",[29,130226,1468],{"class":309},[29,130228,130229,130232,130234,130236,130238,130241,130244],{"class":31,"line":67},[29,130230,130231],{"class":39},"  border-bottom",[29,130233,51566],{"class":309},[29,130235,380],{"class":39},[29,130237,51621],{"class":305},[29,130239,130240],{"class":39}," dotted",[29,130242,130243],{"class":39}," #666",[29,130245,1468],{"class":309},[29,130247,130248,130251,130253,130255,130257,130259,130262],{"class":31,"line":75},[29,130249,130250],{"class":39},"  border-left",[29,130252,51566],{"class":309},[29,130254,525],{"class":39},[29,130256,51621],{"class":305},[29,130258,51650],{"class":39},[29,130260,130261],{"class":39}," #999",[29,130263,1468],{"class":309},[29,130265,130266],{"class":31,"line":83},[29,130267,1741],{"class":309},[259,130269,130270],{"start":59},[178,130271,130272],{},"表格的细线边框",[171,130274,130275],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[19,130277,130279],{"className":126681,"code":130278,"language":126683,"meta":24,"style":24},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[26,130280,130281,130286,130292,130302],{"__ignoreMap":24},[29,130282,130283],{"class":31,"line":32},[29,130284,130285],{"class":367},"\u002F* 表格细线边框合并 *\u002F\n",[29,130287,130288,130290],{"class":31,"line":43},[29,130289,445],{"class":51429},[29,130291,15747],{"class":309},[29,130293,130294,130296,130298,130300],{"class":31,"line":51},[29,130295,70707],{"class":39},[29,130297,51566],{"class":309},[29,130299,65164],{"class":39},[29,130301,1468],{"class":309},[29,130303,130304],{"class":31,"line":59},[29,130305,1741],{"class":309},[171,130307,130308],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[259,130310,130311],{"start":67},[178,130312,130313],{},"解决边框额外增加盒子的实际大小的方法：",[175,130315,130316,130319],{},[178,130317,130318],{},"测量盒子大小的时候,不量边框",[178,130320,130321],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[275,130323,130325],{"id":130324},"_912-内边距","9.1.2 内边距",[259,130327,130328,130331],{},[178,130329,130330],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[178,130332,130042],{},[445,130334,130335,130345],{},[448,130336,130337],{},[451,130338,130339,130342],{},[454,130340,130341],{"align":23911},"值的个数",[454,130343,130344],{"align":23911},"表达意思",[492,130346,130347,130355,130363,130371],{},[451,130348,130349,130352],{},[497,130350,130351],{"align":23911},"padding: 5px;",[497,130353,130354],{"align":23911},"1个值，代表上下左右都有5个元素",[451,130356,130357,130360],{},[497,130358,130359],{"align":23911},"padding: 5px 10px;",[497,130361,130362],{"align":23911},"2个值，代表上下内边距为5像素，左右内边距为10像素",[451,130364,130365,130368],{},[497,130366,130367],{"align":23911},"padding: 5px 10px 20px;",[497,130369,130370],{"align":23911},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[451,130372,130373,130376],{},[497,130374,130375],{"align":23911},"padding: 5px 10px 20px 30px;",[497,130377,130378],{"align":23911},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[445,130380,130381,130389],{},[448,130382,130383],{},[451,130384,130385,130387],{},[454,130386,129283],{"align":23911},[454,130388,102825],{"align":23911},[492,130390,130391,130399,130407,130415],{},[451,130392,130393,130396],{},[497,130394,130395],{"align":23911},"padding-left",[497,130397,130398],{"align":23911},"左内边距",[451,130400,130401,130404],{},[497,130402,130403],{"align":23911},"padding-right",[497,130405,130406],{"align":23911},"右内边距",[451,130408,130409,130412],{},[497,130410,130411],{"align":23911},"padding-top",[497,130413,130414],{"align":23911},"上内边距",[451,130416,130417,130420],{},[497,130418,130419],{"align":23911},"padding-bottom",[497,130421,130422],{"align":23911},"下内边距",[259,130424,130425],{"start":51},[178,130426,130427],{},"内边距会影响盒子的实际大小",[171,130429,130430],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[171,130432,130433],{},"①内容和边框有了距离，添加了内边距",[171,130435,130436],{},"②padding影响了盒子实际大小",[171,130438,130439],{},"内边距对盒子大小的影响：",[171,130441,130442],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[171,130444,130445],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[171,130447,95349],{},[171,130449,130450],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[275,130452,130454],{"id":130453},"_913-外边距","9.1.3 外边距",[259,130456,130457],{},[178,130458,130459],{},"控制盒子与盒子之间的距离",[445,130461,130462,130470],{},[448,130463,130464],{},[451,130465,130466,130468],{},[454,130467,129283],{"align":23911},[454,130469,102825],{"align":23911},[492,130471,130472,130480,130488,130496],{},[451,130473,130474,130477],{},[497,130475,130476],{"align":23911},"margin-left",[497,130478,130479],{"align":23911},"左外边距",[451,130481,130482,130485],{},[497,130483,130484],{"align":23911},"margin-right",[497,130486,130487],{"align":23911},"右外边距",[451,130489,130490,130493],{},[497,130491,130492],{"align":23911},"margin-top",[497,130494,130495],{"align":23911},"上外边距",[451,130497,130498,130501],{},[497,130499,130500],{"align":23911},"margin-bottom",[497,130502,130503],{"align":23911},"下外边距",[259,130505,130506],{"start":43},[178,130507,130508],{},"外边距可以让块级盒子水平居中的两个条件：",[171,130510,130511],{},"①盒子必须指定了宽度（width）",[171,130513,130514],{},"②盒子左右的外边距都设置为 auto",[19,130516,130518],{"className":126681,"code":130517,"language":126683,"meta":24,"style":24},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[26,130519,130520,130525,130532,130548],{"__ignoreMap":24},[29,130521,130522],{"class":31,"line":32},[29,130523,130524],{"class":367},"\u002F* margin 复合写法（同上） *\u002F\n",[29,130526,130527,130530],{"class":31,"line":43},[29,130528,130529],{"class":35},".box",[29,130531,15747],{"class":309},[29,130533,130534,130536,130538,130540,130542,130545],{"class":31,"line":51},[29,130535,70599],{"class":39},[29,130537,51566],{"class":309},[29,130539,499],{"class":39},[29,130541,51685],{"class":39},[29,130543,130544],{"class":309},";  ",[29,130546,130547],{"class":367},"\u002F* 块级盒子水平居中 *\u002F\n",[29,130549,130550],{"class":31,"line":59},[29,130551,1741],{"class":309},[259,130553,130554],{"start":51},[178,130555,130556],{},"外边距塌陷问题",[171,130558,130559],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1638,130561],{"style":126537,"src":130562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[171,130564,130565],{},"解决方案：",[171,130567,130568],{},"①可以为父亲元素定义上边距",[19,130570,130571],{"className":126681,"code":130517,"language":126683,"meta":24,"style":24},[26,130572,130573,130577,130583,130597],{"__ignoreMap":24},[29,130574,130575],{"class":31,"line":32},[29,130576,130524],{"class":367},[29,130578,130579,130581],{"class":31,"line":43},[29,130580,130529],{"class":35},[29,130582,15747],{"class":309},[29,130584,130585,130587,130589,130591,130593,130595],{"class":31,"line":51},[29,130586,70599],{"class":39},[29,130588,51566],{"class":309},[29,130590,499],{"class":39},[29,130592,51685],{"class":39},[29,130594,130544],{"class":309},[29,130596,130547],{"class":367},[29,130598,130599],{"class":31,"line":59},[29,130600,1741],{"class":309},[171,130602,130603],{},"②可以为父亲元素定义上内边距",[171,130605,130606],{},"③可以为父亲元素添加overflow:hidden",[1638,130608],{"style":126537,"src":130609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[19,130611,130612],{"className":126681,"code":130517,"language":126683,"meta":24,"style":24},[26,130613,130614,130618,130624,130638],{"__ignoreMap":24},[29,130615,130616],{"class":31,"line":32},[29,130617,130524],{"class":367},[29,130619,130620,130622],{"class":31,"line":43},[29,130621,130529],{"class":35},[29,130623,15747],{"class":309},[29,130625,130626,130628,130630,130632,130634,130636],{"class":31,"line":51},[29,130627,70599],{"class":39},[29,130629,51566],{"class":309},[29,130631,499],{"class":39},[29,130633,51685],{"class":39},[29,130635,130544],{"class":309},[29,130637,130547],{"class":367},[29,130639,130640],{"class":31,"line":59},[29,130641,1741],{"class":309},[1638,130643],{"style":126537,"src":130644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[171,130646,130647],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[171,130649,130650],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[275,130652,130654],{"id":130653},"_914-清除内外边距","9.1.4 清除内外边距",[171,130656,130657],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[19,130659,130660],{"className":126681,"code":130517,"language":126683,"meta":24,"style":24},[26,130661,130662,130666,130672,130686],{"__ignoreMap":24},[29,130663,130664],{"class":31,"line":32},[29,130665,130524],{"class":367},[29,130667,130668,130670],{"class":31,"line":43},[29,130669,130529],{"class":35},[29,130671,15747],{"class":309},[29,130673,130674,130676,130678,130680,130682,130684],{"class":31,"line":51},[29,130675,70599],{"class":39},[29,130677,51566],{"class":309},[29,130679,499],{"class":39},[29,130681,51685],{"class":39},[29,130683,130544],{"class":309},[29,130685,130547],{"class":367},[29,130687,130688],{"class":31,"line":59},[29,130689,1741],{"class":309},[171,130691,130692],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[275,130694,130696],{"id":130695},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[175,130698,130699,130702,130705,130708,130711,130714],{},[178,130700,130701],{},"文件→打开 ：可以打开我们要测量的图片",[178,130703,130704],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[178,130706,130707],{},"右击标尺，把里面的单位改为像素",[178,130709,130710],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[178,130712,130713],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[178,130715,130716],{},"用选区拖动 可以测量大小",[1638,130718],{"style":126537,"src":130719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[175,130721,130722,130725],{},[178,130723,130724],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[178,130726,130727],{},"吸管取色工具",[1638,130729],{"style":126537,"src":130730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[275,130732,130734],{"id":130733},"_916-案例","9.1.6 案例",[259,130736,130737],{},[178,130738,130739],{},"小米商品",[1638,130741],{"style":126537,"src":130742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[19,130744,130745],{"className":126681,"code":130517,"language":126683,"meta":24,"style":24},[26,130746,130747,130751,130757,130771],{"__ignoreMap":24},[29,130748,130749],{"class":31,"line":32},[29,130750,130524],{"class":367},[29,130752,130753,130755],{"class":31,"line":43},[29,130754,130529],{"class":35},[29,130756,15747],{"class":309},[29,130758,130759,130761,130763,130765,130767,130769],{"class":31,"line":51},[29,130760,70599],{"class":39},[29,130762,51566],{"class":309},[29,130764,499],{"class":39},[29,130766,51685],{"class":39},[29,130768,130544],{"class":309},[29,130770,130547],{"class":367},[29,130772,130773],{"class":31,"line":59},[29,130774,1741],{"class":309},[259,130776,130777],{"start":43},[178,130778,130779],{},"快报模块",[1638,130781],{"style":126537,"src":130782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[19,130784,130786],{"className":127428,"code":130785,"language":127430,"meta":24,"style":24},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[26,130787,130788,130793,130808,130813],{"__ignoreMap":24},[29,130789,130790],{"class":31,"line":32},[29,130791,130792],{"class":367},"\u003C!-- HTML 代码示例 -->\n",[29,130794,130795,130797,130799,130801,130803,130806],{"class":31,"line":43},[29,130796,1218],{"class":309},[29,130798,51740],{"class":51429},[29,130800,53615],{"class":35},[29,130802,355],{"class":309},[29,130804,130805],{"class":103},"\"example\"",[29,130807,51436],{"class":309},[29,130809,130810],{"class":31,"line":51},[29,130811,130812],{"class":309},"  示例内容\n",[29,130814,130815,130817,130819],{"class":31,"line":59},[29,130816,51914],{"class":309},[29,130818,51740],{"class":51429},[29,130820,51436],{"class":309},[275,130822,130824],{"id":130823},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[259,130826,130827],{},[178,130828,130829],{},"圆角边框",[171,130831,130832],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1638,130834],{"style":126537,"src":130835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[19,130837,130839],{"className":126681,"code":130838,"language":126683,"meta":24,"style":24},"div {\n  border: 1px solid #ccc;\n}\n",[26,130840,130841,130847,130863],{"__ignoreMap":24},[29,130842,130843,130845],{"class":31,"line":32},[29,130844,51740],{"class":51429},[29,130846,15747],{"class":309},[29,130848,130849,130851,130853,130855,130857,130859,130861],{"class":31,"line":43},[29,130850,71025],{"class":39},[29,130852,51566],{"class":309},[29,130854,525],{"class":39},[29,130856,51621],{"class":305},[29,130858,51650],{"class":39},[29,130860,130073],{"class":39},[29,130862,1468],{"class":309},[29,130864,130865],{"class":31,"line":51},[29,130866,1741],{"class":309},[171,130868,130869],{},"解释:",[175,130871,130872,130875,130878,130881,130884],{},[178,130873,130874],{},"参数值可以为数值或百分比的形式",[178,130876,130877],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[178,130879,130880],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[178,130882,130883],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[178,130885,130886],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[259,130888,130889],{"start":43},[178,130890,130891],{},"盒子阴影",[19,130893,130895],{"className":126681,"code":130894,"language":126683,"meta":24,"style":24},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[26,130896,130897,130903,130940],{"__ignoreMap":24},[29,130898,130899,130901],{"class":31,"line":32},[29,130900,51740],{"class":51429},[29,130902,15747],{"class":309},[29,130904,130905,130908,130910,130912,130914,130916,130918,130920,130922,130924,130926,130928,130930,130932,130934,130936,130938],{"class":31,"line":43},[29,130906,130907],{"class":39},"  box-shadow",[29,130909,51566],{"class":309},[29,130911,499],{"class":39},[29,130913,14930],{"class":39},[29,130915,51621],{"class":305},[29,130917,2213],{"class":39},[29,130919,51621],{"class":305},[29,130921,78896],{"class":39},[29,130923,310],{"class":309},[29,130925,499],{"class":39},[29,130927,12610],{"class":309},[29,130929,499],{"class":39},[29,130931,12610],{"class":309},[29,130933,499],{"class":39},[29,130935,12610],{"class":309},[29,130937,86339],{"class":39},[29,130939,2894],{"class":309},[29,130941,130942],{"class":31,"line":51},[29,130943,1741],{"class":309},[445,130945,130946,130954],{},[448,130947,130948],{},[451,130949,130950,130952],{},[454,130951,460],{"align":23911},[454,130953,27618],{"align":23911},[492,130955,130956,130964,130972,130980,130988,130996],{},[451,130957,130958,130961],{},[497,130959,130960],{"align":23911},"h-shadow",[497,130962,130963],{"align":23911},"必需,水平阴影的位置,允许负值",[451,130965,130966,130969],{},[497,130967,130968],{"align":23911},"v-shadow",[497,130970,130971],{"align":23911},"必需,垂直阴影的位置,允许负值",[451,130973,130974,130977],{},[497,130975,130976],{"align":23911},"blur",[497,130978,130979],{"align":23911},"可选,模糊距离,就是影子的虚实",[451,130981,130982,130985],{},[497,130983,130984],{"align":23911},"spread",[497,130986,130987],{"align":23911},"可选,阴影尺寸",[451,130989,130990,130993],{},[497,130991,130992],{"align":23911},"color",[497,130994,130995],{"align":23911},"可选,阴影的颜色",[451,130997,130998,131001],{},[497,130999,131000],{"align":23911},"inset",[497,131002,131003],{"align":23911},"可选,将外部阴影(outset)改为内部阴影",[259,131005,131006],{"start":51},[178,131007,131008],{},"文字阴影",[19,131010,131012],{"className":126681,"code":131011,"language":126683,"meta":24,"style":24},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[26,131013,131014,131020,131059],{"__ignoreMap":24},[29,131015,131016,131018],{"class":31,"line":32},[29,131017,171],{"class":51429},[29,131019,15747],{"class":309},[29,131021,131022,131025,131027,131029,131031,131033,131035,131037,131039,131041,131043,131045,131047,131049,131051,131053,131055,131057],{"class":31,"line":43},[29,131023,131024],{"class":39},"  text-shadow",[29,131026,51566],{"class":309},[29,131028,525],{"class":39},[29,131030,51621],{"class":305},[29,131032,25247],{"class":39},[29,131034,51621],{"class":305},[29,131036,14930],{"class":39},[29,131038,51621],{"class":305},[29,131040,78896],{"class":39},[29,131042,310],{"class":309},[29,131044,499],{"class":39},[29,131046,12610],{"class":309},[29,131048,499],{"class":39},[29,131050,12610],{"class":309},[29,131052,499],{"class":39},[29,131054,12610],{"class":309},[29,131056,100650],{"class":39},[29,131058,2894],{"class":309},[29,131060,131061],{"class":31,"line":51},[29,131062,1741],{"class":309},[445,131064,131065,131073],{},[448,131066,131067],{},[451,131068,131069,131071],{},[454,131070,460],{"align":23911},[454,131072,27618],{"align":23911},[492,131074,131075,131081,131088,131095],{},[451,131076,131077,131079],{},[497,131078,130960],{"align":23911},[497,131080,130963],{"align":23911},[451,131082,131083,131085],{},[497,131084,130968],{"align":23911},[497,131086,131087],{"align":23911},"必需,垂直阴影位置,允许负值",[451,131089,131090,131092],{},[497,131091,130976],{"align":23911},[497,131093,131094],{"align":23911},"可选,模糊的距离",[451,131096,131097,131099],{},[497,131098,130992],{"align":23911},[497,131100,130995],{"align":23911},[14,131102,131104],{"id":131103},"_92-浮动","9.2 浮动",[275,131106,131108],{"id":131107},"_921-浮动介绍","9.2.1 浮动介绍",[171,131110,131111],{},"在16.2中详细介绍",[275,131113,131115],{"id":131114},"_922-清除浮动","9.2.2 清除浮动",[259,131117,131118,131121],{},[178,131119,131120],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[178,131122,131123],{},"清除浮动的本质",[171,131125,131126],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[171,131128,9200],{},[175,131130,131131,131134,131137],{},[178,131132,131133],{},"如果父盒子本身有高度，则不需要清除浮动",[178,131135,131136],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[178,131138,131139],{},"父级有了高度，就不会影响下面的标准流了",[259,131141,131142],{"start":51},[178,131143,131144],{},"清除浮动样式",[19,131146,131148],{"className":126681,"code":131147,"language":126683,"meta":24,"style":24},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[26,131149,131150,131157,131168,131172,131179,131189],{"__ignoreMap":24},[29,131151,131152,131155],{"class":31,"line":32},[29,131153,131154],{"class":35},".left",[29,131156,15747],{"class":309},[29,131158,131159,131162,131164,131166],{"class":31,"line":43},[29,131160,131161],{"class":39},"  float",[29,131163,51566],{"class":309},[29,131165,23911],{"class":39},[29,131167,1468],{"class":309},[29,131169,131170],{"class":31,"line":51},[29,131171,1741],{"class":309},[29,131173,131174,131177],{"class":31,"line":59},[29,131175,131176],{"class":35},".right",[29,131178,15747],{"class":309},[29,131180,131181,131183,131185,131187],{"class":31,"line":67},[29,131182,131161],{"class":39},[29,131184,51566],{"class":309},[29,131186,72651],{"class":39},[29,131188,1468],{"class":309},[29,131190,131191],{"class":31,"line":75},[29,131192,1741],{"class":309},[445,131194,131195,131203],{},[448,131196,131197],{},[451,131198,131199,131201],{},[454,131200,127145],{"align":23911},[454,131202,27618],{"align":23911},[492,131204,131205,131212,131219],{},[451,131206,131207,131209],{},[497,131208,23911],{"align":23911},[497,131210,131211],{"align":23911},"不允许左侧有浮动元素（清除左侧浮动的影响）",[451,131213,131214,131216],{},[497,131215,72651],{"align":23911},[497,131217,131218],{"align":23911},"不允许右侧有浮动元素（清除右侧浮动的影响）",[451,131220,131221,131224],{},[497,131222,131223],{"align":23911},"both",[497,131225,131226],{"align":23911},"同时清除左右侧浮动的影响",[171,131228,131229],{},"法一",[171,131231,131232],{},"额外标签法也称为隔墙法",[171,131234,131235],{},"使用方式：",[171,131237,131238],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[19,131240,131241],{"className":126681,"code":131147,"language":126683,"meta":24,"style":24},[26,131242,131243,131249,131259,131263,131269,131279],{"__ignoreMap":24},[29,131244,131245,131247],{"class":31,"line":32},[29,131246,131154],{"class":35},[29,131248,15747],{"class":309},[29,131250,131251,131253,131255,131257],{"class":31,"line":43},[29,131252,131161],{"class":39},[29,131254,51566],{"class":309},[29,131256,23911],{"class":39},[29,131258,1468],{"class":309},[29,131260,131261],{"class":31,"line":51},[29,131262,1741],{"class":309},[29,131264,131265,131267],{"class":31,"line":59},[29,131266,131176],{"class":35},[29,131268,15747],{"class":309},[29,131270,131271,131273,131275,131277],{"class":31,"line":67},[29,131272,131161],{"class":39},[29,131274,51566],{"class":309},[29,131276,72651],{"class":39},[29,131278,1468],{"class":309},[29,131280,131281],{"class":31,"line":75},[29,131282,1741],{"class":309},[171,131284,131285],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[171,131287,131288],{},"优点： 通俗易懂，书写方便",[171,131290,131291],{},"缺点： 添加许多无意义的标签，结构化较差",[171,131293,131294],{},"注意： 要求这个新的空标签必须是块级元素。",[171,131296,131297],{},"法二",[171,131299,131300],{},"父级添加overflow属性",[19,131302,131303],{"className":126681,"code":131147,"language":126683,"meta":24,"style":24},[26,131304,131305,131311,131321,131325,131331,131341],{"__ignoreMap":24},[29,131306,131307,131309],{"class":31,"line":32},[29,131308,131154],{"class":35},[29,131310,15747],{"class":309},[29,131312,131313,131315,131317,131319],{"class":31,"line":43},[29,131314,131161],{"class":39},[29,131316,51566],{"class":309},[29,131318,23911],{"class":39},[29,131320,1468],{"class":309},[29,131322,131323],{"class":31,"line":51},[29,131324,1741],{"class":309},[29,131326,131327,131329],{"class":31,"line":59},[29,131328,131176],{"class":35},[29,131330,15747],{"class":309},[29,131332,131333,131335,131337,131339],{"class":31,"line":67},[29,131334,131161],{"class":39},[29,131336,51566],{"class":309},[29,131338,72651],{"class":39},[29,131340,1468],{"class":309},[29,131342,131343],{"class":31,"line":75},[29,131344,1741],{"class":309},[171,131346,131347],{},"overflow: hidden;",[171,131349,131350],{},"优点：代码简洁",[171,131352,131353],{},"缺点：无法显示溢出的部分",[171,131355,131356],{},"注意：是给父元素添加代码",[171,131358,131359],{},"法三",[171,131361,131362],{},"父级添加after伪元素",[171,131364,131365,131368],{},[131366,131367],"after",{}," 方式是额外标签法的升级版",[171,131370,131371],{},"使用的时候复制就可以",[19,131373,131374],{"className":126681,"code":131147,"language":126683,"meta":24,"style":24},[26,131375,131376,131382,131392,131396,131402,131412],{"__ignoreMap":24},[29,131377,131378,131380],{"class":31,"line":32},[29,131379,131154],{"class":35},[29,131381,15747],{"class":309},[29,131383,131384,131386,131388,131390],{"class":31,"line":43},[29,131385,131161],{"class":39},[29,131387,51566],{"class":309},[29,131389,23911],{"class":39},[29,131391,1468],{"class":309},[29,131393,131394],{"class":31,"line":51},[29,131395,1741],{"class":309},[29,131397,131398,131400],{"class":31,"line":59},[29,131399,131176],{"class":35},[29,131401,15747],{"class":309},[29,131403,131404,131406,131408,131410],{"class":31,"line":67},[29,131405,131161],{"class":39},[29,131407,51566],{"class":309},[29,131409,72651],{"class":39},[29,131411,1468],{"class":309},[29,131413,131414],{"class":31,"line":75},[29,131415,1741],{"class":309},[171,131417,131418],{},"优点：没有增加标签，结构更简单",[171,131420,131421],{},"缺点：照顾低版本浏览器",[171,131423,131424],{},"代表网站： 百度、淘宝网、网易等",[171,131426,131427],{},"法四",[171,131429,131430],{},"父级添加双伪元素",[19,131432,131433],{"className":126681,"code":131147,"language":126683,"meta":24,"style":24},[26,131434,131435,131441,131451,131455,131461,131471],{"__ignoreMap":24},[29,131436,131437,131439],{"class":31,"line":32},[29,131438,131154],{"class":35},[29,131440,15747],{"class":309},[29,131442,131443,131445,131447,131449],{"class":31,"line":43},[29,131444,131161],{"class":39},[29,131446,51566],{"class":309},[29,131448,23911],{"class":39},[29,131450,1468],{"class":309},[29,131452,131453],{"class":31,"line":51},[29,131454,1741],{"class":309},[29,131456,131457,131459],{"class":31,"line":59},[29,131458,131176],{"class":35},[29,131460,15747],{"class":309},[29,131462,131463,131465,131467,131469],{"class":31,"line":67},[29,131464,131161],{"class":39},[29,131466,51566],{"class":309},[29,131468,72651],{"class":39},[29,131470,1468],{"class":309},[29,131472,131473],{"class":31,"line":75},[29,131474,1741],{"class":309},[171,131476,131477],{},"优点：代码更简洁",[171,131479,131421],{},[171,131481,131482],{},"代表网站：小米、腾讯等",[14,131484,131486],{"id":131485},"_93-ps切图","9.3 PS切图",[275,131488,131490],{"id":131489},"_931-常见图片格式","9.3.1 常见图片格式",[445,131492,131493,131503],{},[448,131494,131495],{},[451,131496,131497,131500],{},[454,131498,131499],{"align":23911},"jpg图像格式",[454,131501,131502],{"align":23911},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[492,131504,131505,131513,131521],{},[451,131506,131507,131510],{},[497,131508,131509],{"align":23911},"gif图像格式",[497,131511,131512],{"align":23911},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[451,131514,131515,131518],{},[497,131516,131517],{"align":23911},"png图像格式",[497,131519,131520],{"align":23911},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[451,131522,131523,131526],{},[497,131524,131525],{"align":23911},"PSD图像格式",[497,131527,131528],{"align":23911},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[275,131530,131532],{"id":131531},"_932-图层切图","9.3.2 图层切图",[171,131534,131535],{},"最简单的切图方式：右击图层 → 导出 → 切片",[171,131537,131538],{},"按住shift选中两个图层->图层菜单->合并图层",[275,131540,131542],{"id":131541},"_933-切片切图","9.3.3 切片切图",[175,131544,131545,131548],{},[178,131546,131547],{},"利用切片工具手动划出",[178,131549,131550],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[275,131552,131554],{"id":131553},"_934-切图步骤","9.3.4 切图步骤",[171,131556,131557],{},"用切片工具选中：",[1638,131559],{"style":126537,"src":131560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[171,131562,131563],{},"文件 -> 导出",[1638,131565],{"style":126537,"src":131566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[223,131568,131569],{},"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":24,"searchDepth":43,"depth":43,"links":131571},[131572,131581,131585],{"id":130008,"depth":43,"text":130009,"children":131573},[131574,131575,131576,131577,131578,131579,131580],{"id":130033,"depth":51,"text":130034},{"id":130324,"depth":51,"text":130325},{"id":130453,"depth":51,"text":130454},{"id":130653,"depth":51,"text":130654},{"id":130695,"depth":51,"text":130696},{"id":130733,"depth":51,"text":130734},{"id":130823,"depth":51,"text":130824},{"id":131103,"depth":43,"text":131104,"children":131582},[131583,131584],{"id":131107,"depth":51,"text":131108},{"id":131114,"depth":51,"text":131115},{"id":131485,"depth":43,"text":131486,"children":131586},[131587,131588,131589,131590],{"id":131489,"depth":51,"text":131490},{"id":131531,"depth":51,"text":131532},{"id":131541,"depth":51,"text":131542},{"id":131553,"depth":51,"text":131554},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130000,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131597,"title":131598,"body":131599,"description":230,"extension":231,"meta":132240,"navigation":233,"path":132241,"seo":132242,"stem":132243,"__hash__":132244},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131600,"toc":132228},[131601,131604,131608,131634,131668,131672,131676,131679,131721,131728,131738,131746,131748,131751,131754,131757,131764,131778,131782,131785,131814,131818,131821,131835,131839,131842,131870,131874,131877,131903,131907,131912,131945,131950,131978,131982,131999,132045,132050,132094,132111,132218,132226],[10,131602,131598],{"id":131603},"_10-css规范与学成在线案例",[14,131605,131607],{"id":131606},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[259,131609,131610,131616,131622,131628],{},[178,131611,131612,131615],{},[457,131613,131614],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[178,131617,131618,131621],{},[457,131619,131620],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[178,131623,131624,131627],{},[457,131625,131626],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[178,131629,131630,131633],{},[457,131631,131632],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[19,131635,131636],{"className":126681,"code":130045,"language":126683,"meta":24,"style":24},[26,131637,131638,131642,131648,131664],{"__ignoreMap":24},[29,131639,131640],{"class":31,"line":32},[29,131641,130052],{"class":367},[29,131643,131644,131646],{"class":31,"line":43},[29,131645,51740],{"class":51429},[29,131647,15747],{"class":309},[29,131649,131650,131652,131654,131656,131658,131660,131662],{"class":31,"line":51},[29,131651,71025],{"class":39},[29,131653,51566],{"class":309},[29,131655,525],{"class":39},[29,131657,51621],{"class":305},[29,131659,51650],{"class":39},[29,131661,130073],{"class":39},[29,131663,1468],{"class":309},[29,131665,131666],{"class":31,"line":59},[29,131667,1741],{"class":309},[14,131669,131671],{"id":131670},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[275,131673,131675],{"id":131674},"_1021-header头部制作","10.2.1 header头部制作",[1638,131677],{"style":126537,"src":131678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[175,131680,131681,131688,131695,131701,131708,131715],{},[178,131682,131683,131684,131687],{},"1号是版心盒子 ",[457,131685,131686],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[178,131689,131690,131691,131694],{},"版心盒子 里面包含 2号盒子 ",[457,131692,131693],{},"logo"," 图标",[178,131696,131697,131698,131700],{},"版心盒子 里面包含 3号盒子 ",[457,131699,53842],{}," 导航栏",[178,131702,131703,131704,131707],{},"版心盒子 里面包含 4号盒子 ",[457,131705,131706],{},"search"," 搜索框",[178,131709,131710,131711,131714],{},"版心盒子 里面包含 5号盒子 ",[457,131712,131713],{},"user"," 个人信息",[178,131716,131717,131718],{},"注意，要求里面的 ",[457,131719,131720],{},"4个子盒子 必须都浮动",[259,131722,131723],{},[178,131724,131725],{},[457,131726,131727],{},"导航栏注意点:",[171,131729,131730,131731,131734,131735],{},"实际开发中， ",[457,131732,131733],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[457,131736,131737],{},"用 li 包含链接(li+a)的做法",[175,131739,131740,131743],{},[178,131741,131742],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[178,131744,131745],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[171,131747,9200],{},[171,131749,131750],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[171,131752,131753],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[171,131755,131756],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[259,131758,131759],{"start":43},[178,131760,131761],{},[457,131762,131763],{},"4号盒子search的细节：",[175,131765,131766,131769,131772],{},[178,131767,131768],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[178,131770,131771],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[178,131773,131774,131777],{},[26,131775,131776],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[275,131779,131781],{"id":131780},"_1022-banner制作","10.2.2 banner制作",[1638,131783],{"style":126537,"src":131784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[175,131786,131787,131794,131800,131807],{},[178,131788,131789,131790,131793],{},"1号盒子是通栏的大盒子 ",[457,131791,131792],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[178,131795,131796,131797,131799],{},"2号盒子是版心 ",[457,131798,1103],{}," ， 要水平居中对齐",[178,131801,131802,131803,131806],{},"3号盒子版心内，左对齐 ",[457,131804,131805],{},"subnav"," 侧导航栏",[178,131808,131809,131810,131813],{},"4号盒子版心内，右对齐 ",[457,131811,131812],{},"course"," 课程",[275,131815,131817],{"id":131816},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1638,131819],{"style":126537,"src":131820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[175,131822,131823,131826,131829,131832],{},[178,131824,131825],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[178,131827,131828],{},"1号盒子是标题 H3 左侧浮动",[178,131830,131831],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[178,131833,131834],{},"3号盒子 右浮动 mod 修改",[275,131836,131838],{"id":131837},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1638,131840],{"style":126537,"src":131841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[175,131843,131844,131850,131857,131864,131867],{},[178,131845,131846,131847,131849],{},"1号盒子为最大的盒子 ",[457,131848,53843],{}," 版心水平居中对齐",[178,131851,131852,131853,131856],{},"2号盒子为上面部分 ",[457,131854,131855],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[178,131858,131859,131860,131863],{},"3号盒子为底下部分 ",[457,131861,131862],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[178,131865,131866],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[178,131868,131869],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[275,131871,131873],{"id":131872},"_1025-底部模块制作","10.2.5 底部模块制作",[1638,131875],{"style":126537,"src":131876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[175,131878,131879,131886,131889,131896],{},[178,131880,131881,131882,131885],{},"1号盒子通栏大盒子 底部 ",[457,131883,131884],{},"footer"," 给高度 底色是白色",[178,131887,131888],{},"2号盒子版心水平居中",[178,131890,131891,131892,131895],{},"3号盒子版权 ",[457,131893,131894],{},"copyright"," 左对齐",[178,131897,131898,131899,131902],{},"4号盒子 链接组 ",[457,131900,131901],{},"links"," 右对齐",[275,131904,131906],{"id":131905},"_1026-代码模块","10.2.6 代码模块",[259,131908,131909],{},[178,131910,131911],{},"html部分",[19,131913,131915],{"className":127428,"code":131914,"language":127430,"meta":24,"style":24},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[26,131916,131917],{"__ignoreMap":24},[29,131918,131919,131921,131923,131925,131927,131930,131933,131935,131938,131941,131943],{"class":31,"line":32},[29,131920,1218],{"class":309},[29,131922,546],{"class":51429},[29,131924,61186],{"class":35},[29,131926,355],{"class":309},[29,131928,131929],{"class":103},"\"https:\u002F\u002Fexample.com\"",[29,131931,131932],{"class":35}," target",[29,131934,355],{"class":309},[29,131936,131937],{"class":103},"\"_blank\"",[29,131939,131940],{"class":309},">链接文字\u003C\u002F",[29,131942,546],{"class":51429},[29,131944,51436],{"class":309},[259,131946,131947],{"start":43},[178,131948,131949],{},"css部分",[19,131951,131952],{"className":127428,"code":131914,"language":127430,"meta":24,"style":24},[26,131953,131954],{"__ignoreMap":24},[29,131955,131956,131958,131960,131962,131964,131966,131968,131970,131972,131974,131976],{"class":31,"line":32},[29,131957,1218],{"class":309},[29,131959,546],{"class":51429},[29,131961,61186],{"class":35},[29,131963,355],{"class":309},[29,131965,131929],{"class":103},[29,131967,131932],{"class":35},[29,131969,355],{"class":309},[29,131971,131937],{"class":103},[29,131973,131940],{"class":309},[29,131975,546],{"class":51429},[29,131977,51436],{"class":309},[275,131979,131981],{"id":131980},"_1027-收获","10.2.7 收获",[259,131983,131984,131987,131990,131993,131996],{},[178,131985,131986],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[178,131988,131989],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[178,131991,131992],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[178,131994,131995],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[178,131997,131998],{},"遗忘代码",[19,132000,132002],{"className":126681,"code":132001,"language":126683,"meta":24,"style":24},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[26,132003,132004,132026,132031,132041],{"__ignoreMap":24},[29,132005,132006,132008,132010,132012,132014,132016,132018,132020,132022,132024],{"class":31,"line":32},[29,132007,51740],{"class":51429},[29,132009,12610],{"class":309},[29,132011,171],{"class":51429},[29,132013,12610],{"class":309},[29,132015,10],{"class":51429},[29,132017,12610],{"class":309},[29,132019,175],{"class":51429},[29,132021,12610],{"class":309},[29,132023,178],{"class":51429},[29,132025,15747],{"class":309},[29,132027,132028],{"class":31,"line":43},[29,132029,132030],{"class":367},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[29,132032,132033,132035,132037,132039],{"class":31,"line":51},[29,132034,128297],{"class":39},[29,132036,51566],{"class":309},[29,132038,60998],{"class":39},[29,132040,1468],{"class":309},[29,132042,132043],{"class":31,"line":59},[29,132044,1741],{"class":309},[259,132046,132047],{"start":75},[178,132048,132049],{},"html引css的程序",[19,132051,132052],{"className":126681,"code":132001,"language":126683,"meta":24,"style":24},[26,132053,132054,132076,132080,132090],{"__ignoreMap":24},[29,132055,132056,132058,132060,132062,132064,132066,132068,132070,132072,132074],{"class":31,"line":32},[29,132057,51740],{"class":51429},[29,132059,12610],{"class":309},[29,132061,171],{"class":51429},[29,132063,12610],{"class":309},[29,132065,10],{"class":51429},[29,132067,12610],{"class":309},[29,132069,175],{"class":51429},[29,132071,12610],{"class":309},[29,132073,178],{"class":51429},[29,132075,15747],{"class":309},[29,132077,132078],{"class":31,"line":43},[29,132079,132030],{"class":367},[29,132081,132082,132084,132086,132088],{"class":31,"line":51},[29,132083,128297],{"class":39},[29,132085,51566],{"class":309},[29,132087,60998],{"class":39},[29,132089,1468],{"class":309},[29,132091,132092],{"class":31,"line":59},[29,132093,1741],{"class":309},[259,132095,132096,132099,132102,132105,132108],{"start":83},[178,132097,132098],{},"浮动的盒子不会有外边距合并问题",[178,132100,132101],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[178,132103,132104],{},"ctrl+g快速定位行；shift+alt多个光标",[178,132106,132107],{},"学习上方各个模块的选择器起名方法，以后就这样用",[178,132109,132110],{},"在写选择器时尽量写全一些，例如",[19,132112,132114],{"className":126681,"code":132113,"language":126683,"meta":24,"style":24},"\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",[26,132115,132116,132121,132137,132142,132157,132162,132177,132182,132197,132202],{"__ignoreMap":24},[29,132117,132118],{"class":31,"line":32},[29,132119,132120],{"class":367},"\u002F* 静态定位（默认） *\u002F\n",[29,132122,132123,132126,132128,132130,132132,132135],{"class":31,"line":43},[29,132124,132125],{"class":35},".static",[29,132127,79936],{"class":309},[29,132129,129041],{"class":39},[29,132131,51566],{"class":309},[29,132133,132134],{"class":39},"static",[29,132136,129611],{"class":309},[29,132138,132139],{"class":31,"line":51},[29,132140,132141],{"class":367},"\u002F* 相对定位 *\u002F\n",[29,132143,132144,132147,132149,132151,132153,132155],{"class":31,"line":59},[29,132145,132146],{"class":35},".relative",[29,132148,79936],{"class":309},[29,132150,129041],{"class":39},[29,132152,51566],{"class":309},[29,132154,54893],{"class":39},[29,132156,129611],{"class":309},[29,132158,132159],{"class":31,"line":67},[29,132160,132161],{"class":367},"\u002F* 绝对定位 *\u002F\n",[29,132163,132164,132167,132169,132171,132173,132175],{"class":31,"line":75},[29,132165,132166],{"class":35},".absolute",[29,132168,79936],{"class":309},[29,132170,129041],{"class":39},[29,132172,51566],{"class":309},[29,132174,54960],{"class":39},[29,132176,129611],{"class":309},[29,132178,132179],{"class":31,"line":83},[29,132180,132181],{"class":367},"\u002F* 固定定位 *\u002F\n",[29,132183,132184,132187,132189,132191,132193,132195],{"class":31,"line":158},[29,132185,132186],{"class":35},".fixed",[29,132188,79936],{"class":309},[29,132190,129041],{"class":39},[29,132192,51566],{"class":309},[29,132194,86362],{"class":39},[29,132196,129611],{"class":309},[29,132198,132199],{"class":31,"line":166},[29,132200,132201],{"class":367},"\u002F* 粘性定位 *\u002F\n",[29,132203,132204,132207,132209,132211,132213,132216],{"class":31,"line":1505},[29,132205,132206],{"class":35},".sticky",[29,132208,79936],{"class":309},[29,132210,129041],{"class":39},[29,132212,51566],{"class":309},[29,132214,132215],{"class":39},"sticky",[29,132217,129611],{"class":309},[259,132219,132220,132223],{"start":1793},[178,132221,132222],{},"一定要用好注释",[178,132224,132225],{},"浮动的盒子不会有外边距合并的问题",[223,132227,131569],{},{"title":24,"searchDepth":43,"depth":43,"links":132229},[132230,132231],{"id":131606,"depth":43,"text":131607},{"id":131670,"depth":43,"text":131671,"children":132232},[132233,132234,132235,132236,132237,132238,132239],{"id":131674,"depth":51,"text":131675},{"id":131780,"depth":51,"text":131781},{"id":131816,"depth":51,"text":131817},{"id":131837,"depth":51,"text":131838},{"id":131872,"depth":51,"text":131873},{"id":131905,"depth":51,"text":131906},{"id":131980,"depth":51,"text":131981},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131598,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132246,"title":132247,"body":132248,"description":230,"extension":231,"meta":133734,"navigation":233,"path":133735,"seo":133736,"stem":133737,"__hash__":133738},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132249,"toc":133726},[132250,132253,132257,132261,132272,132276,132293,132337,132370,132373,132390,132393,132396,132440,132444,132448,132451,132454,132458,132461,132472,132535,132576,132579,132594,132648,132656,132659,132670,132724,132750,132753,132766,132820,132852,132906,132929,132983,132986,132989,132996,133050,133071,133125,133128,133131,133216,133224,133281,133304,133308,133311,133329,133333,133352,133406,133444,133448,133451,133454,133476,133480,133488,133491,133496,133507,133510,133514,133528,133572,133575,133579,133582,133587,133613,133618,133695,133698,133702,133705,133708,133711,133714,133717,133720,133723],[10,132251,132247],{"id":132252},"_11-传统布局与定位体系",[14,132254,132256],{"id":132255},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[275,132258,132260],{"id":132259},"_1111-普通流标准流","11.1.1 普通流（标准流）",[175,132262,132263,132266,132269],{},[178,132264,132265],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[178,132267,132268],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[178,132270,132271],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[275,132273,132275],{"id":132274},"_1112-浮动","11.1.2 浮动",[175,132277,132278,132281,132284,132287,132290],{},[178,132279,132280],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[178,132282,132283],{},"浮动可以改变元素标签默认的排列方式",[178,132285,132286],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[178,132288,132289],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[178,132291,132292],{},"在使用行内块转换时盒子之间是有空隙的",[19,132294,132295],{"className":126681,"code":131147,"language":126683,"meta":24,"style":24},[26,132296,132297,132303,132313,132317,132323,132333],{"__ignoreMap":24},[29,132298,132299,132301],{"class":31,"line":32},[29,132300,131154],{"class":35},[29,132302,15747],{"class":309},[29,132304,132305,132307,132309,132311],{"class":31,"line":43},[29,132306,131161],{"class":39},[29,132308,51566],{"class":309},[29,132310,23911],{"class":39},[29,132312,1468],{"class":309},[29,132314,132315],{"class":31,"line":51},[29,132316,1741],{"class":309},[29,132318,132319,132321],{"class":31,"line":59},[29,132320,131176],{"class":35},[29,132322,15747],{"class":309},[29,132324,132325,132327,132329,132331],{"class":31,"line":67},[29,132326,131161],{"class":39},[29,132328,51566],{"class":309},[29,132330,72651],{"class":39},[29,132332,1468],{"class":309},[29,132334,132335],{"class":31,"line":75},[29,132336,1741],{"class":309},[445,132338,132339,132347],{},[448,132340,132341],{},[451,132342,132343,132345],{},[454,132344,127145],{"align":23911},[454,132346,27618],{"align":23911},[492,132348,132349,132356,132363],{},[451,132350,132351,132353],{},[497,132352,54866],{"align":23911},[497,132354,132355],{"align":23911},"元素不浮动（默认值）",[451,132357,132358,132360],{},[497,132359,23911],{"align":23911},[497,132361,132362],{"align":23911},"元素向左浮动",[451,132364,132365,132367],{},[497,132366,72651],{"align":23911},[497,132368,132369],{"align":23911},"元素向右浮动",[171,132371,132372],{},"浮动重点：",[175,132374,132375,132378,132381,132384,132387],{},[178,132376,132377],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[178,132379,132380],{},"浮动的元素会一行内显示并且元素顶部对齐",[178,132382,132383],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[178,132385,132386],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[178,132388,132389],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[171,132391,132392],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[171,132394,132395],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[19,132397,132398],{"className":126681,"code":131147,"language":126683,"meta":24,"style":24},[26,132399,132400,132406,132416,132420,132426,132436],{"__ignoreMap":24},[29,132401,132402,132404],{"class":31,"line":32},[29,132403,131154],{"class":35},[29,132405,15747],{"class":309},[29,132407,132408,132410,132412,132414],{"class":31,"line":43},[29,132409,131161],{"class":39},[29,132411,51566],{"class":309},[29,132413,23911],{"class":39},[29,132415,1468],{"class":309},[29,132417,132418],{"class":31,"line":51},[29,132419,1741],{"class":309},[29,132421,132422,132424],{"class":31,"line":59},[29,132423,131176],{"class":35},[29,132425,15747],{"class":309},[29,132427,132428,132430,132432,132434],{"class":31,"line":67},[29,132429,131161],{"class":39},[29,132431,51566],{"class":309},[29,132433,72651],{"class":39},[29,132435,1468],{"class":309},[29,132437,132438],{"class":31,"line":75},[29,132439,1741],{"class":309},[275,132441,132443],{"id":132442},"_1113-定位","11.1.3 定位",[22173,132445,132447],{"id":132446},"_11131-使用场景","11.1.3.1 使用场景",[171,132449,132450],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[171,132452,132453],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22173,132455,132457],{"id":132456},"_11132-定位组成","11.1.3.2 定位组成",[171,132459,132460],{},"定位 = 定位模式 + 边偏移",[259,132462,132463],{},[178,132464,132465,132468,132469],{},[457,132466,132467],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[457,132470,132471],{},"定位模式",[19,132473,132475],{"className":126681,"code":132474,"language":126683,"meta":24,"style":24},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[26,132476,132477,132483,132497,132514,132531],{"__ignoreMap":24},[29,132478,132479,132481],{"class":31,"line":32},[29,132480,130529],{"class":35},[29,132482,15747],{"class":309},[29,132484,132485,132488,132490,132492,132494],{"class":31,"line":43},[29,132486,132487],{"class":39},"  position",[29,132489,51566],{"class":309},[29,132491,54893],{"class":39},[29,132493,130544],{"class":309},[29,132495,132496],{"class":367},"\u002F* 定位模式 *\u002F\n",[29,132498,132499,132502,132504,132506,132508,132511],{"class":31,"line":51},[29,132500,132501],{"class":39},"  top",[29,132503,51566],{"class":309},[29,132505,754],{"class":39},[29,132507,51621],{"class":305},[29,132509,132510],{"class":309},";           ",[29,132512,132513],{"class":367},"\u002F* 边偏移：上 *\u002F\n",[29,132515,132516,132519,132521,132523,132525,132528],{"class":31,"line":59},[29,132517,132518],{"class":39},"  left",[29,132520,51566],{"class":309},[29,132522,1008],{"class":39},[29,132524,51621],{"class":305},[29,132526,132527],{"class":309},";          ",[29,132529,132530],{"class":367},"\u002F* 边偏移：左 *\u002F\n",[29,132532,132533],{"class":31,"line":67},[29,132534,1741],{"class":309},[445,132536,132537,132546],{},[448,132538,132539],{},[451,132540,132541,132543],{},[454,132542,460],{"align":23911},[454,132544,132545],{"align":23911},"语义",[492,132547,132548,132555,132562,132569],{},[451,132549,132550,132552],{},[497,132551,132134],{"align":23911},[497,132553,132554],{"align":23911},"静态定位",[451,132556,132557,132559],{},[497,132558,54893],{"align":23911},[497,132560,132561],{"align":23911},"相对定位",[451,132563,132564,132566],{},[497,132565,54960],{"align":23911},[497,132567,132568],{"align":23911},"绝对定位",[451,132570,132571,132573],{},[497,132572,86362],{"align":23911},[497,132574,132575],{"align":23911},"固定定位",[171,132577,132578],{},"（1）静态定位：",[175,132580,132581,132592],{},[178,132582,132583,132584,132587,132588,132591],{},"静态定位是元素的 ",[457,132585,132586],{},"默认定位方式"," ， ",[457,132589,132590],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[178,132593,5356],{},[19,132595,132596],{"className":126681,"code":132474,"language":126683,"meta":24,"style":24},[26,132597,132598,132604,132616,132630,132644],{"__ignoreMap":24},[29,132599,132600,132602],{"class":31,"line":32},[29,132601,130529],{"class":35},[29,132603,15747],{"class":309},[29,132605,132606,132608,132610,132612,132614],{"class":31,"line":43},[29,132607,132487],{"class":39},[29,132609,51566],{"class":309},[29,132611,54893],{"class":39},[29,132613,130544],{"class":309},[29,132615,132496],{"class":367},[29,132617,132618,132620,132622,132624,132626,132628],{"class":31,"line":51},[29,132619,132501],{"class":39},[29,132621,51566],{"class":309},[29,132623,754],{"class":39},[29,132625,51621],{"class":305},[29,132627,132510],{"class":309},[29,132629,132513],{"class":367},[29,132631,132632,132634,132636,132638,132640,132642],{"class":31,"line":59},[29,132633,132518],{"class":39},[29,132635,51566],{"class":309},[29,132637,1008],{"class":39},[29,132639,51621],{"class":305},[29,132641,132527],{"class":309},[29,132643,132530],{"class":367},[29,132645,132646],{"class":31,"line":67},[29,132647,1741],{"class":309},[175,132649,132650,132653],{},[178,132651,132652],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[178,132654,132655],{},"静态定位在布局时我们几乎不用的",[171,132657,132658],{},"（2）相对定位",[175,132660,132661,132668],{},[178,132662,132663,132664,132667],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[457,132665,132666],{},"原来的位置"," 来说的（自恋型）",[178,132669,5356],{},[19,132671,132672],{"className":126681,"code":132474,"language":126683,"meta":24,"style":24},[26,132673,132674,132680,132692,132706,132720],{"__ignoreMap":24},[29,132675,132676,132678],{"class":31,"line":32},[29,132677,130529],{"class":35},[29,132679,15747],{"class":309},[29,132681,132682,132684,132686,132688,132690],{"class":31,"line":43},[29,132683,132487],{"class":39},[29,132685,51566],{"class":309},[29,132687,54893],{"class":39},[29,132689,130544],{"class":309},[29,132691,132496],{"class":367},[29,132693,132694,132696,132698,132700,132702,132704],{"class":31,"line":51},[29,132695,132501],{"class":39},[29,132697,51566],{"class":309},[29,132699,754],{"class":39},[29,132701,51621],{"class":305},[29,132703,132510],{"class":309},[29,132705,132513],{"class":367},[29,132707,132708,132710,132712,132714,132716,132718],{"class":31,"line":59},[29,132709,132518],{"class":39},[29,132711,51566],{"class":309},[29,132713,1008],{"class":39},[29,132715,51621],{"class":305},[29,132717,132527],{"class":309},[29,132719,132530],{"class":367},[29,132721,132722],{"class":31,"line":67},[29,132723,1741],{"class":309},[175,132725,132726],{},[178,132727,132728,132729,132731,132732,132734,132735,132738,132739,132742,132743,132745,132746,132749],{},"相对定位的特点：",[53845,132730],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53845,132733],{},"  ② ",[457,132736,132737],{},"原来"," 在标准流的 ",[457,132740,132741],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53845,132744],{},"  ③因此， ",[457,132747,132748],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[171,132751,132752],{},"（3）绝对定位",[175,132754,132755,132764],{},[178,132756,132757,132759,132760,132763],{},[457,132758,132568],{}," 是元素在移动位置的时候，是相对于它 ",[457,132761,132762],{},"祖先元素"," 来说的（拼爹型）",[178,132765,5356],{},[19,132767,132768],{"className":126681,"code":132474,"language":126683,"meta":24,"style":24},[26,132769,132770,132776,132788,132802,132816],{"__ignoreMap":24},[29,132771,132772,132774],{"class":31,"line":32},[29,132773,130529],{"class":35},[29,132775,15747],{"class":309},[29,132777,132778,132780,132782,132784,132786],{"class":31,"line":43},[29,132779,132487],{"class":39},[29,132781,51566],{"class":309},[29,132783,54893],{"class":39},[29,132785,130544],{"class":309},[29,132787,132496],{"class":367},[29,132789,132790,132792,132794,132796,132798,132800],{"class":31,"line":51},[29,132791,132501],{"class":39},[29,132793,51566],{"class":309},[29,132795,754],{"class":39},[29,132797,51621],{"class":305},[29,132799,132510],{"class":309},[29,132801,132513],{"class":367},[29,132803,132804,132806,132808,132810,132812,132814],{"class":31,"line":59},[29,132805,132518],{"class":39},[29,132807,51566],{"class":309},[29,132809,1008],{"class":39},[29,132811,51621],{"class":305},[29,132813,132527],{"class":309},[29,132815,132530],{"class":367},[29,132817,132818],{"class":31,"line":67},[29,132819,1741],{"class":309},[175,132821,132822,132837,132846,132849],{},[178,132823,132824,132825,132827,132828,132830,132831,132833,132834,132836],{},"绝对定位的特点：",[53845,132826],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53845,132829],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53845,132832],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53845,132835],{},"  (4)固定定位",[178,132838,132839,132841,132842,132845],{},[457,132840,132575],{}," 是元素 ",[457,132843,132844],{},"固定于浏览器可视区的位置"," 。（认死理型）",[178,132847,132848],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[178,132850,132851],{},"语法:",[19,132853,132854],{"className":126681,"code":132474,"language":126683,"meta":24,"style":24},[26,132855,132856,132862,132874,132888,132902],{"__ignoreMap":24},[29,132857,132858,132860],{"class":31,"line":32},[29,132859,130529],{"class":35},[29,132861,15747],{"class":309},[29,132863,132864,132866,132868,132870,132872],{"class":31,"line":43},[29,132865,132487],{"class":39},[29,132867,51566],{"class":309},[29,132869,54893],{"class":39},[29,132871,130544],{"class":309},[29,132873,132496],{"class":367},[29,132875,132876,132878,132880,132882,132884,132886],{"class":31,"line":51},[29,132877,132501],{"class":39},[29,132879,51566],{"class":309},[29,132881,754],{"class":39},[29,132883,51621],{"class":305},[29,132885,132510],{"class":309},[29,132887,132513],{"class":367},[29,132889,132890,132892,132894,132896,132898,132900],{"class":31,"line":59},[29,132891,132518],{"class":39},[29,132893,51566],{"class":309},[29,132895,1008],{"class":39},[29,132897,51621],{"class":305},[29,132899,132527],{"class":309},[29,132901,132530],{"class":367},[29,132903,132904],{"class":31,"line":67},[29,132905,1741],{"class":309},[175,132907,132908,132917],{},[178,132909,132910,132911,132913,132914,132916],{},"特点:",[53845,132912],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53845,132915],{},"  ②固定定位不再占有原先的位置,完全脱标",[178,132918,132919,132920,132922,132923,132925,132926,132928],{},"固定在版心位置的方法:",[53845,132921],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53845,132924],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53845,132927],{},"  实例：",[19,132930,132931],{"className":126681,"code":132474,"language":126683,"meta":24,"style":24},[26,132932,132933,132939,132951,132965,132979],{"__ignoreMap":24},[29,132934,132935,132937],{"class":31,"line":32},[29,132936,130529],{"class":35},[29,132938,15747],{"class":309},[29,132940,132941,132943,132945,132947,132949],{"class":31,"line":43},[29,132942,132487],{"class":39},[29,132944,51566],{"class":309},[29,132946,54893],{"class":39},[29,132948,130544],{"class":309},[29,132950,132496],{"class":367},[29,132952,132953,132955,132957,132959,132961,132963],{"class":31,"line":51},[29,132954,132501],{"class":39},[29,132956,51566],{"class":309},[29,132958,754],{"class":39},[29,132960,51621],{"class":305},[29,132962,132510],{"class":309},[29,132964,132513],{"class":367},[29,132966,132967,132969,132971,132973,132975,132977],{"class":31,"line":59},[29,132968,132518],{"class":39},[29,132970,51566],{"class":309},[29,132972,1008],{"class":39},[29,132974,51621],{"class":305},[29,132976,132527],{"class":309},[29,132978,132530],{"class":367},[29,132980,132981],{"class":31,"line":67},[29,132982,1741],{"class":309},[1638,132984],{"style":126537,"src":132985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[171,132987,132988],{},"(5)粘性定位",[175,132990,132991,132994],{},[178,132992,132993],{},"粘性定位可以被认为是相对定位和固定定位的混合",[178,132995,5356],{},[19,132997,132998],{"className":126681,"code":132474,"language":126683,"meta":24,"style":24},[26,132999,133000,133006,133018,133032,133046],{"__ignoreMap":24},[29,133001,133002,133004],{"class":31,"line":32},[29,133003,130529],{"class":35},[29,133005,15747],{"class":309},[29,133007,133008,133010,133012,133014,133016],{"class":31,"line":43},[29,133009,132487],{"class":39},[29,133011,51566],{"class":309},[29,133013,54893],{"class":39},[29,133015,130544],{"class":309},[29,133017,132496],{"class":367},[29,133019,133020,133022,133024,133026,133028,133030],{"class":31,"line":51},[29,133021,132501],{"class":39},[29,133023,51566],{"class":309},[29,133025,754],{"class":39},[29,133027,51621],{"class":305},[29,133029,132510],{"class":309},[29,133031,132513],{"class":367},[29,133033,133034,133036,133038,133040,133042,133044],{"class":31,"line":59},[29,133035,132518],{"class":39},[29,133037,51566],{"class":309},[29,133039,1008],{"class":39},[29,133041,51621],{"class":305},[29,133043,132527],{"class":309},[29,133045,132530],{"class":367},[29,133047,133048],{"class":31,"line":67},[29,133049,1741],{"class":309},[175,133051,133052],{},[178,133053,133054,133055,133057,133058,133060,133061,133063,133064,133067,133068,133070],{},"粘性定位的特点：",[53845,133056],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53845,133059],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53845,133062],{},"  ③必须添加 top 、left、right、bottom ",[457,133065,133066],{},"其中一个"," 才有效",[53845,133069],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[19,133072,133073],{"className":126681,"code":132474,"language":126683,"meta":24,"style":24},[26,133074,133075,133081,133093,133107,133121],{"__ignoreMap":24},[29,133076,133077,133079],{"class":31,"line":32},[29,133078,130529],{"class":35},[29,133080,15747],{"class":309},[29,133082,133083,133085,133087,133089,133091],{"class":31,"line":43},[29,133084,132487],{"class":39},[29,133086,51566],{"class":309},[29,133088,54893],{"class":39},[29,133090,130544],{"class":309},[29,133092,132496],{"class":367},[29,133094,133095,133097,133099,133101,133103,133105],{"class":31,"line":51},[29,133096,132501],{"class":39},[29,133098,51566],{"class":309},[29,133100,754],{"class":39},[29,133102,51621],{"class":305},[29,133104,132510],{"class":309},[29,133106,132513],{"class":367},[29,133108,133109,133111,133113,133115,133117,133119],{"class":31,"line":59},[29,133110,132518],{"class":39},[29,133112,51566],{"class":309},[29,133114,1008],{"class":39},[29,133116,51621],{"class":305},[29,133118,132527],{"class":309},[29,133120,132530],{"class":367},[29,133122,133123],{"class":31,"line":67},[29,133124,1741],{"class":309},[1638,133126],{"style":126537,"src":133127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[171,133129,133130],{},"(6)总结",[445,133132,133133,133148],{},[448,133134,133135],{},[451,133136,133137,133139,133142,133145],{},[454,133138,132471],{"align":23911},[454,133140,133141],{"align":23911},"是否脱标",[454,133143,133144],{"align":23911},"移动位置",[454,133146,133147],{"align":23911},"是否常用",[492,133149,133150,133163,133177,133191,133204],{},[451,133151,133152,133155,133157,133160],{},[497,133153,133154],{"align":23911},"Static 静态定位",[497,133156,104807],{"align":23911},[497,133158,133159],{"align":23911},"不能使用边偏移",[497,133161,133162],{"align":23911},"很少",[451,133164,133165,133168,133171,133174],{},[497,133166,133167],{"align":23911},"Relative 相对定位",[497,133169,133170],{"align":23911},"否(占有位置)",[497,133172,133173],{"align":23911},"相对于自身位置移动",[497,133175,133176],{"align":23911},"基本单独使用",[451,133178,133179,133182,133185,133188],{},[497,133180,133181],{"align":23911},"Absolute 绝对定位",[497,133183,133184],{"align":23911},"是(不占有位置)",[497,133186,133187],{"align":23911},"带有定位的父级",[497,133189,133190],{"align":23911},"要和定位父级元素搭配使用",[451,133192,133193,133196,133198,133201],{},[497,133194,133195],{"align":23911},"Fixed 固定定位",[497,133197,133184],{"align":23911},[497,133199,133200],{"align":23911},"浏览器可视区",[497,133202,133203],{"align":23911},"单独使用,不需要父级",[451,133205,133206,133209,133211,133213],{},[497,133207,133208],{"align":23911},"Sticky 粘性定位",[497,133210,133170],{"align":23911},[497,133212,133200],{"align":23911},[497,133214,133215],{"align":23911},"当前阶段少",[259,133217,133218],{"start":43},[178,133219,133220,133223],{},[457,133221,133222],{},"边偏移"," 则决定了该元素的最终位置",[445,133225,133226,133237],{},[448,133227,133228],{},[451,133229,133230,133233,133235],{},[454,133231,133232],{"align":23911},"边偏移属性",[454,133234,27621],{"align":23911},[454,133236,27618],{"align":23911},[492,133238,133239,133250,133261,133271],{},[451,133240,133241,133244,133247],{},[497,133242,133243],{"align":23911},"top",[497,133245,133246],{"align":23911},"top: 80px;",[497,133248,133249],{"align":23911},"顶端偏移量，定义元素相对于父元素上边线的距离",[451,133251,133252,133255,133258],{},[497,133253,133254],{"align":23911},"bottom",[497,133256,133257],{"align":23911},"bottom: 80px ;",[497,133259,133260],{"align":23911},"底部偏移量，定义元素相对于其父元素下边线的距离",[451,133262,133263,133265,133268],{},[497,133264,23911],{"align":23911},[497,133266,133267],{"align":23911},"left: 80px ;",[497,133269,133270],{"align":23911},"左侧偏移量，定义元素相对于其父元素左边线的距离",[451,133272,133273,133275,133278],{},[497,133274,72651],{"align":23911},[497,133276,133277],{"align":23911},"right: 80px ;",[497,133279,133280],{"align":23911},"右侧偏移量，定义元素相对于其父元素右边线的距离",[175,133282,133283],{},[178,133284,9200,133285,133287,133288,133290,133291,133293,133294,133297,133298,133300,133301,133303],{},[53845,133286],{},"  ① ",[457,133289,133222],{}," 需要和 ",[457,133292,132471],{}," 联合使用， ",[457,133295,133296],{},"单独使用无效"," ；",[53845,133299],{},"  ②top和bottom不要同时使用",[53845,133302],{},"  ③left和right不要同时使用",[22173,133305,133307],{"id":133306},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[171,133309,133310],{},"子级是绝对定位的话，父级要用相对定位",[175,133312,133313,133316,133319,133322],{},[178,133314,133315],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[178,133317,133318],{},"父盒子需要加定位限制子盒子在父盒子内显示",[178,133320,133321],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[178,133323,133324,133325,133328],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[457,133326,133327],{},"子绝父绝"," 也会遇到",[22173,133330,133332],{"id":133331},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[175,133334,133335,133350],{},[178,133336,133337,133338,133341,133342,133345,133346,133349],{},"在使用 ",[457,133339,133340],{},"定位"," 布局时，可能会 ",[457,133343,133344],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[457,133347,133348],{},"z-index"," 来控制盒子的前后次序 (z轴)",[178,133351,5356],{},[19,133353,133354],{"className":126681,"code":132474,"language":126683,"meta":24,"style":24},[26,133355,133356,133362,133374,133388,133402],{"__ignoreMap":24},[29,133357,133358,133360],{"class":31,"line":32},[29,133359,130529],{"class":35},[29,133361,15747],{"class":309},[29,133363,133364,133366,133368,133370,133372],{"class":31,"line":43},[29,133365,132487],{"class":39},[29,133367,51566],{"class":309},[29,133369,54893],{"class":39},[29,133371,130544],{"class":309},[29,133373,132496],{"class":367},[29,133375,133376,133378,133380,133382,133384,133386],{"class":31,"line":51},[29,133377,132501],{"class":39},[29,133379,51566],{"class":309},[29,133381,754],{"class":39},[29,133383,51621],{"class":305},[29,133385,132510],{"class":309},[29,133387,132513],{"class":367},[29,133389,133390,133392,133394,133396,133398,133400],{"class":31,"line":59},[29,133391,132518],{"class":39},[29,133393,51566],{"class":309},[29,133395,1008],{"class":39},[29,133397,51621],{"class":305},[29,133399,132527],{"class":309},[29,133401,132530],{"class":367},[29,133403,133404],{"class":31,"line":67},[29,133405,1741],{"class":309},[175,133407,133408],{},[178,133409,133410,133411,133287,133413,133415,133416,127844,133419,82668,133422,133424,133425,133427,133428,133431,133432,133297,133435,133437,133438,133441,133443],{},"z-index的特性",[53845,133412],{},[457,133414,127145],{}," ： ",[457,133417,133418],{},"正整数",[457,133420,133421],{},"负整数",[457,133423,499],{}," ，默认值是 0，数值越大，盒子越靠上；",[53845,133426],{},"  ②如果 ",[457,133429,133430],{},"属性值相同"," ，则按照书写顺序， ",[457,133433,133434],{},"后来居上",[53845,133436],{},"  ③数字后面 ",[457,133439,133440],{},"不能加单位",[53845,133442],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22173,133445,133447],{"id":133446},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[171,133449,133450],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[171,133452,133453],{},"方法:",[175,133455,133456,133466],{},[178,133457,133458,133459,133462,133463],{},"left: 50%; 让 ",[457,133460,133461],{},"盒子的左侧"," 移动到 ",[457,133464,133465],{},"父级元素的水平中心位置",[178,133467,133468,133469,133472,133473],{},"margin-left: -100px; 让盒子 ",[457,133470,133471],{},"向左"," 移动 ",[457,133474,133475],{},"自身宽度的一半",[22173,133477,133479],{"id":133478},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[259,133481,133482,133485],{},[178,133483,133484],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[178,133486,133487],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[171,133489,133490],{},"也就是说绝对定位和固定定位和浮动类似",[259,133492,133493],{"start":51},[178,133494,133495],{},"display 是显示模式， 可以改变显示模式有以下方式:",[175,133497,133498,133501,133504],{},[178,133499,133500],{},"可以用inline-block 转换为行内块",[178,133502,133503],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[178,133505,133506],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[171,133508,133509],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22173,133511,133513],{"id":133512},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[259,133515,133516,133519,133522,133525],{},[178,133517,133518],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[178,133520,133521],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[178,133523,133524],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[178,133526,133527],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[19,133529,133530],{"className":126681,"code":131147,"language":126683,"meta":24,"style":24},[26,133531,133532,133538,133548,133552,133558,133568],{"__ignoreMap":24},[29,133533,133534,133536],{"class":31,"line":32},[29,133535,131154],{"class":35},[29,133537,15747],{"class":309},[29,133539,133540,133542,133544,133546],{"class":31,"line":43},[29,133541,131161],{"class":39},[29,133543,51566],{"class":309},[29,133545,23911],{"class":39},[29,133547,1468],{"class":309},[29,133549,133550],{"class":31,"line":51},[29,133551,1741],{"class":309},[29,133553,133554,133556],{"class":31,"line":59},[29,133555,131176],{"class":35},[29,133557,15747],{"class":309},[29,133559,133560,133562,133564,133566],{"class":31,"line":67},[29,133561,131161],{"class":39},[29,133563,51566],{"class":309},[29,133565,72651],{"class":39},[29,133567,1468],{"class":309},[29,133569,133570],{"class":31,"line":75},[29,133571,1741],{"class":309},[1638,133573],{"style":126537,"src":133574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22173,133576,133578],{"id":133577},"_11138-轮播图","11.1.3.8 轮播图",[1638,133580],{"style":126537,"src":133581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[259,133583,133584],{},[178,133585,133586],{},"制作顺序:",[175,133588,133589,133592,133595,133604],{},[178,133590,133591],{},"大盒子我们类名为： tb-promo 淘宝广告",[178,133593,133594],{},"里面先放一张图片",[178,133596,133597,133598,133600,133601,133603],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53845,133599],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53845,133602],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[178,133605,133606,133607,133609,133610,133612],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53845,133608],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53845,133611],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[259,133614,133615],{"start":43},[178,133616,133617],{},"代码模块",[19,133619,133621],{"className":126681,"code":133620,"language":126683,"meta":24,"style":24},"\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",[26,133622,133623,133628,133635,133645,133655,133665,133669,133674,133681,133691],{"__ignoreMap":24},[29,133624,133625],{"class":31,"line":32},[29,133626,133627],{"class":367},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[29,133629,133630,133633],{"class":31,"line":43},[29,133631,133632],{"class":35},".son",[29,133634,15747],{"class":309},[29,133636,133637,133639,133641,133643],{"class":31,"line":51},[29,133638,132487],{"class":39},[29,133640,51566],{"class":309},[29,133642,54960],{"class":39},[29,133644,1468],{"class":309},[29,133646,133647,133649,133651,133653],{"class":31,"line":59},[29,133648,132501],{"class":39},[29,133650,51566],{"class":309},[29,133652,499],{"class":39},[29,133654,1468],{"class":309},[29,133656,133657,133659,133661,133663],{"class":31,"line":67},[29,133658,132518],{"class":39},[29,133660,51566],{"class":309},[29,133662,499],{"class":39},[29,133664,1468],{"class":309},[29,133666,133667],{"class":31,"line":75},[29,133668,1741],{"class":309},[29,133670,133671],{"class":31,"line":83},[29,133672,133673],{"class":367},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[29,133675,133676,133679],{"class":31,"line":158},[29,133677,133678],{"class":35},".father",[29,133680,15747],{"class":309},[29,133682,133683,133685,133687,133689],{"class":31,"line":166},[29,133684,132487],{"class":39},[29,133686,51566],{"class":309},[29,133688,54893],{"class":39},[29,133690,1468],{"class":309},[29,133692,133693],{"class":31,"line":1505},[29,133694,1741],{"class":309},[171,133696,133697],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[275,133699,133701],{"id":133700},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1638,133703],{"style":126537,"src":133704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[171,133706,133707],{},"✨ 黄金口诀：",[171,133709,133710],{},"\"TOP正下负上，LEFT正右负左\"",[171,133712,133713],{},"\"RIGHT正左负右，BOTTOM正上负下",[171,133715,133716],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[171,133718,133719],{},"✨ 简单记：",[171,133721,133722],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[223,133724,133725],{},"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":24,"searchDepth":43,"depth":43,"links":133727},[133728],{"id":132255,"depth":43,"text":132256,"children":133729},[133730,133731,133732,133733],{"id":132259,"depth":51,"text":132260},{"id":132274,"depth":51,"text":132275},{"id":132442,"depth":51,"text":132443},{"id":133700,"depth":51,"text":133701},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132247,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133740,"title":133741,"body":133742,"description":230,"extension":231,"meta":135165,"navigation":233,"path":135166,"seo":135167,"stem":135168,"__hash__":135169},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133743,"toc":135144},[133744,133747,133751,133759,133763,133768,133776,133788,133792,133797,133805,133816,133820,133825,133866,133874,133878,133881,133884,133887,133981,133984,134078,134081,134175,134178,134181,134216,134219,134222,134252,134255,134258,134261,134264,134267,134270,134273,134343,134346,134350,134354,134395,134399,134405,134408,134411,134415,134418,134421,134424,134505,134508,134511,134515,134519,134522,134525,134528,134531,134534,134540,134549,134553,134572,134576,134586,134589,134592,134595,134598,134601,134604,134607,134610,134619,134623,134632,134635,134640,134693,134698,134864,134867,134870,134875,134878,134881,134884,134887,134892,135040,135043,135046,135051,135054,135059,135093,135096,135099,135103,135106,135113,135116,135119,135122,135125,135128,135131,135134,135138,135141],[10,133745,133741],{"id":133746},"_12-显示隐藏与图形资源",[14,133748,133750],{"id":133749},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[175,133752,133753,133756],{},[178,133754,133755],{},"目的:让一个元素在页面中消失或者显示出来",[178,133757,133758],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[275,133760,133762],{"id":133761},"_1211-display-显示","12.1.1 display 显示",[259,133764,133765],{},[178,133766,133767],{},"display 设置或检索对象是否及如何显示",[175,133769,133770,133773],{},[178,133771,133772],{},"display: none;隐藏对象",[178,133774,133775],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[259,133777,133778,133785],{"start":43},[178,133779,133780,133781,133784],{},"特点： display 隐藏元素后， ",[457,133782,133783],{},"不再占"," 有原来的位置",[178,133786,133787],{},"在js中使用非常的广泛",[275,133789,133791],{"id":133790},"_1212-visibility可见性","12.1.2 visibility可见性",[259,133793,133794],{},[178,133795,133796],{},"visibility 属性用于指定一个元素应可见还是隐藏",[175,133798,133799,133802],{},[178,133800,133801],{},"visibility： visible；元素可见",[178,133803,133804],{},"visibility：hidden；元素隐藏",[259,133806,133807,133810,133813],{"start":43},[178,133808,133809],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[178,133811,133812],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[178,133814,133815],{},"隐藏后继续占有原有位置",[275,133817,133819],{"id":133818},"_1213-overflow溢出","12.1.3 overflow溢出",[175,133821,133822],{},[178,133823,133824],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[445,133826,133827,133835],{},[448,133828,133829],{},[451,133830,133831,133833],{},[454,133832,127145],{"align":23911},[454,133834,27618],{"align":23911},[492,133836,133837,133845,133852,133859],{},[451,133838,133839,133842],{},[497,133840,133841],{"align":23911},"visible",[497,133843,133844],{"align":23911},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[451,133846,133847,133849],{},[497,133848,61843],{"align":23911},[497,133850,133851],{"align":23911},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[451,133853,133854,133856],{},[497,133855,129101],{"align":23911},[497,133857,133858],{"align":23911},"不管超出内容否，总是显示滚动条",[451,133860,133861,133863],{},[497,133862,72792],{"align":23911},[497,133864,133865],{"align":23911},"超出自动显示滚动条，不超出不显示滚动条",[175,133867,133868,133871],{},[178,133869,133870],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[178,133872,133873],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[275,133875,133877],{"id":133876},"_1214-案例收获","12.1.4 案例收获",[1638,133879],{"style":126537,"src":133880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[171,133882,133883],{},"问题：没做出来动态效果，使用hover没实现",[171,133885,133886],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[19,133888,133889],{"className":126681,"code":132113,"language":126683,"meta":24,"style":24},[26,133890,133891,133895,133909,133913,133927,133931,133945,133949,133963,133967],{"__ignoreMap":24},[29,133892,133893],{"class":31,"line":32},[29,133894,132120],{"class":367},[29,133896,133897,133899,133901,133903,133905,133907],{"class":31,"line":43},[29,133898,132125],{"class":35},[29,133900,79936],{"class":309},[29,133902,129041],{"class":39},[29,133904,51566],{"class":309},[29,133906,132134],{"class":39},[29,133908,129611],{"class":309},[29,133910,133911],{"class":31,"line":51},[29,133912,132141],{"class":367},[29,133914,133915,133917,133919,133921,133923,133925],{"class":31,"line":59},[29,133916,132146],{"class":35},[29,133918,79936],{"class":309},[29,133920,129041],{"class":39},[29,133922,51566],{"class":309},[29,133924,54893],{"class":39},[29,133926,129611],{"class":309},[29,133928,133929],{"class":31,"line":67},[29,133930,132161],{"class":367},[29,133932,133933,133935,133937,133939,133941,133943],{"class":31,"line":75},[29,133934,132166],{"class":35},[29,133936,79936],{"class":309},[29,133938,129041],{"class":39},[29,133940,51566],{"class":309},[29,133942,54960],{"class":39},[29,133944,129611],{"class":309},[29,133946,133947],{"class":31,"line":83},[29,133948,132181],{"class":367},[29,133950,133951,133953,133955,133957,133959,133961],{"class":31,"line":158},[29,133952,132186],{"class":35},[29,133954,79936],{"class":309},[29,133956,129041],{"class":39},[29,133958,51566],{"class":309},[29,133960,86362],{"class":39},[29,133962,129611],{"class":309},[29,133964,133965],{"class":31,"line":166},[29,133966,132201],{"class":367},[29,133968,133969,133971,133973,133975,133977,133979],{"class":31,"line":1505},[29,133970,132206],{"class":35},[29,133972,79936],{"class":309},[29,133974,129041],{"class":39},[29,133976,51566],{"class":309},[29,133978,132215],{"class":39},[29,133980,129611],{"class":309},[171,133982,133983],{},"完整代码：",[19,133985,133986],{"className":126681,"code":132113,"language":126683,"meta":24,"style":24},[26,133987,133988,133992,134006,134010,134024,134028,134042,134046,134060,134064],{"__ignoreMap":24},[29,133989,133990],{"class":31,"line":32},[29,133991,132120],{"class":367},[29,133993,133994,133996,133998,134000,134002,134004],{"class":31,"line":43},[29,133995,132125],{"class":35},[29,133997,79936],{"class":309},[29,133999,129041],{"class":39},[29,134001,51566],{"class":309},[29,134003,132134],{"class":39},[29,134005,129611],{"class":309},[29,134007,134008],{"class":31,"line":51},[29,134009,132141],{"class":367},[29,134011,134012,134014,134016,134018,134020,134022],{"class":31,"line":59},[29,134013,132146],{"class":35},[29,134015,79936],{"class":309},[29,134017,129041],{"class":39},[29,134019,51566],{"class":309},[29,134021,54893],{"class":39},[29,134023,129611],{"class":309},[29,134025,134026],{"class":31,"line":67},[29,134027,132161],{"class":367},[29,134029,134030,134032,134034,134036,134038,134040],{"class":31,"line":75},[29,134031,132166],{"class":35},[29,134033,79936],{"class":309},[29,134035,129041],{"class":39},[29,134037,51566],{"class":309},[29,134039,54960],{"class":39},[29,134041,129611],{"class":309},[29,134043,134044],{"class":31,"line":83},[29,134045,132181],{"class":367},[29,134047,134048,134050,134052,134054,134056,134058],{"class":31,"line":158},[29,134049,132186],{"class":35},[29,134051,79936],{"class":309},[29,134053,129041],{"class":39},[29,134055,51566],{"class":309},[29,134057,86362],{"class":39},[29,134059,129611],{"class":309},[29,134061,134062],{"class":31,"line":166},[29,134063,132201],{"class":367},[29,134065,134066,134068,134070,134072,134074,134076],{"class":31,"line":1505},[29,134067,132206],{"class":35},[29,134069,79936],{"class":309},[29,134071,129041],{"class":39},[29,134073,51566],{"class":309},[29,134075,132215],{"class":39},[29,134077,129611],{"class":309},[171,134079,134080],{},"分布思路重点详解：",[19,134082,134083],{"className":126681,"code":132113,"language":126683,"meta":24,"style":24},[26,134084,134085,134089,134103,134107,134121,134125,134139,134143,134157,134161],{"__ignoreMap":24},[29,134086,134087],{"class":31,"line":32},[29,134088,132120],{"class":367},[29,134090,134091,134093,134095,134097,134099,134101],{"class":31,"line":43},[29,134092,132125],{"class":35},[29,134094,79936],{"class":309},[29,134096,129041],{"class":39},[29,134098,51566],{"class":309},[29,134100,132134],{"class":39},[29,134102,129611],{"class":309},[29,134104,134105],{"class":31,"line":51},[29,134106,132141],{"class":367},[29,134108,134109,134111,134113,134115,134117,134119],{"class":31,"line":59},[29,134110,132146],{"class":35},[29,134112,79936],{"class":309},[29,134114,129041],{"class":39},[29,134116,51566],{"class":309},[29,134118,54893],{"class":39},[29,134120,129611],{"class":309},[29,134122,134123],{"class":31,"line":67},[29,134124,132161],{"class":367},[29,134126,134127,134129,134131,134133,134135,134137],{"class":31,"line":75},[29,134128,132166],{"class":35},[29,134130,79936],{"class":309},[29,134132,129041],{"class":39},[29,134134,51566],{"class":309},[29,134136,54960],{"class":39},[29,134138,129611],{"class":309},[29,134140,134141],{"class":31,"line":83},[29,134142,132181],{"class":367},[29,134144,134145,134147,134149,134151,134153,134155],{"class":31,"line":158},[29,134146,132186],{"class":35},[29,134148,79936],{"class":309},[29,134150,129041],{"class":39},[29,134152,51566],{"class":309},[29,134154,86362],{"class":39},[29,134156,129611],{"class":309},[29,134158,134159],{"class":31,"line":166},[29,134160,132201],{"class":367},[29,134162,134163,134165,134167,134169,134171,134173],{"class":31,"line":1505},[29,134164,132206],{"class":35},[29,134166,79936],{"class":309},[29,134168,129041],{"class":39},[29,134170,51566],{"class":309},[29,134172,132215],{"class":39},[29,134174,129611],{"class":309},[1638,134176],{"style":126537,"src":134177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[171,134179,134180],{},"图片太大，盒子太小，此时需要修改图片的大小",[19,134182,134184],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[26,134185,134186],{"__ignoreMap":24},[29,134187,134188,134190,134192,134194,134196,134199,134201,134203,134206,134209,134211,134214],{"class":31,"line":32},[29,134189,1218],{"class":309},[29,134191,1638],{"class":51429},[29,134193,55368],{"class":35},[29,134195,355],{"class":309},[29,134197,134198],{"class":103},"\"images\u002Fpic.jpg\"",[29,134200,55376],{"class":35},[29,134202,355],{"class":309},[29,134204,134205],{"class":103},"\"描述文字\"",[29,134207,134208],{"class":35}," title",[29,134210,355],{"class":309},[29,134212,134213],{"class":103},"\"悬停提示\"",[29,134215,51436],{"class":309},[1638,134217],{"style":126537,"src":134218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[171,134220,134221],{},"制造遮罩层",[19,134223,134224],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,134225,134226],{"__ignoreMap":24},[29,134227,134228,134230,134232,134234,134236,134238,134240,134242,134244,134246,134248,134250],{"class":31,"line":32},[29,134229,1218],{"class":309},[29,134231,1638],{"class":51429},[29,134233,55368],{"class":35},[29,134235,355],{"class":309},[29,134237,134198],{"class":103},[29,134239,55376],{"class":35},[29,134241,355],{"class":309},[29,134243,134205],{"class":103},[29,134245,134208],{"class":35},[29,134247,355],{"class":309},[29,134249,134213],{"class":103},[29,134251,51436],{"class":309},[171,134253,134254],{},"此时是这样的为标准流",[1638,134256],{"style":126537,"src":134257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[171,134259,134260],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[171,134262,134263],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[171,134265,134266],{},"让他在中间，用center(background-position)",[171,134268,134269],{},"将需要变的尽可能放到一个盒子中",[171,134271,134272],{},"放大盒子上内部盒子发生变化",[19,134274,134276],{"className":126681,"code":134275,"language":126683,"meta":24,"style":24},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[26,134277,134278,134284,134294,134298,134305,134315,134327,134339],{"__ignoreMap":24},[29,134279,134280,134282],{"class":31,"line":32},[29,134281,127748],{"class":35},[29,134283,15747],{"class":309},[29,134285,134286,134288,134290,134292],{"class":31,"line":43},[29,134287,132487],{"class":39},[29,134289,51566],{"class":309},[29,134291,54893],{"class":39},[29,134293,1468],{"class":309},[29,134295,134296],{"class":31,"line":51},[29,134297,1741],{"class":309},[29,134299,134300,134303],{"class":31,"line":59},[29,134301,134302],{"class":35},".child",[29,134304,15747],{"class":309},[29,134306,134307,134309,134311,134313],{"class":31,"line":67},[29,134308,132487],{"class":39},[29,134310,51566],{"class":309},[29,134312,54960],{"class":39},[29,134314,1468],{"class":309},[29,134316,134317,134319,134321,134323,134325],{"class":31,"line":75},[29,134318,132501],{"class":39},[29,134320,51566],{"class":309},[29,134322,964],{"class":39},[29,134324,636],{"class":305},[29,134326,1468],{"class":309},[29,134328,134329,134331,134333,134335,134337],{"class":31,"line":83},[29,134330,132518],{"class":39},[29,134332,51566],{"class":309},[29,134334,964],{"class":39},[29,134336,636],{"class":305},[29,134338,1468],{"class":309},[29,134340,134341],{"class":31,"line":158},[29,134342,1741],{"class":309},[171,134344,134345],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134347,134349],{"id":134348},"_122-精灵图","12.2 精灵图",[275,134351,134353],{"id":134352},"_1221-理解","12.2.1 理解",[259,134355,134356,134374],{},[178,134357,134358,134359,132587,134362,134365,134366,134369,134370,134373],{},"目的： ",[457,134360,134361],{},"为了有效地减少服务器接收和发送请求的次数",[457,134363,134364],{},"提高"," 页面的 ",[457,134367,134368],{},"加载速度"," ，出现了 ",[457,134371,134372],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[178,134375,134376,134377,134379,134380,134382,134383,134385,134386,134388,134389,134391,134392,134394],{},"使用精灵图核心：",[53845,134378],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53845,134381],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53845,134384],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53845,134387],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53845,134390],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53845,134393],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[275,134396,134398],{"id":134397},"_1222-扒图","12.2.2 扒图",[19,134400,134403],{"className":134401,"code":134402,"language":5362},[5360],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[26,134404,134402],{"__ignoreMap":24},[1638,134406],{"style":126537,"src":134407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1638,134409],{"style":126537,"src":134410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[275,134412,134414],{"id":134413},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1638,134416],{"style":126537,"src":134417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[171,134419,134420],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1638,134422],{"style":126537,"src":134423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[19,134425,134427],{"className":126681,"code":134426,"language":126683,"meta":24,"style":24},"\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",[26,134428,134429,134434,134441,134453,134465,134484,134501],{"__ignoreMap":24},[29,134430,134431],{"class":31,"line":32},[29,134432,134433],{"class":367},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[29,134435,134436,134439],{"class":31,"line":43},[29,134437,134438],{"class":35},".icon",[29,134440,15747],{"class":309},[29,134442,134443,134445,134447,134449,134451],{"class":31,"line":51},[29,134444,70697],{"class":39},[29,134446,51566],{"class":309},[29,134448,1008],{"class":39},[29,134450,51621],{"class":305},[29,134452,1468],{"class":309},[29,134454,134455,134457,134459,134461,134463],{"class":31,"line":59},[29,134456,70917],{"class":39},[29,134458,51566],{"class":309},[29,134460,1008],{"class":39},[29,134462,51621],{"class":305},[29,134464,1468],{"class":309},[29,134466,134467,134469,134471,134473,134475,134478,134480,134482],{"class":31,"line":67},[29,134468,70740],{"class":39},[29,134470,51566],{"class":309},[29,134472,61855],{"class":39},[29,134474,310],{"class":309},[29,134476,134477],{"class":5391},"sprites.png",[29,134479,13889],{"class":309},[29,134481,61865],{"class":39},[29,134483,1468],{"class":309},[29,134485,134486,134488,134490,134492,134494,134497,134499],{"class":31,"line":75},[29,134487,128941],{"class":39},[29,134489,51566],{"class":309},[29,134491,51892],{"class":39},[29,134493,51621],{"class":305},[29,134495,134496],{"class":39}," -20",[29,134498,51621],{"class":305},[29,134500,1468],{"class":309},[29,134502,134503],{"class":31,"line":83},[29,134504,1741],{"class":309},[1638,134506],{"style":126537,"src":134507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[171,134509,134510],{},"在前端中坐标轴的正方向是右和下",[14,134512,134514],{"id":134513},"_123-字体图标","12.3 字体图标",[275,134516,134518],{"id":134517},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[171,134520,134521],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[171,134523,134524],{},"精灵图是有诸多优点的，但是缺点很明显。",[171,134526,134527],{},"1.图片文件还是比较大的。",[171,134529,134530],{},"2.图片本身放大和缩小会失真。",[171,134532,134533],{},"3.一旦图片制作完毕想要更换非常复杂。",[171,134535,134536,134537,25869],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[457,134538,134539],{},"字体图标 iconfont",[171,134541,134542,134545,134546,28514],{},[457,134543,134544],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[457,134547,134548],{},"展示的是图标，本质属于字体",[275,134550,134552],{"id":134551},"_1232-字体图标的优点","12.3.2 字体图标的优点",[175,134554,134555,134560,134563,134566,134569],{},[178,134556,134557,134559],{},[457,134558,26005],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[178,134561,134562],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[178,134564,134565],{},"兼容性：几乎支持所有的浏览器，请放心使用",[178,134567,134568],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[178,134570,134571],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[275,134573,134575],{"id":134574},"_1233-字体库下载网站","12.3.3 字体库下载网站",[175,134577,134578],{},[178,134579,134580,134581],{},"icomoon字体库：",[546,134582,134585],{"href":134583,"rel":134584},"http:\u002F\u002Ficomoon.io\u002F",[24038],"http:\u002F\u002Ficomoon.io",[171,134587,134588],{},"进去之后点icomoon app",[1638,134590],{"style":126537,"src":134591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[171,134593,134594],{},"可以对其编辑：",[1638,134596],{"style":126537,"src":134597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[171,134599,134600],{},"生成字体：",[1638,134602],{"style":126537,"src":134603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[171,134605,134606],{},"下载：",[1638,134608],{"style":126537,"src":134609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[175,134611,134612],{},[178,134613,134614,134615],{},"阿里iconfont字体库： ",[546,134616,134617],{"href":134617,"rel":134618},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24038],[275,134620,134622],{"id":134621},"_1234-字体图标的引入","12.3.4 字体图标的引入",[259,134624,134625],{},[178,134626,134627,134628,134631],{},"把下载包里面的 ",[457,134629,134630],{},"fonts"," 文件夹放入页面根目录下",[1638,134633],{"style":126537,"src":134634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[259,134636,134637],{"start":43},[178,134638,134639],{},"字体文件格式",[445,134641,134642,134651],{},[448,134643,134644],{},[451,134645,134646,134649],{},[454,134647,134648],{"align":23911},"格式",[454,134650,23915],{"align":23911},[492,134652,134653,134663,134673,134683],{},[451,134654,134655,134660],{},[497,134656,134657],{"align":23911},[457,134658,134659],{},".ttf",[497,134661,134662],{"align":23911},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[451,134664,134665,134670],{},[497,134666,134667],{"align":23911},[457,134668,134669],{},".woff",[497,134671,134672],{"align":23911},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[451,134674,134675,134680],{},[497,134676,134677],{"align":23911},[457,134678,134679],{},".eot",[497,134681,134682],{"align":23911},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[451,134684,134685,134690],{},[497,134686,134687],{"align":23911},[457,134688,134689],{},"svg",[497,134691,134692],{"align":23911},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[259,134694,134695],{"start":51},[178,134696,134697],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[19,134699,134701],{"className":126681,"code":134700,"language":126683,"meta":24,"style":24},"\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",[26,134702,134703,134708,134715,134727,134743,134768,134789,134809,134829,134833,134839,134849,134860],{"__ignoreMap":24},[29,134704,134705],{"class":31,"line":32},[29,134706,134707],{"class":367},"\u002F* 引入字体图标 *\u002F\n",[29,134709,134710,134713],{"class":31,"line":43},[29,134711,134712],{"class":305},"@font-face",[29,134714,15747],{"class":309},[29,134716,134717,134720,134722,134725],{"class":31,"line":51},[29,134718,134719],{"class":39},"  font-family",[29,134721,51566],{"class":309},[29,134723,134724],{"class":103},"'icomoon'",[29,134726,1468],{"class":309},[29,134728,134729,134732,134734,134736,134738,134741],{"class":31,"line":59},[29,134730,134731],{"class":39},"  src",[29,134733,51566],{"class":309},[29,134735,61855],{"class":39},[29,134737,310],{"class":309},[29,134739,134740],{"class":103},"'fonts\u002Ficomoon.eot'",[29,134742,2894],{"class":309},[29,134744,134745,134747,134749,134751,134753,134756,134758,134761,134763,134766],{"class":31,"line":67},[29,134746,134731],{"class":39},[29,134748,51566],{"class":309},[29,134750,61855],{"class":39},[29,134752,310],{"class":309},[29,134754,134755],{"class":103},"'fonts\u002Ficomoon.eot?#iefix'",[29,134757,13889],{"class":309},[29,134759,134760],{"class":39},"format",[29,134762,310],{"class":309},[29,134764,134765],{"class":103},"'embedded-opentype'",[29,134767,38176],{"class":309},[29,134769,134770,134773,134775,134778,134780,134782,134784,134787],{"class":31,"line":75},[29,134771,134772],{"class":39},"       url",[29,134774,310],{"class":309},[29,134776,134777],{"class":103},"'fonts\u002Ficomoon.woff'",[29,134779,13889],{"class":309},[29,134781,134760],{"class":39},[29,134783,310],{"class":309},[29,134785,134786],{"class":103},"'woff'",[29,134788,38176],{"class":309},[29,134790,134791,134793,134795,134798,134800,134802,134804,134807],{"class":31,"line":83},[29,134792,134772],{"class":39},[29,134794,310],{"class":309},[29,134796,134797],{"class":103},"'fonts\u002Ficomoon.ttf'",[29,134799,13889],{"class":309},[29,134801,134760],{"class":39},[29,134803,310],{"class":309},[29,134805,134806],{"class":103},"'truetype'",[29,134808,38176],{"class":309},[29,134810,134811,134813,134815,134818,134820,134822,134824,134827],{"class":31,"line":158},[29,134812,134772],{"class":39},[29,134814,310],{"class":309},[29,134816,134817],{"class":103},"'fonts\u002Ficomoon.svg#icomoon'",[29,134819,13889],{"class":309},[29,134821,134760],{"class":39},[29,134823,310],{"class":309},[29,134825,134826],{"class":103},"'svg'",[29,134828,2894],{"class":309},[29,134830,134831],{"class":31,"line":166},[29,134832,1741],{"class":309},[29,134834,134835,134837],{"class":31,"line":1505},[29,134836,134438],{"class":35},[29,134838,15747],{"class":309},[29,134840,134841,134843,134845,134847],{"class":31,"line":1788},[29,134842,134719],{"class":39},[29,134844,51566],{"class":309},[29,134846,134724],{"class":103},[29,134848,1468],{"class":309},[29,134850,134851,134854,134856,134858],{"class":31,"line":1793},[29,134852,134853],{"class":39},"  font-style",[29,134855,51566],{"class":309},[29,134857,63970],{"class":39},[29,134859,1468],{"class":309},[29,134861,134862],{"class":31,"line":1799},[29,134863,1741],{"class":309},[171,134865,134866],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1638,134868],{"style":126537,"src":134869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[259,134871,134872],{"start":59},[178,134873,134874],{},"添加字体",[1638,134876],{"style":126537,"src":134877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[171,134879,134880],{},"复制：",[1638,134882],{"style":126537,"src":134883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[171,134885,134886],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[259,134888,134889],{"start":67},[178,134890,134891],{},"代码展示：",[19,134893,134894],{"className":126681,"code":134700,"language":126683,"meta":24,"style":24},[26,134895,134896,134900,134906,134916,134930,134952,134970,134988,135006,135010,135016,135026,135036],{"__ignoreMap":24},[29,134897,134898],{"class":31,"line":32},[29,134899,134707],{"class":367},[29,134901,134902,134904],{"class":31,"line":43},[29,134903,134712],{"class":305},[29,134905,15747],{"class":309},[29,134907,134908,134910,134912,134914],{"class":31,"line":51},[29,134909,134719],{"class":39},[29,134911,51566],{"class":309},[29,134913,134724],{"class":103},[29,134915,1468],{"class":309},[29,134917,134918,134920,134922,134924,134926,134928],{"class":31,"line":59},[29,134919,134731],{"class":39},[29,134921,51566],{"class":309},[29,134923,61855],{"class":39},[29,134925,310],{"class":309},[29,134927,134740],{"class":103},[29,134929,2894],{"class":309},[29,134931,134932,134934,134936,134938,134940,134942,134944,134946,134948,134950],{"class":31,"line":67},[29,134933,134731],{"class":39},[29,134935,51566],{"class":309},[29,134937,61855],{"class":39},[29,134939,310],{"class":309},[29,134941,134755],{"class":103},[29,134943,13889],{"class":309},[29,134945,134760],{"class":39},[29,134947,310],{"class":309},[29,134949,134765],{"class":103},[29,134951,38176],{"class":309},[29,134953,134954,134956,134958,134960,134962,134964,134966,134968],{"class":31,"line":75},[29,134955,134772],{"class":39},[29,134957,310],{"class":309},[29,134959,134777],{"class":103},[29,134961,13889],{"class":309},[29,134963,134760],{"class":39},[29,134965,310],{"class":309},[29,134967,134786],{"class":103},[29,134969,38176],{"class":309},[29,134971,134972,134974,134976,134978,134980,134982,134984,134986],{"class":31,"line":83},[29,134973,134772],{"class":39},[29,134975,310],{"class":309},[29,134977,134797],{"class":103},[29,134979,13889],{"class":309},[29,134981,134760],{"class":39},[29,134983,310],{"class":309},[29,134985,134806],{"class":103},[29,134987,38176],{"class":309},[29,134989,134990,134992,134994,134996,134998,135000,135002,135004],{"class":31,"line":158},[29,134991,134772],{"class":39},[29,134993,310],{"class":309},[29,134995,134817],{"class":103},[29,134997,13889],{"class":309},[29,134999,134760],{"class":39},[29,135001,310],{"class":309},[29,135003,134826],{"class":103},[29,135005,2894],{"class":309},[29,135007,135008],{"class":31,"line":166},[29,135009,1741],{"class":309},[29,135011,135012,135014],{"class":31,"line":1505},[29,135013,134438],{"class":35},[29,135015,15747],{"class":309},[29,135017,135018,135020,135022,135024],{"class":31,"line":1788},[29,135019,134719],{"class":39},[29,135021,51566],{"class":309},[29,135023,134724],{"class":103},[29,135025,1468],{"class":309},[29,135027,135028,135030,135032,135034],{"class":31,"line":1793},[29,135029,134853],{"class":39},[29,135031,51566],{"class":309},[29,135033,63970],{"class":39},[29,135035,1468],{"class":309},[29,135037,135038],{"class":31,"line":1799},[29,135039,1741],{"class":309},[1638,135041],{"style":126537,"src":135042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[171,135044,135045],{},"更加细节展示：",[259,135047,135048],{},[178,135049,135050],{},"html 标签内添加小图标",[1638,135052],{"style":126537,"src":135053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[259,135055,135056],{"start":43},[178,135057,135058],{},"给标签定义字体",[19,135060,135061],{"className":127428,"code":130785,"language":127430,"meta":24,"style":24},[26,135062,135063,135067,135081,135085],{"__ignoreMap":24},[29,135064,135065],{"class":31,"line":32},[29,135066,130792],{"class":367},[29,135068,135069,135071,135073,135075,135077,135079],{"class":31,"line":43},[29,135070,1218],{"class":309},[29,135072,51740],{"class":51429},[29,135074,53615],{"class":35},[29,135076,355],{"class":309},[29,135078,130805],{"class":103},[29,135080,51436],{"class":309},[29,135082,135083],{"class":31,"line":51},[29,135084,130812],{"class":309},[29,135086,135087,135089,135091],{"class":31,"line":59},[29,135088,51914],{"class":309},[29,135090,51740],{"class":51429},[29,135092,51436],{"class":309},[171,135094,135095],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1638,135097],{"style":126537,"src":135098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[275,135100,135102],{"id":135101},"_1235-字体图标的追加","12.3.5 字体图标的追加",[171,135104,135105],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[171,135107,135108,135109,135112],{},"把压缩包里面的 ",[457,135110,135111],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[171,135114,135115],{},"打开网站，点下方：",[1638,135117],{"style":126537,"src":135118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1638,135120],{"style":126537,"src":135121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1638,135123],{"style":126537,"src":135124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[171,135126,135127],{},"点yes重新加载",[171,135129,135130],{},"然后重复之前的操作就可以实现了",[171,135132,135133],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[275,135135,135137],{"id":135136},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1638,135139],{"style":126537,"src":135140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[223,135142,135143],{},"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":24,"searchDepth":43,"depth":43,"links":135145},[135146,135152,135157],{"id":133749,"depth":43,"text":133750,"children":135147},[135148,135149,135150,135151],{"id":133761,"depth":51,"text":133762},{"id":133790,"depth":51,"text":133791},{"id":133818,"depth":51,"text":133819},{"id":133876,"depth":51,"text":133877},{"id":134348,"depth":43,"text":134349,"children":135153},[135154,135155,135156],{"id":134352,"depth":51,"text":134353},{"id":134397,"depth":51,"text":134398},{"id":134413,"depth":51,"text":134414},{"id":134513,"depth":43,"text":134514,"children":135158},[135159,135160,135161,135162,135163,135164],{"id":134517,"depth":51,"text":134518},{"id":134551,"depth":51,"text":134552},{"id":134574,"depth":51,"text":134575},{"id":134621,"depth":51,"text":134622},{"id":135101,"depth":51,"text":135102},{"id":135136,"depth":51,"text":135137},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133741,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135171,"title":135172,"body":135173,"description":230,"extension":231,"meta":136400,"navigation":233,"path":136401,"seo":136402,"stem":136403,"__hash__":136404},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135174,"toc":136381},[135175,135178,135182,135185,135199,135267,135297,135300,135304,135308,135410,135457,135461,135464,135467,135501,135504,135507,135510,135513,135516,135519,135522,135524,135527,135530,135533,135536,135539,135542,135545,135573,135576,135580,135583,135590,135593,135596,135622,135625,135629,135632,135635,135642,135646,135649,135651,135683,135686,135689,135701,135707,135710,135713,135716,135718,135722,135725,135728,135731,135776,135780,135782,135785,135792,135834,135837,135841,135846,135860,135864,135867,135870,135873,135876,135879,135913,135916,135919,135973,135976,135979,135982,135985,136037,136040,136043,136092,136096,136098,136101,136104,136107,136110,136113,136171,136174,136180,136183,136186,136218,136221,136225,136229,136232,136264,136268,136271,136315,136319,136322,136325,136328,136331,136334,136337,136340,136342,136345,136347,136350,136353,136356,136359,136364,136367,136369,136372,136375,136378],[10,135176,135172],{"id":135177},"_13-界面样式与布局技巧",[14,135179,135181],{"id":135180},"_131-css三角","13.1 css三角",[171,135183,135184],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[175,135186,135187,135190,135193,135196],{},[178,135188,135189],{},"用css 边框可以模拟三角效果",[178,135191,135192],{},"宽度高度为0",[178,135194,135195],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[178,135197,135198],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[19,135200,135202],{"className":126681,"code":135201,"language":126683,"meta":24,"style":24},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[26,135203,135204,135209,135216,135226,135236,135252,135263],{"__ignoreMap":24},[29,135205,135206],{"class":31,"line":32},[29,135207,135208],{"class":367},"\u002F* CSS 实现三角形 *\u002F\n",[29,135210,135211,135214],{"class":31,"line":43},[29,135212,135213],{"class":35},".triangle",[29,135215,15747],{"class":309},[29,135217,135218,135220,135222,135224],{"class":31,"line":51},[29,135219,70697],{"class":39},[29,135221,51566],{"class":309},[29,135223,499],{"class":39},[29,135225,1468],{"class":309},[29,135227,135228,135230,135232,135234],{"class":31,"line":59},[29,135229,70917],{"class":39},[29,135231,51566],{"class":309},[29,135233,499],{"class":39},[29,135235,1468],{"class":309},[29,135237,135238,135240,135242,135244,135246,135248,135250],{"class":31,"line":67},[29,135239,71025],{"class":39},[29,135241,51566],{"class":309},[29,135243,754],{"class":39},[29,135245,51621],{"class":305},[29,135247,51650],{"class":39},[29,135249,64120],{"class":39},[29,135251,1468],{"class":309},[29,135253,135254,135257,135259,135261],{"class":31,"line":75},[29,135255,135256],{"class":39},"  border-bottom-color",[29,135258,51566],{"class":309},[29,135260,62498],{"class":39},[29,135262,1468],{"class":309},[29,135264,135265],{"class":31,"line":83},[29,135266,1741],{"class":309},[19,135268,135269],{"className":126681,"code":130838,"language":126683,"meta":24,"style":24},[26,135270,135271,135277,135293],{"__ignoreMap":24},[29,135272,135273,135275],{"class":31,"line":32},[29,135274,51740],{"class":51429},[29,135276,15747],{"class":309},[29,135278,135279,135281,135283,135285,135287,135289,135291],{"class":31,"line":43},[29,135280,71025],{"class":39},[29,135282,51566],{"class":309},[29,135284,525],{"class":39},[29,135286,51621],{"class":305},[29,135288,51650],{"class":39},[29,135290,130073],{"class":39},[29,135292,1468],{"class":309},[29,135294,135295],{"class":31,"line":51},[29,135296,1741],{"class":309},[1638,135298],{"style":126537,"src":135299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135301,135303],{"id":135302},"_132-css用户界面样式","13.2 css用户界面样式",[275,135305,135307],{"id":135306},"_1321-鼠标样式","13.2.1 鼠标样式",[19,135309,135311],{"className":126681,"code":135310,"language":126683,"meta":24,"style":24},"\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",[26,135312,135313,135318,135337,135355,135374,135391],{"__ignoreMap":24},[29,135314,135315],{"class":31,"line":32},[29,135316,135317],{"class":367},"\u002F* 鼠标样式 *\u002F\n",[29,135319,135320,135322,135324,135327,135329,135331,135334],{"class":31,"line":43},[29,135321,51740],{"class":51429},[29,135323,79936],{"class":309},[29,135325,135326],{"class":39},"cursor",[29,135328,51566],{"class":309},[29,135330,62159],{"class":39},[29,135332,135333],{"class":309},"; }   ",[29,135335,135336],{"class":367},"\u002F* 手型 *\u002F\n",[29,135338,135339,135341,135343,135345,135347,135350,135352],{"class":31,"line":51},[29,135340,51740],{"class":51429},[29,135342,79936],{"class":309},[29,135344,135326],{"class":39},[29,135346,51566],{"class":309},[29,135348,135349],{"class":39},"default",[29,135351,135333],{"class":309},[29,135353,135354],{"class":367},"\u002F* 默认 *\u002F\n",[29,135356,135357,135359,135361,135363,135365,135368,135371],{"class":31,"line":59},[29,135358,51740],{"class":51429},[29,135360,79936],{"class":309},[29,135362,135326],{"class":39},[29,135364,51566],{"class":309},[29,135366,135367],{"class":39},"move",[29,135369,135370],{"class":309},"; }      ",[29,135372,135373],{"class":367},"\u002F* 移动 *\u002F\n",[29,135375,135376,135378,135380,135382,135384,135386,135388],{"class":31,"line":67},[29,135377,51740],{"class":51429},[29,135379,79936],{"class":309},[29,135381,135326],{"class":39},[29,135383,51566],{"class":309},[29,135385,5362],{"class":39},[29,135387,135370],{"class":309},[29,135389,135390],{"class":367},"\u002F* 文本 *\u002F\n",[29,135392,135393,135395,135397,135399,135401,135404,135407],{"class":31,"line":75},[29,135394,51740],{"class":51429},[29,135396,79936],{"class":309},[29,135398,135326],{"class":39},[29,135400,51566],{"class":309},[29,135402,135403],{"class":39},"not-allowed",[29,135405,135406],{"class":309},"; } ",[29,135408,135409],{"class":367},"\u002F* 禁止 *\u002F\n",[445,135411,135412,135420],{},[448,135413,135414],{},[451,135415,135416,135418],{},[454,135417,127145],{"align":23911},[454,135419,27618],{"align":23911},[492,135421,135422,135429,135436,135443,135450],{},[451,135423,135424,135426],{},[497,135425,135349],{"align":23911},[497,135427,135428],{"align":23911},"小白 默认",[451,135430,135431,135433],{},[497,135432,62159],{"align":23911},[497,135434,135435],{"align":23911},"小手",[451,135437,135438,135440],{},[497,135439,135367],{"align":23911},[497,135441,135442],{"align":23911},"移动",[451,135444,135445,135447],{},[497,135446,5362],{"align":23911},[497,135448,135449],{"align":23911},"文本",[451,135451,135452,135454],{},[497,135453,135403],{"align":23911},[497,135455,135456],{"align":23911},"禁止",[275,135458,135460],{"id":135459},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[171,135462,135463],{},"去除表单轮廓线",[171,135465,135466],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[19,135468,135469],{"className":126681,"code":130045,"language":126683,"meta":24,"style":24},[26,135470,135471,135475,135481,135497],{"__ignoreMap":24},[29,135472,135473],{"class":31,"line":32},[29,135474,130052],{"class":367},[29,135476,135477,135479],{"class":31,"line":43},[29,135478,51740],{"class":51429},[29,135480,15747],{"class":309},[29,135482,135483,135485,135487,135489,135491,135493,135495],{"class":31,"line":51},[29,135484,71025],{"class":39},[29,135486,51566],{"class":309},[29,135488,525],{"class":39},[29,135490,51621],{"class":305},[29,135492,51650],{"class":39},[29,135494,130073],{"class":39},[29,135496,1468],{"class":309},[29,135498,135499],{"class":31,"line":59},[29,135500,1741],{"class":309},[171,135502,135503],{},"文本域：",[1638,135505],{"style":126537,"src":135506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[171,135508,135509],{},"此时会有一个空白区域",[1638,135511],{"style":126537,"src":135512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[171,135514,135515],{},"写在同一行就不会出现这个问题",[1638,135517],{"style":126537,"src":135518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[171,135520,135521],{},"文本域是行内块元素，一定记住！！！",[171,135523,98362],{},[1638,135525],{"style":126537,"src":135526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[171,135528,135529],{},"文本域尽量放在一行",[171,135531,135532],{},"知识回顾：cols是列，rols是行",[1638,135534],{"style":126537,"src":135535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[171,135537,135538],{},"它可以进行拖动，显然这是我们不愿意看到的",[1638,135540],{"style":126537,"src":135541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[171,135543,135544],{},"使用resize进行解决",[19,135546,135548],{"className":126681,"code":135547,"language":126683,"meta":24,"style":24},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[26,135549,135550,135556,135569],{"__ignoreMap":24},[29,135551,135552,135554],{"class":31,"line":32},[29,135553,53950],{"class":51429},[29,135555,15747],{"class":309},[29,135557,135558,135560,135562,135564,135566],{"class":31,"line":43},[29,135559,70927],{"class":39},[29,135561,51566],{"class":309},[29,135563,54866],{"class":39},[29,135565,130544],{"class":309},[29,135567,135568],{"class":367},"\u002F* 取消表单轮廓线 *\u002F\n",[29,135570,135571],{"class":31,"line":51},[29,135572,1741],{"class":309},[171,135574,135575],{},"此时就无法通过右下方实现拖动了",[275,135577,135579],{"id":135578},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[171,135581,135582],{},"实现一个盒子中的文字和图片对齐",[171,135584,135585,135586,135589],{},"用于设置一个元素的 ",[457,135587,135588],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[171,135591,135592],{},"图片和文字默认是基线对齐",[1638,135594],{"style":126537,"src":135595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[19,135597,135598],{"className":126681,"code":135547,"language":126683,"meta":24,"style":24},[26,135599,135600,135606,135618],{"__ignoreMap":24},[29,135601,135602,135604],{"class":31,"line":32},[29,135603,53950],{"class":51429},[29,135605,15747],{"class":309},[29,135607,135608,135610,135612,135614,135616],{"class":31,"line":43},[29,135609,70927],{"class":39},[29,135611,51566],{"class":309},[29,135613,54866],{"class":39},[29,135615,130544],{"class":309},[29,135617,135568],{"class":367},[29,135619,135620],{"class":31,"line":51},[29,135621,1741],{"class":309},[1638,135623],{"style":126537,"src":135624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22173,135626,135628],{"id":135627},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[171,135630,135631],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1638,135633],{"style":126537,"src":135634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[171,135636,135637,135638,135641],{},"此时可以给图片、表单这些行内块元素的 ",[457,135639,135640],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22173,135643,135645],{"id":135644},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[171,135647,135648],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[171,135650,14808],{},[19,135652,135654],{"className":126681,"code":135653,"language":126683,"meta":24,"style":24},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[26,135655,135656,135661,135667,135679],{"__ignoreMap":24},[29,135657,135658],{"class":31,"line":32},[29,135659,135660],{"class":367},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[29,135662,135663,135665],{"class":31,"line":43},[29,135664,1638],{"class":51429},[29,135666,15747],{"class":309},[29,135668,135669,135672,135674,135677],{"class":31,"line":51},[29,135670,135671],{"class":39},"  vertical-align",[29,135673,51566],{"class":309},[29,135675,135676],{"class":39},"middle",[29,135678,1468],{"class":309},[29,135680,135681],{"class":31,"line":59},[29,135682,1741],{"class":309},[1638,135684],{"style":126537,"src":135685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[171,135687,135688],{},"主要解决方法有两种：",[259,135690,135691],{},[178,135692,135693,135696,135697,135700],{},[457,135694,135695],{},"给图片"," 添加 ",[457,135698,135699],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[171,135702,135703,135704],{},"2.把图片转换为块级元素 ",[457,135705,135706],{},"display: block",[171,135708,135709],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[171,135711,135712],{},"img {",[171,135714,135715],{},"vertical-align:middle;",[171,135717,1254],{},[275,135719,135721],{"id":135720},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[171,135723,135724],{},"效果：",[1638,135726],{"style":126537,"src":135727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[171,135729,135730],{},"单行文本溢出显示省略号--必须满足三个条件：",[19,135732,135734],{"className":126681,"code":135733,"language":126683,"meta":24,"style":24},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[26,135735,135736,135741,135747,135757,135762,135772],{"__ignoreMap":24},[29,135737,135738],{"class":31,"line":32},[29,135739,135740],{"class":367},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[29,135742,135743,135745],{"class":31,"line":43},[29,135744,1638],{"class":51429},[29,135746,15747],{"class":309},[29,135748,135749,135751,135753,135755],{"class":31,"line":51},[29,135750,135671],{"class":39},[29,135752,51566],{"class":309},[29,135754,135676],{"class":39},[29,135756,1468],{"class":309},[29,135758,135759],{"class":31,"line":59},[29,135760,135761],{"class":367},"  \u002F* 或 *\u002F\n",[29,135763,135764,135766,135768,135770],{"class":31,"line":67},[29,135765,128297],{"class":39},[29,135767,51566],{"class":309},[29,135769,60998],{"class":39},[29,135771,1468],{"class":309},[29,135773,135774],{"class":31,"line":75},[29,135775,1741],{"class":309},[275,135777,135779],{"id":135778},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[171,135781,135724],{},[1638,135783],{"style":126537,"src":135784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[171,135786,135787,135788,135791],{},"多行文本溢出显示省略号， ",[457,135789,135790],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[19,135793,135794],{"className":126681,"code":135733,"language":126683,"meta":24,"style":24},[26,135795,135796,135800,135806,135816,135820,135830],{"__ignoreMap":24},[29,135797,135798],{"class":31,"line":32},[29,135799,135740],{"class":367},[29,135801,135802,135804],{"class":31,"line":43},[29,135803,1638],{"class":51429},[29,135805,15747],{"class":309},[29,135807,135808,135810,135812,135814],{"class":31,"line":51},[29,135809,135671],{"class":39},[29,135811,51566],{"class":309},[29,135813,135676],{"class":39},[29,135815,1468],{"class":309},[29,135817,135818],{"class":31,"line":59},[29,135819,135761],{"class":367},[29,135821,135822,135824,135826,135828],{"class":31,"line":67},[29,135823,128297],{"class":39},[29,135825,51566],{"class":309},[29,135827,60998],{"class":39},[29,135829,1468],{"class":309},[29,135831,135832],{"class":31,"line":75},[29,135833,1741],{"class":309},[171,135835,135836],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135838,135840],{"id":135839},"_133-常见布局技巧","13.3 常见布局技巧",[171,135842,135843],{},[457,135844,135845],{},"巧妙利用一个技术更快更好的布局：",[259,135847,135848,135851,135854,135857],{},[178,135849,135850],{},"margin负值的运用",[178,135852,135853],{},"文字围绕浮动元素",[178,135855,135856],{},"行内块的巧妙运用",[178,135858,135859],{},"CSS三角强化",[275,135861,135863],{"id":135862},"_1331-margin负值的运用","13.3.1 margin负值的运用",[171,135865,135866],{},"应用场景：",[1638,135868],{"style":126537,"src":135869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1638,135871],{"style":126537,"src":135872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[171,135874,135875],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[171,135877,135878],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[19,135880,135881],{"className":126681,"code":130045,"language":126683,"meta":24,"style":24},[26,135882,135883,135887,135893,135909],{"__ignoreMap":24},[29,135884,135885],{"class":31,"line":32},[29,135886,130052],{"class":367},[29,135888,135889,135891],{"class":31,"line":43},[29,135890,51740],{"class":51429},[29,135892,15747],{"class":309},[29,135894,135895,135897,135899,135901,135903,135905,135907],{"class":31,"line":51},[29,135896,71025],{"class":39},[29,135898,51566],{"class":309},[29,135900,525],{"class":39},[29,135902,51621],{"class":305},[29,135904,51650],{"class":39},[29,135906,130073],{"class":39},[29,135908,1468],{"class":309},[29,135910,135911],{"class":31,"line":59},[29,135912,1741],{"class":309},[1638,135914],{"style":126537,"src":135915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[171,135917,135918],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[19,135920,135922],{"className":126681,"code":135921,"language":126683,"meta":24,"style":24},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[26,135923,135924,135929,135935,135945,135957,135969],{"__ignoreMap":24},[29,135925,135926],{"class":31,"line":32},[29,135927,135928],{"class":367},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[29,135930,135931,135933],{"class":31,"line":43},[29,135932,130529],{"class":35},[29,135934,15747],{"class":309},[29,135936,135937,135939,135941,135943],{"class":31,"line":51},[29,135938,132487],{"class":39},[29,135940,51566],{"class":309},[29,135942,54893],{"class":39},[29,135944,1468],{"class":309},[29,135946,135947,135949,135951,135953,135955],{"class":31,"line":59},[29,135948,132501],{"class":39},[29,135950,51566],{"class":309},[29,135952,754],{"class":39},[29,135954,51621],{"class":305},[29,135956,1468],{"class":309},[29,135958,135959,135961,135963,135965,135967],{"class":31,"line":67},[29,135960,132518],{"class":39},[29,135962,51566],{"class":309},[29,135964,1008],{"class":39},[29,135966,51621],{"class":305},[29,135968,1468],{"class":309},[29,135970,135971],{"class":31,"line":75},[29,135972,1741],{"class":309},[171,135974,135975],{},"加上上述代码会发现：",[1638,135977],{"style":126537,"src":135978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[171,135980,135981],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[171,135983,135984],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[19,135986,135987],{"className":126681,"code":135921,"language":126683,"meta":24,"style":24},[26,135988,135989,135993,135999,136009,136021,136033],{"__ignoreMap":24},[29,135990,135991],{"class":31,"line":32},[29,135992,135928],{"class":367},[29,135994,135995,135997],{"class":31,"line":43},[29,135996,130529],{"class":35},[29,135998,15747],{"class":309},[29,136000,136001,136003,136005,136007],{"class":31,"line":51},[29,136002,132487],{"class":39},[29,136004,51566],{"class":309},[29,136006,54893],{"class":39},[29,136008,1468],{"class":309},[29,136010,136011,136013,136015,136017,136019],{"class":31,"line":59},[29,136012,132501],{"class":39},[29,136014,51566],{"class":309},[29,136016,754],{"class":39},[29,136018,51621],{"class":305},[29,136020,1468],{"class":309},[29,136022,136023,136025,136027,136029,136031],{"class":31,"line":67},[29,136024,132518],{"class":39},[29,136026,51566],{"class":309},[29,136028,1008],{"class":39},[29,136030,51621],{"class":305},[29,136032,1468],{"class":309},[29,136034,136035],{"class":31,"line":75},[29,136036,1741],{"class":309},[171,136038,136039],{},"解决方式2：",[171,136041,136042],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[19,136044,136046],{"className":126681,"code":136045,"language":126683,"meta":24,"style":24},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[26,136047,136048,136054,136064,136076,136088],{"__ignoreMap":24},[29,136049,136050,136052],{"class":31,"line":32},[29,136051,51740],{"class":51429},[29,136053,15747],{"class":309},[29,136055,136056,136058,136060,136062],{"class":31,"line":43},[29,136057,132487],{"class":39},[29,136059,51566],{"class":309},[29,136061,54893],{"class":39},[29,136063,1468],{"class":309},[29,136065,136066,136068,136070,136072,136074],{"class":31,"line":51},[29,136067,132501],{"class":39},[29,136069,51566],{"class":309},[29,136071,754],{"class":39},[29,136073,51621],{"class":305},[29,136075,1468],{"class":309},[29,136077,136078,136080,136082,136084,136086],{"class":31,"line":59},[29,136079,132518],{"class":39},[29,136081,51566],{"class":309},[29,136083,1008],{"class":39},[29,136085,51621],{"class":305},[29,136087,1468],{"class":309},[29,136089,136090],{"class":31,"line":67},[29,136091,1741],{"class":309},[275,136093,136095],{"id":136094},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[171,136097,135866],{},[1638,136099],{"style":126537,"src":136100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[171,136102,136103],{},"实现结构图：",[1638,136105],{"style":126537,"src":136106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[171,136108,136109],{},"巧妙运用浮动元素不会压住文字的特性",[171,136111,136112],{},"代码显示：",[19,136114,136116],{"className":126681,"code":136115,"language":126683,"meta":24,"style":24},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[26,136117,136118,136124,136134,136138,136143,136147,136153,136167],{"__ignoreMap":24},[29,136119,136120,136122],{"class":31,"line":32},[29,136121,130529],{"class":35},[29,136123,15747],{"class":309},[29,136125,136126,136128,136130,136132],{"class":31,"line":43},[29,136127,131161],{"class":39},[29,136129,51566],{"class":309},[29,136131,23911],{"class":39},[29,136133,1468],{"class":309},[29,136135,136136],{"class":31,"line":51},[29,136137,1741],{"class":309},[29,136139,136140],{"class":31,"line":59},[29,136141,136142],{"class":309},"```Css\n",[29,136144,136145],{"class":31,"line":67},[29,136146,130524],{"class":367},[29,136148,136149,136151],{"class":31,"line":75},[29,136150,130529],{"class":35},[29,136152,15747],{"class":309},[29,136154,136155,136157,136159,136161,136163,136165],{"class":31,"line":83},[29,136156,70599],{"class":39},[29,136158,51566],{"class":309},[29,136160,499],{"class":39},[29,136162,51685],{"class":39},[29,136164,130544],{"class":309},[29,136166,130547],{"class":367},[29,136168,136169],{"class":31,"line":158},[29,136170,1741],{"class":309},[171,136172,136173],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[19,136175,136178],{"className":136176,"code":136177,"language":5362},[5360],"\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",[26,136179,136177],{"__ignoreMap":24},[1638,136181],{"style":126537,"src":136182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[171,136184,136185],{},"最终展示结果：",[19,136187,136188],{"className":126681,"code":130517,"language":126683,"meta":24,"style":24},[26,136189,136190,136194,136200,136214],{"__ignoreMap":24},[29,136191,136192],{"class":31,"line":32},[29,136193,130524],{"class":367},[29,136195,136196,136198],{"class":31,"line":43},[29,136197,130529],{"class":35},[29,136199,15747],{"class":309},[29,136201,136202,136204,136206,136208,136210,136212],{"class":31,"line":51},[29,136203,70599],{"class":39},[29,136205,51566],{"class":309},[29,136207,499],{"class":39},[29,136209,51685],{"class":39},[29,136211,130544],{"class":309},[29,136213,130547],{"class":367},[29,136215,136216],{"class":31,"line":59},[29,136217,1741],{"class":309},[1638,136219],{"style":126537,"src":136220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136222,136224],{"id":136223},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[275,136226,136228],{"id":136227},"_1341-原理","13.4.1 原理",[1638,136230],{"style":126537,"src":136231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[19,136233,136234],{"className":126681,"code":130517,"language":126683,"meta":24,"style":24},[26,136235,136236,136240,136246,136260],{"__ignoreMap":24},[29,136237,136238],{"class":31,"line":32},[29,136239,130524],{"class":367},[29,136241,136242,136244],{"class":31,"line":43},[29,136243,130529],{"class":35},[29,136245,15747],{"class":309},[29,136247,136248,136250,136252,136254,136256,136258],{"class":31,"line":51},[29,136249,70599],{"class":39},[29,136251,51566],{"class":309},[29,136253,499],{"class":39},[29,136255,51685],{"class":39},[29,136257,130544],{"class":309},[29,136259,130547],{"class":367},[29,136261,136262],{"class":31,"line":59},[29,136263,1741],{"class":309},[275,136265,136267],{"id":136266},"_1342-实例","13.4.2 实例",[1638,136269],{"style":126537,"src":136270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[19,136272,136273],{"className":126681,"code":131147,"language":126683,"meta":24,"style":24},[26,136274,136275,136281,136291,136295,136301,136311],{"__ignoreMap":24},[29,136276,136277,136279],{"class":31,"line":32},[29,136278,131154],{"class":35},[29,136280,15747],{"class":309},[29,136282,136283,136285,136287,136289],{"class":31,"line":43},[29,136284,131161],{"class":39},[29,136286,51566],{"class":309},[29,136288,23911],{"class":39},[29,136290,1468],{"class":309},[29,136292,136293],{"class":31,"line":51},[29,136294,1741],{"class":309},[29,136296,136297,136299],{"class":31,"line":59},[29,136298,131176],{"class":35},[29,136300,15747],{"class":309},[29,136302,136303,136305,136307,136309],{"class":31,"line":67},[29,136304,131161],{"class":39},[29,136306,51566],{"class":309},[29,136308,72651],{"class":39},[29,136310,1468],{"class":309},[29,136312,136313],{"class":31,"line":75},[29,136314,1741],{"class":309},[14,136316,136318],{"id":136317},"_135-css的初始化","13.5 css的初始化",[171,136320,136321],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[171,136323,136324],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[171,136326,136327],{},"每个网页都必须首先进行 CSS初始化。",[171,136329,136330],{},"这里我们以 京东CSS初始化代码为例。",[171,136332,136333],{},"在网页右键查看网页源代码",[171,136335,136336],{},"找到css的link引入语句",[171,136338,136339],{},"然后ctrl+f 输入body",[171,136341,77355],{},[1638,136343],{"style":126537,"src":136344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[171,136346,77378],{},[1638,136348],{"style":126537,"src":136349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[171,136351,136352],{},"③打开了网页上传压缩的代码",[1638,136354],{"style":126537,"src":136355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[171,136357,136358],{},"④从body前可以查看这个网页的初始化代码",[171,136360,136361],{},[457,136362,136363],{},"Unicode编码字体：",[171,136365,136366],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[171,136368,83336],{},[171,136370,136371],{},"黑体 \\9ED1\\4F53",[171,136373,136374],{},"宋体 \\5B8B\\4F53",[171,136376,136377],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[223,136379,136380],{},"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":24,"searchDepth":43,"depth":43,"links":136382},[136383,136384,136391,136395,136399],{"id":135180,"depth":43,"text":135181},{"id":135302,"depth":43,"text":135303,"children":136385},[136386,136387,136388,136389,136390],{"id":135306,"depth":51,"text":135307},{"id":135459,"depth":51,"text":135460},{"id":135578,"depth":51,"text":135579},{"id":135720,"depth":51,"text":135721},{"id":135778,"depth":51,"text":135779},{"id":135839,"depth":43,"text":135840,"children":136392},[136393,136394],{"id":135862,"depth":51,"text":135863},{"id":136094,"depth":51,"text":136095},{"id":136223,"depth":43,"text":136224,"children":136396},[136397,136398],{"id":136227,"depth":51,"text":136228},{"id":136266,"depth":51,"text":136267},{"id":136317,"depth":43,"text":136318},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135172,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136406,"title":136407,"body":136408,"description":230,"extension":231,"meta":138094,"navigation":233,"path":138095,"seo":138096,"stem":138097,"__hash__":138098},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136409,"toc":138083},[136410,136413,136417,136421,136424,136431,136434,136437,136475,136478,136480,136494,136498,136507,136511,136516,136519,136522,136525,136560,136565,136568,136598,136601,136606,136609,136612,136642,136645,136699,136702,136706,136711,136723,136726,136730,136760,136763,136768,136771,136801,136804,136808,136825,136829,136833,136836,136869,136872,136876,136879,136882,136885,136888,136891,137002,137005,137008,137011,137113,137116,137120,137124,137128,137131,137171,137174,137176,137192,137196,137199,137204,137285,137288,137291,137417,137422,137425,137433,137436,137441,137526,137529,137533,137536,137539,137543,137563,137568,137652,137655,137660,137663,137666,137744,137747,137750,137753,137756,137759,137764,137767,137770,137842,137845,137850,137853,137950,137953,137959,137962,137965,137968,137971,137974,137977,137980,137983,137987,137992,137995,138028,138033,138036,138077,138080],[10,136411,136407],{"id":136412},"_14-html5与css3新特性",[14,136414,136416],{"id":136415},"_141-html5的新特性","14.1 HTML5的新特性",[275,136418,136420],{"id":136419},"_1411-基本标签","14.1.1 基本标签",[171,136422,136423],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[171,136425,136426,136427,136430],{},"这些新特性都有兼容性问题，基本是 ",[457,136428,136429],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[171,136432,136433],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[171,136435,136436],{},"现在使用的是新特性：",[175,136438,136439,136445,136451,136457,136463,136469],{},[178,136440,136441,136444],{},[26,136442,136443],{},"\u003Cheader>"," 头部标签",[178,136446,136447,136450],{},[26,136448,136449],{},"\u003Cnav>"," 导航标签",[178,136452,136453,136456],{},[26,136454,136455],{},"\u003Carticle>"," 内容标签",[178,136458,136459,136462],{},[26,136460,136461],{},"\u003Csection>"," 定义文档某个区域",[178,136464,136465,136468],{},[26,136466,136467],{},"\u003Caside>"," 侧边栏标签",[178,136470,136471,136474],{},[26,136472,136473],{},"\u003Cfooter>"," 尾部标签",[1638,136476],{"style":126537,"src":136477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[171,136479,339],{},[175,136481,136482,136485,136488,136491],{},[178,136483,136484],{},"这种语义化标准主要是针对搜索引擎的",[178,136486,136487],{},"这些标签页面中可以经常使用",[178,136489,136490],{},"在IE9中，需要把这些元素转换为块级元素",[178,136492,136493],{},"移动端更喜欢使用这些标签",[275,136495,136497],{"id":136496},"_1412-多媒体标签","14.1.2 多媒体标签",[171,136499,136500,136501,136503,136504,136506],{},"音频 ",[457,136502,28303],{}," 和视频 ",[457,136505,28312],{}," 两个标签",[22173,136508,136510],{"id":136509},"_14121-视频标签-video","14.1.2.1 视频标签- video",[259,136512,136513],{},[178,136514,136515],{},"支持格式：",[1638,136517],{"style":126537,"src":136518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[171,136520,136521],{},"尽量使用MP4，兼容性好",[171,136523,136524],{},"用MP4就可以",[19,136526,136528],{"className":127428,"code":136527,"language":127430,"meta":24,"style":24},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[26,136529,136530],{"__ignoreMap":24},[29,136531,136532,136534,136536,136538,136540,136543,136545,136548,136551,136554,136556,136558],{"class":31,"line":32},[29,136533,1218],{"class":309},[29,136535,28312],{"class":51429},[29,136537,55368],{"class":35},[29,136539,355],{"class":309},[29,136541,136542],{"class":103},"\"movie.mp4\"",[29,136544,92552],{"class":35},[29,136546,136547],{"class":35}," autoplay",[29,136549,136550],{"class":35}," muted",[29,136552,136553],{"class":35}," loop",[29,136555,55443],{"class":309},[29,136557,28312],{"class":51429},[29,136559,51436],{"class":309},[259,136561,136562],{"start":43},[178,136563,136564],{},"兼容写法",[171,136566,136567],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[19,136569,136570],{"className":127428,"code":136527,"language":127430,"meta":24,"style":24},[26,136571,136572],{"__ignoreMap":24},[29,136573,136574,136576,136578,136580,136582,136584,136586,136588,136590,136592,136594,136596],{"class":31,"line":32},[29,136575,1218],{"class":309},[29,136577,28312],{"class":51429},[29,136579,55368],{"class":35},[29,136581,355],{"class":309},[29,136583,136542],{"class":103},[29,136585,92552],{"class":35},[29,136587,136547],{"class":35},[29,136589,136550],{"class":35},[29,136591,136553],{"class":35},[29,136593,55443],{"class":309},[29,136595,28312],{"class":51429},[29,136597,51436],{"class":309},[171,136599,136600],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[259,136602,136603],{"start":51},[178,136604,136605],{},"video常用属性",[1638,136607],{"style":126537,"src":136608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[171,136610,136611],{},"poster属性后面是跟的等待加载图片的地址",[19,136613,136614],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,136615,136616],{"__ignoreMap":24},[29,136617,136618,136620,136622,136624,136626,136628,136630,136632,136634,136636,136638,136640],{"class":31,"line":32},[29,136619,1218],{"class":309},[29,136621,1638],{"class":51429},[29,136623,55368],{"class":35},[29,136625,355],{"class":309},[29,136627,134198],{"class":103},[29,136629,55376],{"class":35},[29,136631,355],{"class":309},[29,136633,134205],{"class":103},[29,136635,134208],{"class":35},[29,136637,355],{"class":309},[29,136639,134213],{"class":103},[29,136641,51436],{"class":309},[171,136643,136644],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[19,136646,136648],{"className":126681,"code":136647,"language":126683,"meta":24,"style":24},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[26,136649,136650,136655,136661,136685,136690,136695],{"__ignoreMap":24},[29,136651,136652],{"class":31,"line":32},[29,136653,136654],{"class":367},"\u002F* 2D 位移 *\u002F\n",[29,136656,136657,136659],{"class":31,"line":43},[29,136658,51740],{"class":51429},[29,136660,15747],{"class":309},[29,136662,136663,136666,136668,136671,136673,136675,136677,136679,136681,136683],{"class":31,"line":51},[29,136664,136665],{"class":39},"  transform",[29,136667,51566],{"class":309},[29,136669,136670],{"class":39},"translate",[29,136672,310],{"class":309},[29,136674,619],{"class":39},[29,136676,51621],{"class":305},[29,136678,12610],{"class":309},[29,136680,964],{"class":39},[29,136682,51621],{"class":305},[29,136684,2894],{"class":309},[29,136686,136687],{"class":31,"line":59},[29,136688,136689],{"class":367},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[29,136691,136692],{"class":31,"line":67},[29,136693,136694],{"class":367},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[29,136696,136697],{"class":31,"line":75},[29,136698,1741],{"class":309},[171,136700,136701],{},"muted:自动静音属性",[22173,136703,136705],{"id":136704},"_14122-音频标签audio","14.1.2.2 音频标签audio",[259,136707,136708],{},[178,136709,136710],{},"基本使用",[171,136712,136713,136714,136719,136720],{},"当前 ",[457,136715,136716],{},[26,136717,136718],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[457,136721,136722],{},"mp3格式",[1638,136724],{"style":126537,"src":136725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[259,136727,136728],{"start":43},[178,136729,136564],{},[19,136731,136732],{"className":127428,"code":136527,"language":127430,"meta":24,"style":24},[26,136733,136734],{"__ignoreMap":24},[29,136735,136736,136738,136740,136742,136744,136746,136748,136750,136752,136754,136756,136758],{"class":31,"line":32},[29,136737,1218],{"class":309},[29,136739,28312],{"class":51429},[29,136741,55368],{"class":35},[29,136743,355],{"class":309},[29,136745,136542],{"class":103},[29,136747,92552],{"class":35},[29,136749,136547],{"class":35},[29,136751,136550],{"class":35},[29,136753,136553],{"class":35},[29,136755,55443],{"class":309},[29,136757,28312],{"class":51429},[29,136759,51436],{"class":309},[171,136761,136762],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[259,136764,136765],{"start":51},[178,136766,136767],{},"常用属性",[1638,136769],{"style":126537,"src":136770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[19,136772,136773],{"className":127428,"code":136527,"language":127430,"meta":24,"style":24},[26,136774,136775],{"__ignoreMap":24},[29,136776,136777,136779,136781,136783,136785,136787,136789,136791,136793,136795,136797,136799],{"class":31,"line":32},[29,136778,1218],{"class":309},[29,136780,28312],{"class":51429},[29,136782,55368],{"class":35},[29,136784,355],{"class":309},[29,136786,136542],{"class":103},[29,136788,92552],{"class":35},[29,136790,136547],{"class":35},[29,136792,136550],{"class":35},[29,136794,136553],{"class":35},[29,136796,55443],{"class":309},[29,136798,28312],{"class":51429},[29,136800,51436],{"class":309},[171,136802,136803],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22173,136805,136807],{"id":136806},"_14123-总结","14.1.2.3 总结",[175,136809,136810,136813,136816,136819,136822],{},[178,136811,136812],{},"音频标签和视频标签使用方式基本一致",[178,136814,136815],{},"浏览器支持情况不同",[178,136817,136818],{},"谷歌浏览器把音频和视频自动播放禁止了",[178,136820,136821],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[178,136823,136824],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[275,136826,136828],{"id":136827},"_1413-表单元素","14.1.3 表单元素",[22173,136830,136832],{"id":136831},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1638,136834],{"style":126537,"src":136835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[19,136837,136839],{"className":127428,"code":136838,"language":127430,"meta":24,"style":24},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[26,136840,136841],{"__ignoreMap":24},[29,136842,136843,136845,136847,136849,136851,136853,136855,136857,136860,136862,136864,136867],{"class":31,"line":32},[29,136844,1218],{"class":309},[29,136846,53950],{"class":51429},[29,136848,53953],{"class":35},[29,136850,355],{"class":309},[29,136852,62828],{"class":103},[29,136854,15095],{"class":35},[29,136856,355],{"class":309},[29,136858,136859],{"class":103},"\"username\"",[29,136861,61149],{"class":35},[29,136863,355],{"class":309},[29,136865,136866],{"class":103},"\"请输入用户名\"",[29,136868,51436],{"class":309},[1638,136870],{"style":126537,"src":136871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22173,136873,136875],{"id":136874},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1638,136877],{"style":126537,"src":136878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[171,136880,136881],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[171,136883,136884],{},"快捷操作：",[1638,136886],{"style":126537,"src":136887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[171,136889,136890],{},"例子1：",[19,136892,136894],{"className":127428,"code":136893,"language":127430,"meta":24,"style":24},"\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",[26,136895,136896,136919,136946,136975,136994],{"__ignoreMap":24},[29,136897,136898,136900,136902,136904,136906,136909,136912,136914,136917],{"class":31,"line":32},[29,136899,1218],{"class":309},[29,136901,66754],{"class":51429},[29,136903,66757],{"class":35},[29,136905,355],{"class":309},[29,136907,136908],{"class":103},"\"\u002Fsubmit\"",[29,136910,136911],{"class":35}," method",[29,136913,355],{"class":309},[29,136915,136916],{"class":103},"\"post\"",[29,136918,51436],{"class":309},[29,136920,136921,136923,136925,136927,136929,136931,136933,136935,136937,136939,136941,136944],{"class":31,"line":43},[29,136922,52273],{"class":309},[29,136924,53950],{"class":51429},[29,136926,53953],{"class":35},[29,136928,355],{"class":309},[29,136930,62828],{"class":103},[29,136932,15095],{"class":35},[29,136934,355],{"class":309},[29,136936,136859],{"class":103},[29,136938,61149],{"class":35},[29,136940,355],{"class":309},[29,136942,136943],{"class":103},"\"用户名\"",[29,136945,51436],{"class":309},[29,136947,136948,136950,136952,136954,136956,136959,136961,136963,136966,136968,136970,136973],{"class":31,"line":51},[29,136949,52273],{"class":309},[29,136951,53950],{"class":51429},[29,136953,53953],{"class":35},[29,136955,355],{"class":309},[29,136957,136958],{"class":103},"\"password\"",[29,136960,15095],{"class":35},[29,136962,355],{"class":309},[29,136964,136965],{"class":103},"\"pwd\"",[29,136967,61149],{"class":35},[29,136969,355],{"class":309},[29,136971,136972],{"class":103},"\"密码\"",[29,136974,51436],{"class":309},[29,136976,136977,136979,136981,136983,136985,136987,136990,136992],{"class":31,"line":59},[29,136978,52273],{"class":309},[29,136980,54016],{"class":51429},[29,136982,53953],{"class":35},[29,136984,355],{"class":309},[29,136986,66777],{"class":103},[29,136988,136989],{"class":309},">提交\u003C\u002F",[29,136991,54016],{"class":51429},[29,136993,51436],{"class":309},[29,136995,136996,136998,137000],{"class":31,"line":67},[29,136997,51914],{"class":309},[29,136999,66754],{"class":51429},[29,137001,51436],{"class":309},[1638,137003],{"style":126537,"src":137004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[171,137006,137007],{},"value是表单域的内容",[171,137009,137010],{},"例子2：",[19,137012,137013],{"className":127428,"code":136893,"language":127430,"meta":24,"style":24},[26,137014,137015,137035,137061,137087,137105],{"__ignoreMap":24},[29,137016,137017,137019,137021,137023,137025,137027,137029,137031,137033],{"class":31,"line":32},[29,137018,1218],{"class":309},[29,137020,66754],{"class":51429},[29,137022,66757],{"class":35},[29,137024,355],{"class":309},[29,137026,136908],{"class":103},[29,137028,136911],{"class":35},[29,137030,355],{"class":309},[29,137032,136916],{"class":103},[29,137034,51436],{"class":309},[29,137036,137037,137039,137041,137043,137045,137047,137049,137051,137053,137055,137057,137059],{"class":31,"line":43},[29,137038,52273],{"class":309},[29,137040,53950],{"class":51429},[29,137042,53953],{"class":35},[29,137044,355],{"class":309},[29,137046,62828],{"class":103},[29,137048,15095],{"class":35},[29,137050,355],{"class":309},[29,137052,136859],{"class":103},[29,137054,61149],{"class":35},[29,137056,355],{"class":309},[29,137058,136943],{"class":103},[29,137060,51436],{"class":309},[29,137062,137063,137065,137067,137069,137071,137073,137075,137077,137079,137081,137083,137085],{"class":31,"line":51},[29,137064,52273],{"class":309},[29,137066,53950],{"class":51429},[29,137068,53953],{"class":35},[29,137070,355],{"class":309},[29,137072,136958],{"class":103},[29,137074,15095],{"class":35},[29,137076,355],{"class":309},[29,137078,136965],{"class":103},[29,137080,61149],{"class":35},[29,137082,355],{"class":309},[29,137084,136972],{"class":103},[29,137086,51436],{"class":309},[29,137088,137089,137091,137093,137095,137097,137099,137101,137103],{"class":31,"line":59},[29,137090,52273],{"class":309},[29,137092,54016],{"class":51429},[29,137094,53953],{"class":35},[29,137096,355],{"class":309},[29,137098,66777],{"class":103},[29,137100,136989],{"class":309},[29,137102,54016],{"class":51429},[29,137104,51436],{"class":309},[29,137106,137107,137109,137111],{"class":31,"line":67},[29,137108,51914],{"class":309},[29,137110,66754],{"class":51429},[29,137112,51436],{"class":309},[1638,137114],{"style":126537,"src":137115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137117,137119],{"id":137118},"_142-css新特性","14.2 CSS新特性",[275,137121,137123],{"id":137122},"_1421-新增选择器","14.2.1 新增选择器",[22173,137125,137127],{"id":137126},"_14211-属性选择器","14.2.1.1 属性选择器",[1638,137129],{"style":126537,"src":137130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[19,137132,137134],{"className":126681,"code":137133,"language":126683,"meta":24,"style":24},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[26,137135,137136,137151,137167],{"__ignoreMap":24},[29,137137,137138,137140,137142,137144,137146,137148],{"class":31,"line":32},[29,137139,53950],{"class":51429},[29,137141,1198],{"class":309},[29,137143,103236],{"class":35},[29,137145,355],{"class":305},[29,137147,62828],{"class":103},[29,137149,137150],{"class":309},"] {\n",[29,137152,137153,137155,137157,137159,137161,137163,137165],{"class":31,"line":43},[29,137154,71025],{"class":39},[29,137156,51566],{"class":309},[29,137158,525],{"class":39},[29,137160,51621],{"class":305},[29,137162,51650],{"class":39},[29,137164,130261],{"class":39},[29,137166,1468],{"class":309},[29,137168,137169],{"class":31,"line":51},[29,137170,1741],{"class":309},[1638,137172],{"style":126537,"src":137173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[171,137175,339],{},[175,137177,137178,137181,137184,137187],{},[178,137179,137180],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[178,137182,137183],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[178,137185,137186],{},"属性选择器也可以选择出来自定义的属性",[178,137188,137189,137191],{},[457,137190,9200],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22173,137193,137195],{"id":137194},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1638,137197],{"style":126537,"src":137198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[259,137200,137201],{},[178,137202,137203],{},"fist-child",[19,137205,137207],{"className":126681,"code":137206,"language":126683,"meta":24,"style":24},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[26,137208,137209,137214,137229,137249,137267],{"__ignoreMap":24},[29,137210,137211],{"class":31,"line":32},[29,137212,137213],{"class":367},"\u002F* 属性选择器 *\u002F\n",[29,137215,137216,137218,137220,137222,137224,137226],{"class":31,"line":43},[29,137217,53950],{"class":51429},[29,137219,1198],{"class":309},[29,137221,103236],{"class":35},[29,137223,355],{"class":305},[29,137225,62828],{"class":103},[29,137227,137228],{"class":309},"] { }\n",[29,137230,137231,137233,137235,137237,137240,137243,137246],{"class":31,"line":51},[29,137232,53950],{"class":51429},[29,137234,1198],{"class":309},[29,137236,14869],{"class":35},[29,137238,137239],{"class":305},"^=",[29,137241,137242],{"class":103},"\"icon\"",[29,137244,137245],{"class":309},"] { }  ",[29,137247,137248],{"class":367},"\u002F* 以 icon 开头 *\u002F\n",[29,137250,137251,137253,137255,137257,137260,137262,137264],{"class":31,"line":59},[29,137252,53950],{"class":51429},[29,137254,1198],{"class":309},[29,137256,14869],{"class":35},[29,137258,137259],{"class":305},"$=",[29,137261,137242],{"class":103},[29,137263,137245],{"class":309},[29,137265,137266],{"class":367},"\u002F* 以 icon 结尾 *\u002F\n",[29,137268,137269,137271,137273,137275,137278,137280,137282],{"class":31,"line":67},[29,137270,53950],{"class":51429},[29,137272,1198],{"class":309},[29,137274,14869],{"class":35},[29,137276,137277],{"class":305},"*=",[29,137279,137242],{"class":103},[29,137281,137245],{"class":309},[29,137283,137284],{"class":367},"\u002F* 包含 icon *\u002F\n",[171,137286,137287],{},"ul的第一个儿子文本为红色",[171,137289,137290],{},"一定要在冒号前加空格，不然就是选中所有的了",[19,137292,137294],{"className":126681,"code":137293,"language":126683,"meta":24,"style":24},".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",[26,137295,137296,137302,137312,137316,137320,137325,137338,137351,137367,137384,137401],{"__ignoreMap":24},[29,137297,137298,137300],{"class":31,"line":32},[29,137299,126972],{"class":35},[29,137301,15747],{"class":309},[29,137303,137304,137306,137308,137310],{"class":31,"line":43},[29,137305,71034],{"class":39},[29,137307,51566],{"class":309},[29,137309,57550],{"class":39},[29,137311,1468],{"class":309},[29,137313,137314],{"class":31,"line":51},[29,137315,1741],{"class":309},[29,137317,137318],{"class":31,"line":59},[29,137319,136142],{"class":309},[29,137321,137322],{"class":31,"line":67},[29,137323,137324],{"class":367},"\u002F* 结构伪类选择器 *\u002F\n",[29,137326,137327,137329,137332,137335],{"class":31,"line":75},[29,137328,178],{"class":51429},[29,137330,137331],{"class":35},":first-child",[29,137333,137334],{"class":309}," { }           ",[29,137336,137337],{"class":367},"\u002F* 第一个 *\u002F\n",[29,137339,137340,137342,137345,137348],{"class":31,"line":83},[29,137341,178],{"class":51429},[29,137343,137344],{"class":35},":last-child",[29,137346,137347],{"class":309}," { }            ",[29,137349,137350],{"class":367},"\u002F* 最后一个 *\u002F\n",[29,137352,137353,137355,137357,137359,137361,137364],{"class":31,"line":158},[29,137354,178],{"class":51429},[29,137356,129595],{"class":35},[29,137358,310],{"class":309},[29,137360,386],{"class":39},[29,137362,137363],{"class":309},") { }          ",[29,137365,137366],{"class":367},"\u002F* 第2个 *\u002F\n",[29,137368,137369,137371,137373,137375,137378,137381],{"class":31,"line":166},[29,137370,178],{"class":51429},[29,137372,129595],{"class":35},[29,137374,310],{"class":309},[29,137376,137377],{"class":39},"2n",[29,137379,137380],{"class":309},") { }         ",[29,137382,137383],{"class":367},"\u002F* 偶数 *\u002F\n",[29,137385,137386,137388,137390,137392,137395,137398],{"class":31,"line":1505},[29,137387,178],{"class":51429},[29,137389,129595],{"class":35},[29,137391,310],{"class":309},[29,137393,137394],{"class":39},"2n+1",[29,137396,137397],{"class":309},") { }       ",[29,137399,137400],{"class":367},"\u002F* 奇数 *\u002F\n",[29,137402,137403,137405,137407,137409,137412,137414],{"class":31,"line":1788},[29,137404,178],{"class":51429},[29,137406,129595],{"class":35},[29,137408,310],{"class":309},[29,137410,137411],{"class":39},"-n+3",[29,137413,137397],{"class":309},[29,137415,137416],{"class":367},"\u002F* 前3个 *\u002F\n",[51740,137418,137421],{"className":137419},[137420],"example","\n  示例内容\n",[171,137423,137424],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[175,137426,137427],{},[178,137428,137429,137432],{},[26,137430,137431],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[171,137434,137435],{},"也就是说它选择的是熊大",[259,137437,137438],{"start":75},[178,137439,137440],{},"权重",[19,137442,137444],{"className":126681,"code":137443,"language":126683,"meta":24,"style":24},"\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",[26,137445,137446,137450,137460,137470,137484,137498,137512],{"__ignoreMap":24},[29,137447,137448],{"class":31,"line":32},[29,137449,137324],{"class":367},[29,137451,137452,137454,137456,137458],{"class":31,"line":43},[29,137453,178],{"class":51429},[29,137455,137331],{"class":35},[29,137457,137334],{"class":309},[29,137459,137337],{"class":367},[29,137461,137462,137464,137466,137468],{"class":31,"line":51},[29,137463,178],{"class":51429},[29,137465,137344],{"class":35},[29,137467,137347],{"class":309},[29,137469,137350],{"class":367},[29,137471,137472,137474,137476,137478,137480,137482],{"class":31,"line":59},[29,137473,178],{"class":51429},[29,137475,129595],{"class":35},[29,137477,310],{"class":309},[29,137479,386],{"class":39},[29,137481,137363],{"class":309},[29,137483,137366],{"class":367},[29,137485,137486,137488,137490,137492,137494,137496],{"class":31,"line":67},[29,137487,178],{"class":51429},[29,137489,129595],{"class":35},[29,137491,310],{"class":309},[29,137493,137377],{"class":39},[29,137495,137380],{"class":309},[29,137497,137383],{"class":367},[29,137499,137500,137502,137504,137506,137508,137510],{"class":31,"line":75},[29,137501,178],{"class":51429},[29,137503,129595],{"class":35},[29,137505,310],{"class":309},[29,137507,137394],{"class":39},[29,137509,137397],{"class":309},[29,137511,137400],{"class":367},[29,137513,137514,137516,137518,137520,137522,137524],{"class":31,"line":83},[29,137515,178],{"class":51429},[29,137517,129595],{"class":35},[29,137519,310],{"class":309},[29,137521,137411],{"class":39},[29,137523,137397],{"class":309},[29,137525,137416],{"class":367},[171,137527,137528],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22173,137530,137532],{"id":137531},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[171,137534,137535],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1638,137537],{"style":126537,"src":137538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[259,137540,137541],{},[178,137542,339],{},[175,137544,137545,137548,137551,137554,137557,137560],{},[178,137546,137547],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[178,137549,137550],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[178,137552,137553],{},"语法： element::before {}",[178,137555,137556],{},"before 和 after 必须有 content 属性",[178,137558,137559],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[178,137561,137562],{},"伪元素选择器和标签选择器一样，权重为 1",[259,137564,137565],{"start":43},[178,137566,137567],{},"实例",[19,137569,137570],{"className":126681,"code":137443,"language":126683,"meta":24,"style":24},[26,137571,137572,137576,137586,137596,137610,137624,137638],{"__ignoreMap":24},[29,137573,137574],{"class":31,"line":32},[29,137575,137324],{"class":367},[29,137577,137578,137580,137582,137584],{"class":31,"line":43},[29,137579,178],{"class":51429},[29,137581,137331],{"class":35},[29,137583,137334],{"class":309},[29,137585,137337],{"class":367},[29,137587,137588,137590,137592,137594],{"class":31,"line":51},[29,137589,178],{"class":51429},[29,137591,137344],{"class":35},[29,137593,137347],{"class":309},[29,137595,137350],{"class":367},[29,137597,137598,137600,137602,137604,137606,137608],{"class":31,"line":59},[29,137599,178],{"class":51429},[29,137601,129595],{"class":35},[29,137603,310],{"class":309},[29,137605,386],{"class":39},[29,137607,137363],{"class":309},[29,137609,137366],{"class":367},[29,137611,137612,137614,137616,137618,137620,137622],{"class":31,"line":67},[29,137613,178],{"class":51429},[29,137615,129595],{"class":35},[29,137617,310],{"class":309},[29,137619,137377],{"class":39},[29,137621,137380],{"class":309},[29,137623,137383],{"class":367},[29,137625,137626,137628,137630,137632,137634,137636],{"class":31,"line":75},[29,137627,178],{"class":51429},[29,137629,129595],{"class":35},[29,137631,310],{"class":309},[29,137633,137394],{"class":39},[29,137635,137397],{"class":309},[29,137637,137400],{"class":367},[29,137639,137640,137642,137644,137646,137648,137650],{"class":31,"line":83},[29,137641,178],{"class":51429},[29,137643,129595],{"class":35},[29,137645,310],{"class":309},[29,137647,137411],{"class":39},[29,137649,137397],{"class":309},[29,137651,137416],{"class":367},[1638,137653],{"style":126537,"src":137654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[259,137656,137657],{"start":51},[178,137658,137659],{},"使用场景1",[1638,137661],{"style":126537,"src":137662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[171,137664,137665],{},"不需要再加盒子来整红色那部分了",[19,137667,137669],{"className":126681,"code":137668,"language":126683,"meta":24,"style":24},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[26,137670,137671,137676,137685,137696,137706,137710,137719,137730,137740],{"__ignoreMap":24},[29,137672,137673],{"class":31,"line":32},[29,137674,137675],{"class":367},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[29,137677,137678,137680,137683],{"class":31,"line":43},[29,137679,51740],{"class":51429},[29,137681,137682],{"class":35},"::before",[29,137684,15747],{"class":309},[29,137686,137687,137690,137692,137694],{"class":31,"line":51},[29,137688,137689],{"class":39},"  content",[29,137691,51566],{"class":309},[29,137693,7827],{"class":103},[29,137695,1468],{"class":309},[29,137697,137698,137700,137702,137704],{"class":31,"line":59},[29,137699,128297],{"class":39},[29,137701,51566],{"class":309},[29,137703,60998],{"class":39},[29,137705,1468],{"class":309},[29,137707,137708],{"class":31,"line":67},[29,137709,1741],{"class":309},[29,137711,137712,137714,137717],{"class":31,"line":75},[29,137713,51740],{"class":51429},[29,137715,137716],{"class":35},"::after",[29,137718,15747],{"class":309},[29,137720,137721,137723,137725,137728],{"class":31,"line":83},[29,137722,137689],{"class":39},[29,137724,51566],{"class":309},[29,137726,137727],{"class":103},"\"→\"",[29,137729,1468],{"class":309},[29,137731,137732,137734,137736,137738],{"class":31,"line":158},[29,137733,71034],{"class":39},[29,137735,51566],{"class":309},[29,137737,62199],{"class":39},[29,137739,1468],{"class":309},[29,137741,137742],{"class":31,"line":166},[29,137743,1741],{"class":309},[1638,137745],{"style":126537,"src":137746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[171,137748,137749],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1638,137751],{"style":126537,"src":137752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[171,137754,137755],{},"但是在引用时需要先转义一下",[171,137757,137758],{},"content='\\e930'",[259,137760,137761],{"start":59},[178,137762,137763],{},"使用场景2",[171,137765,137766],{},"仿土豆效果",[171,137768,137769],{},"通过使用伪元素选择器可以减少body中盒子的数量",[19,137771,137772],{"className":126681,"code":137668,"language":126683,"meta":24,"style":24},[26,137773,137774,137778,137786,137796,137806,137810,137818,137828,137838],{"__ignoreMap":24},[29,137775,137776],{"class":31,"line":32},[29,137777,137675],{"class":367},[29,137779,137780,137782,137784],{"class":31,"line":43},[29,137781,51740],{"class":51429},[29,137783,137682],{"class":35},[29,137785,15747],{"class":309},[29,137787,137788,137790,137792,137794],{"class":31,"line":51},[29,137789,137689],{"class":39},[29,137791,51566],{"class":309},[29,137793,7827],{"class":103},[29,137795,1468],{"class":309},[29,137797,137798,137800,137802,137804],{"class":31,"line":59},[29,137799,128297],{"class":39},[29,137801,51566],{"class":309},[29,137803,60998],{"class":39},[29,137805,1468],{"class":309},[29,137807,137808],{"class":31,"line":67},[29,137809,1741],{"class":309},[29,137811,137812,137814,137816],{"class":31,"line":75},[29,137813,51740],{"class":51429},[29,137815,137716],{"class":35},[29,137817,15747],{"class":309},[29,137819,137820,137822,137824,137826],{"class":31,"line":83},[29,137821,137689],{"class":39},[29,137823,51566],{"class":309},[29,137825,137727],{"class":103},[29,137827,1468],{"class":309},[29,137829,137830,137832,137834,137836],{"class":31,"line":158},[29,137831,71034],{"class":39},[29,137833,51566],{"class":309},[29,137835,62199],{"class":39},[29,137837,1468],{"class":309},[29,137839,137840],{"class":31,"line":166},[29,137841,1741],{"class":309},[1638,137843],{"style":126537,"src":137844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[259,137846,137847],{"start":67},[178,137848,137849],{},"使用场景3",[171,137851,137852],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[19,137854,137856],{"className":126681,"code":137855,"language":126683,"meta":24,"style":24},".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",[26,137857,137858,137864,137874,137878,137882,137886,137894,137904,137914,137918,137926,137936,137946],{"__ignoreMap":24},[29,137859,137860,137862],{"class":31,"line":32},[29,137861,130529],{"class":35},[29,137863,15747],{"class":309},[29,137865,137866,137868,137870,137872],{"class":31,"line":43},[29,137867,131161],{"class":39},[29,137869,51566],{"class":309},[29,137871,23911],{"class":39},[29,137873,1468],{"class":309},[29,137875,137876],{"class":31,"line":51},[29,137877,1741],{"class":309},[29,137879,137880],{"class":31,"line":59},[29,137881,136142],{"class":309},[29,137883,137884],{"class":31,"line":67},[29,137885,137675],{"class":367},[29,137887,137888,137890,137892],{"class":31,"line":75},[29,137889,51740],{"class":51429},[29,137891,137682],{"class":35},[29,137893,15747],{"class":309},[29,137895,137896,137898,137900,137902],{"class":31,"line":83},[29,137897,137689],{"class":39},[29,137899,51566],{"class":309},[29,137901,7827],{"class":103},[29,137903,1468],{"class":309},[29,137905,137906,137908,137910,137912],{"class":31,"line":158},[29,137907,128297],{"class":39},[29,137909,51566],{"class":309},[29,137911,60998],{"class":39},[29,137913,1468],{"class":309},[29,137915,137916],{"class":31,"line":166},[29,137917,1741],{"class":309},[29,137919,137920,137922,137924],{"class":31,"line":1505},[29,137921,51740],{"class":51429},[29,137923,137716],{"class":35},[29,137925,15747],{"class":309},[29,137927,137928,137930,137932,137934],{"class":31,"line":1788},[29,137929,137689],{"class":39},[29,137931,51566],{"class":309},[29,137933,137727],{"class":103},[29,137935,1468],{"class":309},[29,137937,137938,137940,137942,137944],{"class":31,"line":1793},[29,137939,71034],{"class":39},[29,137941,51566],{"class":309},[29,137943,62199],{"class":39},[29,137945,1468],{"class":309},[29,137947,137948],{"class":31,"line":1799},[29,137949,1741],{"class":309},[171,137951,137952],{},"div {\nmargin: 0 auto;\n}",[19,137954,137957],{"className":137955,"code":137956,"language":5362},[5360],"\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",[26,137958,137956],{"__ignoreMap":24},[171,137960,137961],{},"如果想让多个元素都发生变化",[171,137963,137964],{},"不能如下操作：",[171,137966,137967],{},"transition: width 2s ease 0.5s;",[171,137969,137970],{},"transition: height 2s ease 0.5s;不对！！！",[171,137972,137973],{},"上方会样式冲突，导致不显示任何过渡效果",[171,137975,137976],{},"使用如下：加逗号隔开",[171,137978,137979],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[171,137981,137982],{},"transition all 2s ease;",[275,137984,137986],{"id":137985},"_1426-过渡练习","14.2.6 过渡练习",[259,137988,137989],{},[178,137990,137991],{},"进度条",[1638,137993],{"style":126537,"src":137994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[19,137996,137998],{"className":126681,"code":137997,"language":126683,"meta":24,"style":24},"div {\n  transition: all 0.3s ease;\n}\n",[26,137999,138000,138006,138024],{"__ignoreMap":24},[29,138001,138002,138004],{"class":31,"line":32},[29,138003,51740],{"class":51429},[29,138005,15747],{"class":309},[29,138007,138008,138011,138013,138015,138018,138020,138022],{"class":31,"line":43},[29,138009,138010],{"class":39},"  transition",[29,138012,51566],{"class":309},[29,138014,28250],{"class":39},[29,138016,138017],{"class":39}," 0.3",[29,138019,1003],{"class":305},[29,138021,78809],{"class":39},[29,138023,1468],{"class":309},[29,138025,138026],{"class":31,"line":51},[29,138027,1741],{"class":309},[259,138029,138030],{"start":43},[178,138031,138032],{},"小米logo",[171,138034,138035],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[19,138037,138039],{"className":126681,"code":138038,"language":126683,"meta":24,"style":24},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[26,138040,138041,138046,138052,138068,138073],{"__ignoreMap":24},[29,138042,138043],{"class":31,"line":32},[29,138044,138045],{"class":367},"\u002F* CSS3 过渡 *\u002F\n",[29,138047,138048,138050],{"class":31,"line":43},[29,138049,51740],{"class":51429},[29,138051,15747],{"class":309},[29,138053,138054,138056,138058,138060,138062,138064,138066],{"class":31,"line":51},[29,138055,138010],{"class":39},[29,138057,51566],{"class":309},[29,138059,28250],{"class":39},[29,138061,138017],{"class":39},[29,138063,1003],{"class":305},[29,138065,78809],{"class":39},[29,138067,1468],{"class":309},[29,138069,138070],{"class":31,"line":59},[29,138071,138072],{"class":367},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[29,138074,138075],{"class":31,"line":67},[29,138076,1741],{"class":309},[171,138078,138079],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[223,138081,138082],{},"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":24,"searchDepth":43,"depth":43,"links":138084},[138085,138090],{"id":136415,"depth":43,"text":136416,"children":138086},[138087,138088,138089],{"id":136419,"depth":51,"text":136420},{"id":136496,"depth":51,"text":136497},{"id":136827,"depth":51,"text":136828},{"id":137118,"depth":43,"text":137119,"children":138091},[138092,138093],{"id":137122,"depth":51,"text":137123},{"id":137985,"depth":51,"text":137986},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136407,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138100,"title":138101,"body":138102,"description":230,"extension":231,"meta":139846,"navigation":233,"path":139847,"seo":139848,"stem":139849,"__hash__":139850},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138103,"toc":139827},[138104,138107,138111,138114,138120,138126,138130,138132,138135,138138,138141,138144,138147,138150,138153,138157,138161,138164,138167,138170,138174,138177,138180,138185,138188,138191,138194,138198,138201,138210,138213,138216,138220,138223,138226,138231,138238,138252,138260,138267,138272,138275,138278,138281,138288,138292,138298,138304,138307,138310,138315,138321,138323,138331,138336,138339,138345,138347,138352,138357,138360,138362,138367,138370,138375,138380,138414,138418,138422,138425,138429,138432,138518,138521,138558,138561,138597,138601,138606,138619,138673,138675,138703,138705,138733,138739,138753,138755,138799,138801,138845,138848,138855,138866,138868,138895,138897,138923,138930,138946,138948,139042,139044,139138,139145,139148,139153,139159,139233,139236,139238,139274,139276,139312,139315,139322,139341,139344,139347,139349,139374,139376,139400,139403,139406,139436,139440,139443,139506,139508,139574,139576,139640,139643,139675,139677,139703,139705,139731,139734,139765,139767,139793,139795,139821,139824],[10,138105,138101],{"id":138106},"_15-品优购项目上篇-搭建与公共模块",[14,138108,138110],{"id":138109},"_151-项目规划","15.1 项目规划",[1638,138112],{"style":126537,"src":138113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[171,138115,138116,138119],{},[457,138117,138118],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[171,138121,138122,138125],{},[457,138123,138124],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138127,138129],{"id":138128},"_152-项目介绍","15.2 项目介绍",[171,138131,138118],{},[1638,138133],{"style":126537,"src":138134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[171,138136,138137],{},"主页：",[1638,138139],{"style":126537,"src":138140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[171,138142,138143],{},"列表页：",[1638,138145],{"style":126537,"src":138146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[171,138148,138149],{},"注册页：",[1638,138151],{"style":126537,"src":138152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138154,138156],{"id":138155},"_153-项目搭建工作","15.3 项目搭建工作",[275,138158,138160],{"id":138159},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1638,138162],{"style":126537,"src":138163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[171,138165,138166],{},"经常更换的图片要放到upload文件夹中",[171,138168,138169],{},"不经常换的放到images文件夹中",[275,138171,138173],{"id":138172},"_1532-创建文件如下","15.3.2 创建文件如下",[1638,138175],{"style":126537,"src":138176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1638,138178],{"style":126537,"src":138179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[171,138181,138182],{},[457,138183,138184],{},"初始化样式：",[171,138186,138187],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[171,138189,138190],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[171,138192,138193],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[275,138195,138197],{"id":138196},"_1533-项目模块化开发","15.3.3 项目模块化开发",[171,138199,138200],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[171,138202,138203,138204,138209],{},"这里最典型的应用就是 ",[457,138205,138206],{},[26,138207,138208],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1638,138211],{"style":126537,"src":138212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[171,138214,138215],{},"通过link方法来引入",[275,138217,138219],{"id":138218},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1638,138221],{"style":126537,"src":138222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[171,138224,138225],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[259,138227,138228],{},[178,138229,138230],{},"制作favicon图标",[171,138232,138233,138234,138237],{},"①把品优购图标切成 ",[26,138235,138236],{},"png"," 图片",[171,138239,138240,138241,138243,138244,138247,138248],{},"②把 ",[26,138242,138236],{}," 图片转换为 ",[26,138245,138246],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[546,138249,138250],{"href":138250,"rel":138251},"http:\u002F\u002Fwww.bitbug.net\u002F",[24038],[259,138253,138254,138257],{"start":43},[178,138255,138256],{},"favicon图标放到网站根目录下",[178,138258,138259],{},"HTML页面引入favicon",[171,138261,138262,138263,138266],{},"在html 页面里面的 ",[26,138264,138265],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[171,138268,138269],{},[26,138270,138271],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[171,138273,138274],{},"复制这行代码或者在生成这个的网站进行复制",[1638,138276],{"style":126537,"src":138277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[171,138279,138280],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[171,138282,138283,138284],{},"例如:",[546,138285,138286],{"href":138286,"rel":138287},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24038],[275,138289,138291],{"id":138290},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[171,138293,138294,138297],{},[457,138295,138296],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[171,138299,138300,138303],{},[457,138301,138302],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[171,138305,138306],{},"页面必须有三个标签用来符合 SEO 优化",[1638,138308],{"style":126537,"src":138309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[259,138311,138312],{},[178,138313,138314],{},"title网站标题",[171,138316,138317,138320],{},[457,138318,138319],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[171,138322,68919],{},[175,138324,138325,138328],{},[178,138326,138327],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[178,138329,138330],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[259,138332,138333],{"start":43},[178,138334,138335],{},"description网站描述",[171,138337,138338],{},"简要说明我们网站主要是做什么的",[171,138340,138341,138344],{},[457,138342,138343],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[171,138346,68919],{},[171,138348,138349],{},[26,138350,138351],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[259,138353,138354],{"start":51},[178,138355,138356],{},"keywords关键词",[171,138358,138359],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[171,138361,68919],{},[171,138363,138364],{},[26,138365,138366],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[171,138368,138369],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[171,138371,138372],{},[457,138373,138374],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[259,138376,138377],{"start":59},[178,138378,138379],{},"代码总结",[19,138381,138382],{"className":127428,"code":130785,"language":127430,"meta":24,"style":24},[26,138383,138384,138388,138402,138406],{"__ignoreMap":24},[29,138385,138386],{"class":31,"line":32},[29,138387,130792],{"class":367},[29,138389,138390,138392,138394,138396,138398,138400],{"class":31,"line":43},[29,138391,1218],{"class":309},[29,138393,51740],{"class":51429},[29,138395,53615],{"class":35},[29,138397,355],{"class":309},[29,138399,130805],{"class":103},[29,138401,51436],{"class":309},[29,138403,138404],{"class":31,"line":51},[29,138405,130812],{"class":309},[29,138407,138408,138410,138412],{"class":31,"line":59},[29,138409,51914],{"class":309},[29,138411,51740],{"class":51429},[29,138413,51436],{"class":309},[14,138415,138417],{"id":138416},"_154-项目公共部分制作","15.4 项目公共部分制作",[275,138419,138421],{"id":138420},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1638,138423],{"style":126537,"src":138424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[275,138426,138428],{"id":138427},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[171,138430,138431],{},"布局思路：",[175,138433,138434,138437,138440,138462,138495],{},[178,138435,138436],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[178,138438,138439],{},"里面包含版心的盒子",[178,138441,138442,138443],{},"版心盒子里面包含 1 号左侧盒子左浮动",[175,138444,138445,138453,138459],{},[178,138446,138447,138448,21675,138450,138452],{},"1 号盒子 里面包含一个",[26,138449,175],{},[26,138451,175],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[178,138454,138455,138456,138458],{},"里面的内容是水平排列，所以需要给",[26,138457,178],{},"设置浮动",[178,138460,138461],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[178,138463,138464,138465],{},"版心盒子里面包含 2 号右侧盒子右浮动",[175,138466,138467,138481,138486],{},[178,138468,138469,138470,21675,138472,138474,138475,138477,138478,138480],{},"2 号盒子 里面包含一个",[26,138471,175],{},[26,138473,175],{},"包裹",[26,138476,178],{},"，中间的",[26,138479,1229],{},"可以用样式去设置，也可以用字符 |",[178,138482,138483,138484,138458],{},"里面内容水平排列，给",[26,138485,178],{},[178,138487,138488,138489,138491,138492,138494],{},"找到里面所有偶数的 ",[26,138490,178],{}," 设置样式（偶数的 ",[26,138493,178],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[178,138496,138497,138498],{},"需要用到字体图标",[175,138499,138500,138506,138509,138512,138515],{},[178,138501,138502,138503],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[26,138504,138505],{},"arrow-icon",[178,138507,138508],{},"先要引入字体图片的资源",[178,138510,138511],{},"在样式里面利用 font-face 来进行声明",[178,138513,138514],{},"在伪元素的 content属性设置 图标的编码",[178,138516,138517],{},"给伪元素设置font-family属性",[171,138519,138520],{},"结构实例代码：",[19,138522,138524],{"className":126681,"code":138523,"language":126683,"meta":24,"style":24},"div::before {\n  content: \"\";\n  display: block;\n}\n",[26,138525,138526,138534,138544,138554],{"__ignoreMap":24},[29,138527,138528,138530,138532],{"class":31,"line":32},[29,138529,51740],{"class":51429},[29,138531,137682],{"class":35},[29,138533,15747],{"class":309},[29,138535,138536,138538,138540,138542],{"class":31,"line":43},[29,138537,137689],{"class":39},[29,138539,51566],{"class":309},[29,138541,7827],{"class":103},[29,138543,1468],{"class":309},[29,138545,138546,138548,138550,138552],{"class":31,"line":51},[29,138547,128297],{"class":39},[29,138549,51566],{"class":309},[29,138551,60998],{"class":39},[29,138553,1468],{"class":309},[29,138555,138556],{"class":31,"line":59},[29,138557,1741],{"class":309},[171,138559,138560],{},"样式实例代码：",[19,138562,138563],{"className":126681,"code":138523,"language":126683,"meta":24,"style":24},[26,138564,138565,138573,138583,138593],{"__ignoreMap":24},[29,138566,138567,138569,138571],{"class":31,"line":32},[29,138568,51740],{"class":51429},[29,138570,137682],{"class":35},[29,138572,15747],{"class":309},[29,138574,138575,138577,138579,138581],{"class":31,"line":43},[29,138576,137689],{"class":39},[29,138578,51566],{"class":309},[29,138580,7827],{"class":103},[29,138582,1468],{"class":309},[29,138584,138585,138587,138589,138591],{"class":31,"line":51},[29,138586,128297],{"class":39},[29,138588,51566],{"class":309},[29,138590,60998],{"class":39},[29,138592,1468],{"class":309},[29,138594,138595],{"class":31,"line":59},[29,138596,1741],{"class":309},[275,138598,138600],{"id":138599},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[175,138602,138603],{},[178,138604,138605],{},"header 盒子必须要有高度",[171,138607,138608,138609,138611,138612],{},"1 号盒子是 ",[26,138610,131693],{}," 标志定位，在正常开发过程中， ",[457,138613,138614,138615,138618],{},"logo的布局其实是有讲究的，需要进行 ",[26,138616,138617],{},"logoSEO","的优化 （★★★）",[175,138620,138621,138629,138637,138664],{},[178,138622,138623,138625,138626,138628],{},[26,138624,131693],{}," 里面首先放一个 ",[26,138627,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[178,138630,138631,138633,138634,138636],{},[26,138632,10],{}," 里面再放一个链接，可以返回首页的，把 ",[26,138635,131693],{}," 的背景图片给链接即可",[178,138638,138639,138640],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[175,138641,138642,138657],{},[178,138643,138644,138645,138648,138649,138652,138653,138656],{},"方法1：",[26,138646,138647],{},"text-indent"," 移到盒子外面（",[26,138650,138651],{},"text-indent: -9999px",") ，然后 ",[26,138654,138655],{},"overflow:hidden"," ，淘宝的做法",[178,138658,138659,138660,138663],{},"方法2：直接给 ",[26,138661,138662],{},"font-size: 0;"," 就看不到文字了，京东的做法",[178,138665,138666,138667,138669,138670,138672],{},"最后给链接一个 ",[26,138668,51536],{}," 属性，这样鼠标放到 ",[26,138671,131693],{}," 上就可以看到提示文字了",[171,138674,138520],{},[19,138676,138677],{"className":127428,"code":131914,"language":127430,"meta":24,"style":24},[26,138678,138679],{"__ignoreMap":24},[29,138680,138681,138683,138685,138687,138689,138691,138693,138695,138697,138699,138701],{"class":31,"line":32},[29,138682,1218],{"class":309},[29,138684,546],{"class":51429},[29,138686,61186],{"class":35},[29,138688,355],{"class":309},[29,138690,131929],{"class":103},[29,138692,131932],{"class":35},[29,138694,355],{"class":309},[29,138696,131937],{"class":103},[29,138698,131940],{"class":309},[29,138700,546],{"class":51429},[29,138702,51436],{"class":309},[171,138704,138560],{},[19,138706,138707],{"className":127428,"code":131914,"language":127430,"meta":24,"style":24},[26,138708,138709],{"__ignoreMap":24},[29,138710,138711,138713,138715,138717,138719,138721,138723,138725,138727,138729,138731],{"class":31,"line":32},[29,138712,1218],{"class":309},[29,138714,546],{"class":51429},[29,138716,61186],{"class":35},[29,138718,355],{"class":309},[29,138720,131929],{"class":103},[29,138722,131932],{"class":35},[29,138724,355],{"class":309},[29,138726,131937],{"class":103},[29,138728,131940],{"class":309},[29,138730,546],{"class":51429},[29,138732,51436],{"class":309},[171,138734,138735,138736,138738],{},"2 号盒子是 ",[26,138737,131706],{}," 搜索模块定位",[175,138740,138741,138744,138747,138750],{},[178,138742,138743],{},"search盒子利用定位的方式放在对应的位置",[178,138745,138746],{},"search盒子设置绝对定位，header盒子设置相对定位",[178,138748,138749],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[178,138751,138752],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[171,138754,138520],{},[19,138756,138757],{"className":126681,"code":132001,"language":126683,"meta":24,"style":24},[26,138758,138759,138781,138785,138795],{"__ignoreMap":24},[29,138760,138761,138763,138765,138767,138769,138771,138773,138775,138777,138779],{"class":31,"line":32},[29,138762,51740],{"class":51429},[29,138764,12610],{"class":309},[29,138766,171],{"class":51429},[29,138768,12610],{"class":309},[29,138770,10],{"class":51429},[29,138772,12610],{"class":309},[29,138774,175],{"class":51429},[29,138776,12610],{"class":309},[29,138778,178],{"class":51429},[29,138780,15747],{"class":309},[29,138782,138783],{"class":31,"line":43},[29,138784,132030],{"class":367},[29,138786,138787,138789,138791,138793],{"class":31,"line":51},[29,138788,128297],{"class":39},[29,138790,51566],{"class":309},[29,138792,60998],{"class":39},[29,138794,1468],{"class":309},[29,138796,138797],{"class":31,"line":59},[29,138798,1741],{"class":309},[171,138800,138560],{},[19,138802,138803],{"className":126681,"code":132001,"language":126683,"meta":24,"style":24},[26,138804,138805,138827,138831,138841],{"__ignoreMap":24},[29,138806,138807,138809,138811,138813,138815,138817,138819,138821,138823,138825],{"class":31,"line":32},[29,138808,51740],{"class":51429},[29,138810,12610],{"class":309},[29,138812,171],{"class":51429},[29,138814,12610],{"class":309},[29,138816,10],{"class":51429},[29,138818,12610],{"class":309},[29,138820,175],{"class":51429},[29,138822,12610],{"class":309},[29,138824,178],{"class":51429},[29,138826,15747],{"class":309},[29,138828,138829],{"class":31,"line":43},[29,138830,132030],{"class":367},[29,138832,138833,138835,138837,138839],{"class":31,"line":51},[29,138834,128297],{"class":39},[29,138836,51566],{"class":309},[29,138838,60998],{"class":39},[29,138840,1468],{"class":309},[29,138842,138843],{"class":31,"line":59},[29,138844,1741],{"class":309},[171,138846,138847],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[171,138849,138850,138851,138854],{},"3 号盒子是 ",[26,138852,138853],{},"hotwords"," 热词模块定位",[175,138856,138857,138860,138863],{},[178,138858,138859],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[178,138861,138862],{},"给里面所有的a标签设置 左右10px的外边距",[178,138864,138865],{},"给第一个a标签设置文字变红色（#c81623）",[171,138867,138520],{},[19,138869,138871],{"className":126681,"code":138870,"language":126683,"meta":24,"style":24},"div {\n  margin: 0 auto;\n}\n",[26,138872,138873,138879,138891],{"__ignoreMap":24},[29,138874,138875,138877],{"class":31,"line":32},[29,138876,51740],{"class":51429},[29,138878,15747],{"class":309},[29,138880,138881,138883,138885,138887,138889],{"class":31,"line":43},[29,138882,70599],{"class":39},[29,138884,51566],{"class":309},[29,138886,499],{"class":39},[29,138888,51685],{"class":39},[29,138890,1468],{"class":309},[29,138892,138893],{"class":31,"line":51},[29,138894,1741],{"class":309},[171,138896,138560],{},[19,138898,138899],{"className":126681,"code":138870,"language":126683,"meta":24,"style":24},[26,138900,138901,138907,138919],{"__ignoreMap":24},[29,138902,138903,138905],{"class":31,"line":32},[29,138904,51740],{"class":51429},[29,138906,15747],{"class":309},[29,138908,138909,138911,138913,138915,138917],{"class":31,"line":43},[29,138910,70599],{"class":39},[29,138912,51566],{"class":309},[29,138914,499],{"class":39},[29,138916,51685],{"class":39},[29,138918,1468],{"class":309},[29,138920,138921],{"class":31,"line":51},[29,138922,1741],{"class":309},[171,138924,138925,138926,138929],{},"4 号盒子是 ",[26,138927,138928],{},"shopcar"," 购物车模块",[175,138931,138932,138937,138940,138943],{},[178,138933,123464,138934,138936],{},[26,138935,138928],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[178,138938,138939],{},"count 统计部分用绝对定位做",[178,138941,138942],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[178,138944,138945],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[171,138947,138520],{},[19,138949,138950],{"className":126681,"code":132113,"language":126683,"meta":24,"style":24},[26,138951,138952,138956,138970,138974,138988,138992,139006,139010,139024,139028],{"__ignoreMap":24},[29,138953,138954],{"class":31,"line":32},[29,138955,132120],{"class":367},[29,138957,138958,138960,138962,138964,138966,138968],{"class":31,"line":43},[29,138959,132125],{"class":35},[29,138961,79936],{"class":309},[29,138963,129041],{"class":39},[29,138965,51566],{"class":309},[29,138967,132134],{"class":39},[29,138969,129611],{"class":309},[29,138971,138972],{"class":31,"line":51},[29,138973,132141],{"class":367},[29,138975,138976,138978,138980,138982,138984,138986],{"class":31,"line":59},[29,138977,132146],{"class":35},[29,138979,79936],{"class":309},[29,138981,129041],{"class":39},[29,138983,51566],{"class":309},[29,138985,54893],{"class":39},[29,138987,129611],{"class":309},[29,138989,138990],{"class":31,"line":67},[29,138991,132161],{"class":367},[29,138993,138994,138996,138998,139000,139002,139004],{"class":31,"line":75},[29,138995,132166],{"class":35},[29,138997,79936],{"class":309},[29,138999,129041],{"class":39},[29,139001,51566],{"class":309},[29,139003,54960],{"class":39},[29,139005,129611],{"class":309},[29,139007,139008],{"class":31,"line":83},[29,139009,132181],{"class":367},[29,139011,139012,139014,139016,139018,139020,139022],{"class":31,"line":158},[29,139013,132186],{"class":35},[29,139015,79936],{"class":309},[29,139017,129041],{"class":39},[29,139019,51566],{"class":309},[29,139021,86362],{"class":39},[29,139023,129611],{"class":309},[29,139025,139026],{"class":31,"line":166},[29,139027,132201],{"class":367},[29,139029,139030,139032,139034,139036,139038,139040],{"class":31,"line":1505},[29,139031,132206],{"class":35},[29,139033,79936],{"class":309},[29,139035,129041],{"class":39},[29,139037,51566],{"class":309},[29,139039,132215],{"class":39},[29,139041,129611],{"class":309},[171,139043,138560],{},[19,139045,139046],{"className":126681,"code":132113,"language":126683,"meta":24,"style":24},[26,139047,139048,139052,139066,139070,139084,139088,139102,139106,139120,139124],{"__ignoreMap":24},[29,139049,139050],{"class":31,"line":32},[29,139051,132120],{"class":367},[29,139053,139054,139056,139058,139060,139062,139064],{"class":31,"line":43},[29,139055,132125],{"class":35},[29,139057,79936],{"class":309},[29,139059,129041],{"class":39},[29,139061,51566],{"class":309},[29,139063,132134],{"class":39},[29,139065,129611],{"class":309},[29,139067,139068],{"class":31,"line":51},[29,139069,132141],{"class":367},[29,139071,139072,139074,139076,139078,139080,139082],{"class":31,"line":59},[29,139073,132146],{"class":35},[29,139075,79936],{"class":309},[29,139077,129041],{"class":39},[29,139079,51566],{"class":309},[29,139081,54893],{"class":39},[29,139083,129611],{"class":309},[29,139085,139086],{"class":31,"line":67},[29,139087,132161],{"class":367},[29,139089,139090,139092,139094,139096,139098,139100],{"class":31,"line":75},[29,139091,132166],{"class":35},[29,139093,79936],{"class":309},[29,139095,129041],{"class":39},[29,139097,51566],{"class":309},[29,139099,54960],{"class":39},[29,139101,129611],{"class":309},[29,139103,139104],{"class":31,"line":83},[29,139105,132181],{"class":367},[29,139107,139108,139110,139112,139114,139116,139118],{"class":31,"line":158},[29,139109,132186],{"class":35},[29,139111,79936],{"class":309},[29,139113,129041],{"class":39},[29,139115,51566],{"class":309},[29,139117,86362],{"class":39},[29,139119,129611],{"class":309},[29,139121,139122],{"class":31,"line":166},[29,139123,132201],{"class":367},[29,139125,139126,139128,139130,139132,139134,139136],{"class":31,"line":1505},[29,139127,132206],{"class":35},[29,139129,79936],{"class":309},[29,139131,129041],{"class":39},[29,139133,51566],{"class":309},[29,139135,132215],{"class":39},[29,139137,129611],{"class":309},[275,139139,139141,139142,139144],{"id":139140},"_1544-nav导航模块制作","15.4.4 ",[26,139143,53842],{},"导航模块制作",[1638,139146],{"style":126537,"src":139147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[171,139149,139150,139152],{},[26,139151,53842],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[171,139154,139155,139156],{},"1 号盒子左侧浮动，",[26,139157,139158],{},"dropdown",[175,139160,139161,139171,139179,139185,139193,139203,139211,139222],{},[178,139162,139163,139164,101147,139167,139170],{},"1号盒子有讲究，根据相关性 里面包含 ",[26,139165,139166],{},".dt",[26,139168,139169],{},".dd"," 两个盒子",[178,139172,139173,139175,139176,139178],{},[26,139174,139166],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[26,139177,139169],{}," 挤到下面去了",[178,139180,139181,139182,139184],{},"给 ",[26,139183,139169],{}," 盒子设置宽度 和 高度，以及背景颜色",[178,139186,139181,139187,139189,139190,120366],{},[26,139188,139169],{}," 盒子里面定义 无序列表 （",[26,139191,139192],{},"ul > li > a",[178,139194,139195,139196,139198,139199,139202],{},"每个 ",[26,139197,178],{}," 都有一个高度（",[26,139200,139201],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[178,139204,139181,139205,139207,139208,120366],{},[26,139206,178],{}," 里面的a设置文字大小（",[26,139209,139210],{},"14px",[178,139212,139181,139213,139215,139216,139218,139219,139221],{},[26,139214,178],{}," 设置 ",[26,139217,127842],{},"，当鼠标移入的时候，让",[26,139220,178],{},"的背景变成白色，让里面的文字变成红色",[178,139223,139224,139226,139227,139229,139230,139232],{},[26,139225,178],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[26,139228,178],{},"的右侧，那么给",[26,139231,178],{},"设置相对定位",[171,139234,139235],{},"一定要注意相关性",[171,139237,138520],{},[19,139239,139240],{"className":126681,"code":138523,"language":126683,"meta":24,"style":24},[26,139241,139242,139250,139260,139270],{"__ignoreMap":24},[29,139243,139244,139246,139248],{"class":31,"line":32},[29,139245,51740],{"class":51429},[29,139247,137682],{"class":35},[29,139249,15747],{"class":309},[29,139251,139252,139254,139256,139258],{"class":31,"line":43},[29,139253,137689],{"class":39},[29,139255,51566],{"class":309},[29,139257,7827],{"class":103},[29,139259,1468],{"class":309},[29,139261,139262,139264,139266,139268],{"class":31,"line":51},[29,139263,128297],{"class":39},[29,139265,51566],{"class":309},[29,139267,60998],{"class":39},[29,139269,1468],{"class":309},[29,139271,139272],{"class":31,"line":59},[29,139273,1741],{"class":309},[171,139275,138560],{},[19,139277,139278],{"className":126681,"code":138523,"language":126683,"meta":24,"style":24},[26,139279,139280,139288,139298,139308],{"__ignoreMap":24},[29,139281,139282,139284,139286],{"class":31,"line":32},[29,139283,51740],{"class":51429},[29,139285,137682],{"class":35},[29,139287,15747],{"class":309},[29,139289,139290,139292,139294,139296],{"class":31,"line":43},[29,139291,137689],{"class":39},[29,139293,51566],{"class":309},[29,139295,7827],{"class":103},[29,139297,1468],{"class":309},[29,139299,139300,139302,139304,139306],{"class":31,"line":51},[29,139301,128297],{"class":39},[29,139303,51566],{"class":309},[29,139305,60998],{"class":39},[29,139307,1468],{"class":309},[29,139309,139310],{"class":31,"line":59},[29,139311,1741],{"class":309},[171,139313,139314],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[171,139316,139317,139318,139321],{},"2 号盒子左侧浮动，",[26,139319,139320],{},"navitems"," 导航栏组",[175,139323,139324,139329,139338],{},[178,139325,139326,139327],{},"里面结构是 ",[26,139328,139192],{},[178,139330,139331,139332,139334,139335,139337],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[26,139333,546],{},"左右的",[26,139336,31012],{},"把两侧撑开",[178,139339,139340],{},"让文字垂直居中（行高等于高度）",[1638,139342],{"style":126537,"src":139343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[171,139345,139346],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[171,139348,138520],{},[19,139350,139352],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},".box {\n  float: left;\n}\n",[26,139353,139354,139360,139370],{"__ignoreMap":24},[29,139355,139356,139358],{"class":31,"line":32},[29,139357,130529],{"class":35},[29,139359,15747],{"class":309},[29,139361,139362,139364,139366,139368],{"class":31,"line":43},[29,139363,131161],{"class":39},[29,139365,51566],{"class":309},[29,139367,23911],{"class":39},[29,139369,1468],{"class":309},[29,139371,139372],{"class":31,"line":51},[29,139373,1741],{"class":309},[171,139375,138560],{},[19,139377,139378],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,139379,139380,139386,139396],{"__ignoreMap":24},[29,139381,139382,139384],{"class":31,"line":32},[29,139383,130529],{"class":35},[29,139385,15747],{"class":309},[29,139387,139388,139390,139392,139394],{"class":31,"line":43},[29,139389,131161],{"class":39},[29,139391,51566],{"class":309},[29,139393,23911],{"class":39},[29,139395,1468],{"class":309},[29,139397,139398],{"class":31,"line":51},[29,139399,1741],{"class":309},[171,139401,139402],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1638,139404],{"style":126537,"src":139405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[19,139407,139408],{"className":126681,"code":130838,"language":126683,"meta":24,"style":24},[26,139409,139410,139416,139432],{"__ignoreMap":24},[29,139411,139412,139414],{"class":31,"line":32},[29,139413,51740],{"class":51429},[29,139415,15747],{"class":309},[29,139417,139418,139420,139422,139424,139426,139428,139430],{"class":31,"line":43},[29,139419,71025],{"class":39},[29,139421,51566],{"class":309},[29,139423,525],{"class":39},[29,139425,51621],{"class":305},[29,139427,51650],{"class":39},[29,139429,130073],{"class":39},[29,139431,1468],{"class":309},[29,139433,139434],{"class":31,"line":51},[29,139435,1741],{"class":309},[275,139437,139439],{"id":139438},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1638,139441],{"style":126537,"src":139442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[175,139444,139445,139450,139455],{},[178,139446,139447,139449],{},[26,139448,131884],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[178,139451,139452,139454],{},[26,139453,131884],{}," 里面有一个大的版心",[178,139456,139457,139458,139461,139462],{},"版心里面包含 1 号盒子，",[26,139459,139460],{},"mod_service"," 是服务模块，mod 是模块的意思",[175,139463,139464,139469,139482,139498,139503],{},[178,139465,139181,139466,139468],{},[26,139467,139460],{}," 设置高度（80px）和下边框",[178,139470,139471,139472,139475,139476,139478,139479,139481],{},"在里面定义 ",[26,139473,139474],{},"ul > li"," ,每个",[26,139477,178],{}," 宽度是300px 高度是 50px，给每个",[26,139480,178],{},"设置35px的左内边距",[178,139483,139484,139485,139487,139488,139490,139491,139493,139494,18585,139496,120366],{},"在每个",[26,139486,178],{},"里面，放一个 ",[26,139489,23085],{},"（里面放图标），一个",[26,139492,51740],{},"（里面放",[26,139495,51740],{},[26,139497,171],{},[178,139499,139181,139500,139502],{},[26,139501,23085],{},"设置浮动，让h5与这个div左右排列",[178,139504,139505],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[171,139507,138520],{},[19,139509,139511],{"className":126681,"code":139510,"language":126683,"meta":24,"style":24},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[26,139512,139513,139519,139531,139543,139570],{"__ignoreMap":24},[29,139514,139515,139517],{"class":31,"line":32},[29,139516,134438],{"class":35},[29,139518,15747],{"class":309},[29,139520,139521,139523,139525,139527,139529],{"class":31,"line":43},[29,139522,70697],{"class":39},[29,139524,51566],{"class":309},[29,139526,1008],{"class":39},[29,139528,51621],{"class":305},[29,139530,1468],{"class":309},[29,139532,139533,139535,139537,139539,139541],{"class":31,"line":51},[29,139534,70917],{"class":39},[29,139536,51566],{"class":309},[29,139538,1008],{"class":39},[29,139540,51621],{"class":305},[29,139542,1468],{"class":309},[29,139544,139545,139547,139549,139551,139553,139555,139557,139559,139562,139564,139566,139568],{"class":31,"line":59},[29,139546,70740],{"class":39},[29,139548,51566],{"class":309},[29,139550,61855],{"class":39},[29,139552,310],{"class":309},[29,139554,134477],{"class":5391},[29,139556,13889],{"class":309},[29,139558,61865],{"class":39},[29,139560,139561],{"class":39}," -10",[29,139563,51621],{"class":305},[29,139565,134496],{"class":39},[29,139567,51621],{"class":305},[29,139569,1468],{"class":309},[29,139571,139572],{"class":31,"line":67},[29,139573,1741],{"class":309},[171,139575,138560],{},[19,139577,139578],{"className":126681,"code":139510,"language":126683,"meta":24,"style":24},[26,139579,139580,139586,139598,139610,139636],{"__ignoreMap":24},[29,139581,139582,139584],{"class":31,"line":32},[29,139583,134438],{"class":35},[29,139585,15747],{"class":309},[29,139587,139588,139590,139592,139594,139596],{"class":31,"line":43},[29,139589,70697],{"class":39},[29,139591,51566],{"class":309},[29,139593,1008],{"class":39},[29,139595,51621],{"class":305},[29,139597,1468],{"class":309},[29,139599,139600,139602,139604,139606,139608],{"class":31,"line":51},[29,139601,70917],{"class":39},[29,139603,51566],{"class":309},[29,139605,1008],{"class":39},[29,139607,51621],{"class":305},[29,139609,1468],{"class":309},[29,139611,139612,139614,139616,139618,139620,139622,139624,139626,139628,139630,139632,139634],{"class":31,"line":59},[29,139613,70740],{"class":39},[29,139615,51566],{"class":309},[29,139617,61855],{"class":39},[29,139619,310],{"class":309},[29,139621,134477],{"class":5391},[29,139623,13889],{"class":309},[29,139625,61865],{"class":39},[29,139627,139561],{"class":39},[29,139629,51621],{"class":305},[29,139631,134496],{"class":39},[29,139633,51621],{"class":305},[29,139635,1468],{"class":309},[29,139637,139638],{"class":31,"line":67},[29,139639,1741],{"class":309},[171,139641,139642],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[175,139644,139645,139648,139654,139660,139672],{},[178,139646,139647],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[178,139649,139650,139651,120366],{},"里面的布局利用 自定义列表来实现（",[26,139652,139653],{},"dl > dt + dd",[178,139655,139181,139656,139659],{},[26,139657,139658],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[178,139661,139181,139662,139665,139666,18585,139668,139671],{},[26,139663,139664],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[26,139667,139664],{},[26,139669,139670],{},"dd","之间有些距离",[178,139673,139674],{},"最后一个 dl 结构和样式不一样，需要单独设置",[171,139676,138520],{},[19,139678,139679],{"className":126681,"code":138870,"language":126683,"meta":24,"style":24},[26,139680,139681,139687,139699],{"__ignoreMap":24},[29,139682,139683,139685],{"class":31,"line":32},[29,139684,51740],{"class":51429},[29,139686,15747],{"class":309},[29,139688,139689,139691,139693,139695,139697],{"class":31,"line":43},[29,139690,70599],{"class":39},[29,139692,51566],{"class":309},[29,139694,499],{"class":39},[29,139696,51685],{"class":39},[29,139698,1468],{"class":309},[29,139700,139701],{"class":31,"line":51},[29,139702,1741],{"class":309},[171,139704,138560],{},[19,139706,139707],{"className":126681,"code":138870,"language":126683,"meta":24,"style":24},[26,139708,139709,139715,139727],{"__ignoreMap":24},[29,139710,139711,139713],{"class":31,"line":32},[29,139712,51740],{"class":51429},[29,139714,15747],{"class":309},[29,139716,139717,139719,139721,139723,139725],{"class":31,"line":43},[29,139718,70599],{"class":39},[29,139720,51566],{"class":309},[29,139722,499],{"class":39},[29,139724,51685],{"class":39},[29,139726,1468],{"class":309},[29,139728,139729],{"class":31,"line":51},[29,139730,1741],{"class":309},[171,139732,139733],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[175,139735,139736,139745,139748,139759],{},[178,139737,139738,139739,139741,139742,139744],{},"分为上下两块，上面是 ",[26,139740,131901],{}," 友情链接，下面是 ",[26,139743,131894],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[178,139746,139747],{},"把内容分别复制到相应模块中",[178,139749,139181,139750,139752,139753,139755,139756,139758],{},[26,139751,131901],{}," 设置 15px 的下外边距，给",[26,139754,131901],{}," 里面 的 ",[26,139757,546],{}," 标签设置 左右 3px 的外边距",[178,139760,139761,139762,139764],{},"给",[26,139763,131894],{}," 设置 20px 的行高",[171,139766,138520],{},[19,139768,139769],{"className":126681,"code":138870,"language":126683,"meta":24,"style":24},[26,139770,139771,139777,139789],{"__ignoreMap":24},[29,139772,139773,139775],{"class":31,"line":32},[29,139774,51740],{"class":51429},[29,139776,15747],{"class":309},[29,139778,139779,139781,139783,139785,139787],{"class":31,"line":43},[29,139780,70599],{"class":39},[29,139782,51566],{"class":309},[29,139784,499],{"class":39},[29,139786,51685],{"class":39},[29,139788,1468],{"class":309},[29,139790,139791],{"class":31,"line":51},[29,139792,1741],{"class":309},[171,139794,138560],{},[19,139796,139797],{"className":126681,"code":138870,"language":126683,"meta":24,"style":24},[26,139798,139799,139805,139817],{"__ignoreMap":24},[29,139800,139801,139803],{"class":31,"line":32},[29,139802,51740],{"class":51429},[29,139804,15747],{"class":309},[29,139806,139807,139809,139811,139813,139815],{"class":31,"line":43},[29,139808,70599],{"class":39},[29,139810,51566],{"class":309},[29,139812,499],{"class":39},[29,139814,51685],{"class":39},[29,139816,1468],{"class":309},[29,139818,139819],{"class":31,"line":51},[29,139820,1741],{"class":309},[171,139822,139823],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[223,139825,139826],{},"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":24,"searchDepth":43,"depth":43,"links":139828},[139829,139830,139831,139838],{"id":138109,"depth":43,"text":138110},{"id":138128,"depth":43,"text":138129},{"id":138155,"depth":43,"text":138156,"children":139832},[139833,139834,139835,139836,139837],{"id":138159,"depth":51,"text":138160},{"id":138172,"depth":51,"text":138173},{"id":138196,"depth":51,"text":138197},{"id":138218,"depth":51,"text":138219},{"id":138290,"depth":51,"text":138291},{"id":138416,"depth":43,"text":138417,"children":139839},[139840,139841,139842,139843,139845],{"id":138420,"depth":51,"text":138421},{"id":138427,"depth":51,"text":138428},{"id":138599,"depth":51,"text":138600},{"id":139140,"depth":51,"text":139844},"15.4.4 nav导航模块制作",{"id":139438,"depth":51,"text":139439},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138101,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139852,"title":139853,"body":139854,"description":230,"extension":231,"meta":142256,"navigation":233,"path":142257,"seo":142258,"stem":142259,"__hash__":142260},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139855,"toc":142233},[139856,139859,139863,139867,139879,139882,139885,139888,139899,139901,139925,139927,139951,139956,139959,139961,139997,139999,140035,140038,140043,140046,140049,140052,140082,140089,140092,140102,140104,140138,140141,140175,140181,140198,140200,140236,140238,140274,140279,140304,140306,140332,140334,140358,140365,140368,140432,140434,140476,140478,140518,140525,140530,140532,140562,140564,140594,140598,140601,140608,140620,140622,140648,140650,140674,140677,140679,140703,140709,140719,140721,140751,140753,140783,140790,140831,140833,140869,140871,140907,140911,140914,140917,140920,140926,140931,140934,140957,140960,140984,140987,141011,141016,141019,141022,141025,141028,141031,141105,141107,141137,141139,141169,141172,141175,141207,141211,141215,141229,141238,141241,141246,141248,141342,141344,141438,141461,141463,141487,141489,141513,141520,141523,141533,141535,141559,141564,141572,141574,141604,141609,141649,141651,141677,141679,141705,141709,141712,141717,141720,141724,141732,141739,141747,141749,141779,141781,141811,141819,141822,141825,141827,141857,141859,141889,141892,141897,141899,141923,141925,141949,141952,142037,142039,142063,142065,142089,142093,142095,142119,142121,142155,142159,142173,142176,142181,142184,142189,142192,142222,142230],[10,139857,139853],{"id":139858},"_16-品优购项目下篇-主体与页面开发",[14,139860,139862],{"id":139861},"_161-项目主体模块制作","16.1 项目主体模块制作",[275,139864,139866],{"id":139865},"_1611-首页制作","16.1.1 首页制作",[171,139868,139869,139871,139872,139874,139875,139878],{},[457,139870,102187],{}," 主体模块是 ",[457,139873,74187],{}," 里面专有的，注意需要新的样式文件 ",[457,139876,139877],{},"index.css，"," 就不要写在common.css中了",[1638,139880],{"style":126537,"src":139881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1638,139883],{"style":126537,"src":139884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[171,139886,139887],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[175,139889,139890,139893,139896],{},[178,139891,139892],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[178,139894,139895],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[178,139897,139898],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[171,139900,138520],{},[19,139902,139903],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,139904,139905,139911,139921],{"__ignoreMap":24},[29,139906,139907,139909],{"class":31,"line":32},[29,139908,130529],{"class":35},[29,139910,15747],{"class":309},[29,139912,139913,139915,139917,139919],{"class":31,"line":43},[29,139914,131161],{"class":39},[29,139916,51566],{"class":309},[29,139918,23911],{"class":39},[29,139920,1468],{"class":309},[29,139922,139923],{"class":31,"line":51},[29,139924,1741],{"class":309},[171,139926,138560],{},[19,139928,139929],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,139930,139931,139937,139947],{"__ignoreMap":24},[29,139932,139933,139935],{"class":31,"line":32},[29,139934,130529],{"class":35},[29,139936,15747],{"class":309},[29,139938,139939,139941,139943,139945],{"class":31,"line":43},[29,139940,131161],{"class":39},[29,139942,51566],{"class":309},[29,139944,23911],{"class":39},[29,139946,1468],{"class":309},[29,139948,139949],{"class":31,"line":51},[29,139950,1741],{"class":309},[259,139952,139953],{},[178,139954,139955],{},"左侧focus模块制作",[1638,139957],{"style":126537,"src":139958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[171,139960,138520],{},[19,139962,139963],{"className":126681,"code":128004,"language":126683,"meta":24,"style":24},[26,139964,139965,139973,139983,139993],{"__ignoreMap":24},[29,139966,139967,139969,139971],{"class":31,"line":32},[29,139968,53950],{"class":51429},[29,139970,62029],{"class":35},[29,139972,15747],{"class":309},[29,139974,139975,139977,139979,139981],{"class":31,"line":43},[29,139976,128019],{"class":39},[29,139978,51566],{"class":309},[29,139980,55018],{"class":39},[29,139982,1468],{"class":309},[29,139984,139985,139987,139989,139991],{"class":31,"line":51},[29,139986,70927],{"class":39},[29,139988,51566],{"class":309},[29,139990,54866],{"class":39},[29,139992,1468],{"class":309},[29,139994,139995],{"class":31,"line":59},[29,139996,1741],{"class":309},[171,139998,138560],{},[19,140000,140001],{"className":126681,"code":128004,"language":126683,"meta":24,"style":24},[26,140002,140003,140011,140021,140031],{"__ignoreMap":24},[29,140004,140005,140007,140009],{"class":31,"line":32},[29,140006,53950],{"class":51429},[29,140008,62029],{"class":35},[29,140010,15747],{"class":309},[29,140012,140013,140015,140017,140019],{"class":31,"line":43},[29,140014,128019],{"class":39},[29,140016,51566],{"class":309},[29,140018,55018],{"class":39},[29,140020,1468],{"class":309},[29,140022,140023,140025,140027,140029],{"class":31,"line":51},[29,140024,70927],{"class":39},[29,140026,51566],{"class":309},[29,140028,54866],{"class":39},[29,140030,1468],{"class":309},[29,140032,140033],{"class":31,"line":59},[29,140034,1741],{"class":309},[171,140036,140037],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[259,140039,140040],{"start":43},[178,140041,140042],{},"右侧newsflash模块制作",[1638,140044],{"style":126537,"src":140045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[171,140047,140048],{},"右侧的模块 分为上中下三个盒子",[171,140050,140051],{},"结构代码：",[19,140053,140054],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,140055,140056],{"__ignoreMap":24},[29,140057,140058,140060,140062,140064,140066,140068,140070,140072,140074,140076,140078,140080],{"class":31,"line":32},[29,140059,1218],{"class":309},[29,140061,1638],{"class":51429},[29,140063,55368],{"class":35},[29,140065,355],{"class":309},[29,140067,134198],{"class":103},[29,140069,55376],{"class":35},[29,140071,355],{"class":309},[29,140073,134205],{"class":103},[29,140075,134208],{"class":35},[29,140077,355],{"class":309},[29,140079,134213],{"class":103},[29,140081,51436],{"class":309},[171,140083,140084,140085,140088],{},"1 号盒子为 ",[26,140086,140087],{},"news"," 新闻模块 高度为 165px",[1638,140090],{"style":126537,"src":140091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[171,140093,140094,140095,140098,140099],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[26,140096,140097],{},"news-hd","，下面是 ",[26,140100,140101],{},"news-bd",[171,140103,140051],{},[19,140105,140106],{"className":127428,"code":130785,"language":127430,"meta":24,"style":24},[26,140107,140108,140112,140126,140130],{"__ignoreMap":24},[29,140109,140110],{"class":31,"line":32},[29,140111,130792],{"class":367},[29,140113,140114,140116,140118,140120,140122,140124],{"class":31,"line":43},[29,140115,1218],{"class":309},[29,140117,51740],{"class":51429},[29,140119,53615],{"class":35},[29,140121,355],{"class":309},[29,140123,130805],{"class":103},[29,140125,51436],{"class":309},[29,140127,140128],{"class":31,"line":51},[29,140129,130812],{"class":309},[29,140131,140132,140134,140136],{"class":31,"line":59},[29,140133,51914],{"class":309},[29,140135,51740],{"class":51429},[29,140137,51436],{"class":309},[171,140139,140140],{},"样式代码：",[19,140142,140143],{"className":127428,"code":130785,"language":127430,"meta":24,"style":24},[26,140144,140145,140149,140163,140167],{"__ignoreMap":24},[29,140146,140147],{"class":31,"line":32},[29,140148,130792],{"class":367},[29,140150,140151,140153,140155,140157,140159,140161],{"class":31,"line":43},[29,140152,1218],{"class":309},[29,140154,51740],{"class":51429},[29,140156,53615],{"class":35},[29,140158,355],{"class":309},[29,140160,130805],{"class":103},[29,140162,51436],{"class":309},[29,140164,140165],{"class":31,"line":51},[29,140166,130812],{"class":309},[29,140168,140169,140171,140173],{"class":31,"line":59},[29,140170,51914],{"class":309},[29,140172,51740],{"class":51429},[29,140174,51436],{"class":309},[171,140176,140177,140178,140180],{},"上面是",[26,140179,140097],{},"，设置高度是 33px，设置下边框",[175,140182,140183,140189],{},[178,140184,140185,140186,140188],{},"里面放一个",[26,140187,23085],{}," 标题",[178,140190,140191,140192,140194,140195,140197],{},"放一个a",[26,140193,102822],{},"，内容是 更多，然后让 ",[26,140196,546],{}," 进行右浮动，三角用伪元素设置字体图标就好",[171,140199,140051],{},[19,140201,140202],{"className":126681,"code":138523,"language":126683,"meta":24,"style":24},[26,140203,140204,140212,140222,140232],{"__ignoreMap":24},[29,140205,140206,140208,140210],{"class":31,"line":32},[29,140207,51740],{"class":51429},[29,140209,137682],{"class":35},[29,140211,15747],{"class":309},[29,140213,140214,140216,140218,140220],{"class":31,"line":43},[29,140215,137689],{"class":39},[29,140217,51566],{"class":309},[29,140219,7827],{"class":103},[29,140221,1468],{"class":309},[29,140223,140224,140226,140228,140230],{"class":31,"line":51},[29,140225,128297],{"class":39},[29,140227,51566],{"class":309},[29,140229,60998],{"class":39},[29,140231,1468],{"class":309},[29,140233,140234],{"class":31,"line":59},[29,140235,1741],{"class":309},[171,140237,140140],{},[19,140239,140240],{"className":126681,"code":138523,"language":126683,"meta":24,"style":24},[26,140241,140242,140250,140260,140270],{"__ignoreMap":24},[29,140243,140244,140246,140248],{"class":31,"line":32},[29,140245,51740],{"class":51429},[29,140247,137682],{"class":35},[29,140249,15747],{"class":309},[29,140251,140252,140254,140256,140258],{"class":31,"line":43},[29,140253,137689],{"class":39},[29,140255,51566],{"class":309},[29,140257,7827],{"class":103},[29,140259,1468],{"class":309},[29,140261,140262,140264,140266,140268],{"class":31,"line":51},[29,140263,128297],{"class":39},[29,140265,51566],{"class":309},[29,140267,60998],{"class":39},[29,140269,1468],{"class":309},[29,140271,140272],{"class":31,"line":59},[29,140273,1741],{"class":309},[171,140275,140276,140277],{},"下面是",[26,140278,140101],{},[175,140280,140281,140289],{},[178,140282,140283,140284,101147,140286,140288],{},"里面包含 ",[26,140285,175],{},[26,140287,178],{}," 还有链接",[178,140290,139761,140291,140293,140294,140296,140297,140300,140301],{},[26,140292,178],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[26,140295,131347],{}," 2.设置 ",[26,140298,140299],{},"white-space: nowrap;"," 3. 设置 ",[26,140302,140303],{},"text-overflow: ellipsis;",[171,140305,140051],{},[19,140307,140309],{"className":126681,"code":140308,"language":126683,"meta":24,"style":24},"div {\n  overflow: hidden;\n}\n",[26,140310,140311,140317,140328],{"__ignoreMap":24},[29,140312,140313,140315],{"class":31,"line":32},[29,140314,51740],{"class":51429},[29,140316,15747],{"class":309},[29,140318,140319,140322,140324,140326],{"class":31,"line":43},[29,140320,140321],{"class":39},"  overflow",[29,140323,51566],{"class":309},[29,140325,61843],{"class":39},[29,140327,1468],{"class":309},[29,140329,140330],{"class":31,"line":51},[29,140331,1741],{"class":309},[171,140333,140140],{},[19,140335,140336],{"className":126681,"code":140308,"language":126683,"meta":24,"style":24},[26,140337,140338,140344,140354],{"__ignoreMap":24},[29,140339,140340,140342],{"class":31,"line":32},[29,140341,51740],{"class":51429},[29,140343,15747],{"class":309},[29,140345,140346,140348,140350,140352],{"class":31,"line":43},[29,140347,140321],{"class":39},[29,140349,51566],{"class":309},[29,140351,61843],{"class":39},[29,140353,1468],{"class":309},[29,140355,140356],{"class":31,"line":51},[29,140357,1741],{"class":309},[171,140359,140360,140361,140364],{},"2 号盒子为 ",[26,140362,140363],{},"lifeservice"," 生活服务模块 高度为 209px",[1638,140366],{"style":126537,"src":140367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[175,140369,140370,140373,140383,140407,140418],{},[178,140371,140372],{},"设置边框（左右下边框）",[178,140374,140375,140376,140379,140380,140382],{},"里面的内容 是 ",[26,140377,140378],{},"ul > 12*li","，给",[26,140381,178],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[178,140384,140385,140386],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[175,140387,140388,140393,140402],{},[178,140389,140390,140392],{},[26,140391,140363],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[178,140394,140395,140396,140398,140399,140401],{},"可以让 ",[26,140397,140363],{}," 里面的 ",[26,140400,175],{}," 宽度为 252，就可以装的下 4 个 小 li",[178,140403,140404,140406],{},[26,140405,140363],{}," 盒子 overflow 隐藏多余的部分就可以了",[178,140408,116596,140409,140411,140412,140414,140415,140417],{},[26,140410,178],{}," 里面放一个 ",[26,140413,749],{},"（里面放图标），下面的文本用 ",[26,140416,171],{}," 标签包裹",[178,140419,139181,140420,140422,140423,140425,140426,139215,140428,140431],{},[26,140421,749],{}," 设置 24px宽和28px的高（注意 ",[26,140424,749],{}," 是行内元素， 转成行内块），给 ",[26,140427,178],{},[26,140429,140430],{},"text-align:center"," 让里面内容居中显示",[171,140433,140051],{},[19,140435,140437],{"className":126681,"code":140436,"language":126683,"meta":24,"style":24},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[26,140438,140439,140457,140462,140472],{"__ignoreMap":24},[29,140440,140441,140443,140445,140447,140449,140451,140453,140455],{"class":31,"line":32},[29,140442,29],{"class":51429},[29,140444,12610],{"class":309},[29,140446,546],{"class":51429},[29,140448,12610],{"class":309},[29,140450,23728],{"class":51429},[29,140452,12610],{"class":309},[29,140454,457],{"class":51429},[29,140456,15747],{"class":309},[29,140458,140459],{"class":31,"line":43},[29,140460,140461],{"class":367},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[29,140463,140464,140466,140468,140470],{"class":31,"line":51},[29,140465,128297],{"class":39},[29,140467,51566],{"class":309},[29,140469,128359],{"class":39},[29,140471,1468],{"class":309},[29,140473,140474],{"class":31,"line":59},[29,140475,1741],{"class":309},[171,140477,140140],{},[19,140479,140480],{"className":126681,"code":140436,"language":126683,"meta":24,"style":24},[26,140481,140482,140500,140504,140514],{"__ignoreMap":24},[29,140483,140484,140486,140488,140490,140492,140494,140496,140498],{"class":31,"line":32},[29,140485,29],{"class":51429},[29,140487,12610],{"class":309},[29,140489,546],{"class":51429},[29,140491,12610],{"class":309},[29,140493,23728],{"class":51429},[29,140495,12610],{"class":309},[29,140497,457],{"class":51429},[29,140499,15747],{"class":309},[29,140501,140502],{"class":31,"line":43},[29,140503,140461],{"class":367},[29,140505,140506,140508,140510,140512],{"class":31,"line":51},[29,140507,128297],{"class":39},[29,140509,51566],{"class":309},[29,140511,128359],{"class":39},[29,140513,1468],{"class":309},[29,140515,140516],{"class":31,"line":59},[29,140517,1741],{"class":309},[171,140519,140520,140521,140524],{},"3 号盒子为 ",[26,140522,140523],{},"bargain"," 特价商品",[175,140526,140527],{},[178,140528,140529],{},"这个比较简单，直接插入一张图片即可",[171,140531,140051],{},[19,140533,140534],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,140535,140536],{"__ignoreMap":24},[29,140537,140538,140540,140542,140544,140546,140548,140550,140552,140554,140556,140558,140560],{"class":31,"line":32},[29,140539,1218],{"class":309},[29,140541,1638],{"class":51429},[29,140543,55368],{"class":35},[29,140545,355],{"class":309},[29,140547,134198],{"class":103},[29,140549,55376],{"class":35},[29,140551,355],{"class":309},[29,140553,134205],{"class":103},[29,140555,134208],{"class":35},[29,140557,355],{"class":309},[29,140559,134213],{"class":103},[29,140561,51436],{"class":309},[171,140563,140140],{},[19,140565,140566],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,140567,140568],{"__ignoreMap":24},[29,140569,140570,140572,140574,140576,140578,140580,140582,140584,140586,140588,140590,140592],{"class":31,"line":32},[29,140571,1218],{"class":309},[29,140573,1638],{"class":51429},[29,140575,55368],{"class":35},[29,140577,355],{"class":309},[29,140579,134198],{"class":103},[29,140581,55376],{"class":35},[29,140583,355],{"class":309},[29,140585,134205],{"class":103},[29,140587,134208],{"class":35},[29,140589,355],{"class":309},[29,140591,134213],{"class":103},[29,140593,51436],{"class":309},[275,140595,140597],{"id":140596},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1638,140599],{"style":126537,"src":140600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[171,140602,140603,140604,140607],{},"大盒子 ",[26,140605,140606],{},"recom"," 推荐模块 recommend",[175,140609,140610],{},[178,140611,140612,140613,140615,140616,140619],{},"给这个 ",[26,140614,140606],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[26,140617,140618],{},"#ebebeb","），设置距离上边 12px",[171,140621,140051],{},[19,140623,140625],{"className":126681,"code":140624,"language":126683,"meta":24,"style":24},"div {\n  background-color: #f0f0f0;\n}\n",[26,140626,140627,140633,140644],{"__ignoreMap":24},[29,140628,140629,140631],{"class":31,"line":32},[29,140630,51740],{"class":51429},[29,140632,15747],{"class":309},[29,140634,140635,140637,140639,140642],{"class":31,"line":43},[29,140636,71007],{"class":39},[29,140638,51566],{"class":309},[29,140640,140641],{"class":39},"#f0f0f0",[29,140643,1468],{"class":309},[29,140645,140646],{"class":31,"line":51},[29,140647,1741],{"class":309},[171,140649,140140],{},[19,140651,140652],{"className":126681,"code":140624,"language":126683,"meta":24,"style":24},[26,140653,140654,140660,140670],{"__ignoreMap":24},[29,140655,140656,140658],{"class":31,"line":32},[29,140657,51740],{"class":51429},[29,140659,15747],{"class":309},[29,140661,140662,140664,140666,140668],{"class":31,"line":43},[29,140663,71007],{"class":39},[29,140665,51566],{"class":309},[29,140667,140641],{"class":39},[29,140669,1468],{"class":309},[29,140671,140672],{"class":31,"line":51},[29,140673,1741],{"class":309},[171,140675,140676],{},"里面包含 2 个盒子， 浮动即可",[171,140678,140051],{},[19,140680,140681],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,140682,140683,140689,140699],{"__ignoreMap":24},[29,140684,140685,140687],{"class":31,"line":32},[29,140686,130529],{"class":35},[29,140688,15747],{"class":309},[29,140690,140691,140693,140695,140697],{"class":31,"line":43},[29,140692,131161],{"class":39},[29,140694,51566],{"class":309},[29,140696,23911],{"class":39},[29,140698,1468],{"class":309},[29,140700,140701],{"class":31,"line":51},[29,140702,1741],{"class":309},[171,140704,140705,140706],{},"1 号盒子 ",[26,140707,140708],{},"recom_hd",[175,140710,140711,140714],{},[178,140712,140713],{},"设置宽度205px，高度163px",[178,140715,140185,140716,140718],{},[26,140717,1638],{},"标签，插入图片即可",[171,140720,140051],{},[19,140722,140723],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,140724,140725],{"__ignoreMap":24},[29,140726,140727,140729,140731,140733,140735,140737,140739,140741,140743,140745,140747,140749],{"class":31,"line":32},[29,140728,1218],{"class":309},[29,140730,1638],{"class":51429},[29,140732,55368],{"class":35},[29,140734,355],{"class":309},[29,140736,134198],{"class":103},[29,140738,55376],{"class":35},[29,140740,355],{"class":309},[29,140742,134205],{"class":103},[29,140744,134208],{"class":35},[29,140746,355],{"class":309},[29,140748,134213],{"class":103},[29,140750,51436],{"class":309},[171,140752,140140],{},[19,140754,140755],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,140756,140757],{"__ignoreMap":24},[29,140758,140759,140761,140763,140765,140767,140769,140771,140773,140775,140777,140779,140781],{"class":31,"line":32},[29,140760,1218],{"class":309},[29,140762,1638],{"class":51429},[29,140764,55368],{"class":35},[29,140766,355],{"class":309},[29,140768,134198],{"class":103},[29,140770,55376],{"class":35},[29,140772,355],{"class":309},[29,140774,134205],{"class":103},[29,140776,134208],{"class":35},[29,140778,355],{"class":309},[29,140780,134213],{"class":103},[29,140782,51436],{"class":309},[171,140784,140785,140786,140789],{},"2 号盒子 ",[26,140787,140788],{},"recom_bd"," ，注意里面的小竖线",[175,140791,140792,140803,140806,140811,140816],{},[178,140793,140794,140795,140797,140798,140800,140801],{},"右侧结构里面放 ",[26,140796,175],{}," 包含 4个 ",[26,140799,178],{},"，每个li里面包含一个",[26,140802,1638],{},[178,140804,140805],{},"直接利用切片工具把里面的内容当成一张图片",[178,140807,139181,140808,140810],{},[26,140809,178],{}," 设置浮动",[178,140812,139181,140813,140815],{},[26,140814,1638],{}," 设置宽高，宽度 248px，高度 163px",[178,140817,140818,140819,140379,140822,140824,140825,140827,140828],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[26,140820,140821],{},"top 10px",[26,140823,178],{},"设置相对定位（注意，最后一个",[26,140826,178],{},"不用设置伪元素），可以利用 ",[26,140829,140830],{},"nth-child(-n+3){...}",[171,140832,140051],{},[19,140834,140835],{"className":126681,"code":138523,"language":126683,"meta":24,"style":24},[26,140836,140837,140845,140855,140865],{"__ignoreMap":24},[29,140838,140839,140841,140843],{"class":31,"line":32},[29,140840,51740],{"class":51429},[29,140842,137682],{"class":35},[29,140844,15747],{"class":309},[29,140846,140847,140849,140851,140853],{"class":31,"line":43},[29,140848,137689],{"class":39},[29,140850,51566],{"class":309},[29,140852,7827],{"class":103},[29,140854,1468],{"class":309},[29,140856,140857,140859,140861,140863],{"class":31,"line":51},[29,140858,128297],{"class":39},[29,140860,51566],{"class":309},[29,140862,60998],{"class":39},[29,140864,1468],{"class":309},[29,140866,140867],{"class":31,"line":59},[29,140868,1741],{"class":309},[171,140870,140140],{},[19,140872,140873],{"className":126681,"code":138523,"language":126683,"meta":24,"style":24},[26,140874,140875,140883,140893,140903],{"__ignoreMap":24},[29,140876,140877,140879,140881],{"class":31,"line":32},[29,140878,51740],{"class":51429},[29,140880,137682],{"class":35},[29,140882,15747],{"class":309},[29,140884,140885,140887,140889,140891],{"class":31,"line":43},[29,140886,137689],{"class":39},[29,140888,51566],{"class":309},[29,140890,7827],{"class":103},[29,140892,1468],{"class":309},[29,140894,140895,140897,140899,140901],{"class":31,"line":51},[29,140896,128297],{"class":39},[29,140898,51566],{"class":309},[29,140900,60998],{"class":39},[29,140902,1468],{"class":309},[29,140904,140905],{"class":31,"line":59},[29,140906,1741],{"class":309},[275,140908,140910],{"id":140909},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1638,140912],{"style":126537,"src":140913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[171,140915,140916],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[171,140918,140919],{},"第一楼是家用电器模块： 里面包含两个盒子",[171,140921,140922,140925],{},[26,140923,140924],{},"box_hd"," 制作",[171,140927,140705,140928,140930],{},[26,140929,140924],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1638,140932],{"style":126537,"src":140933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[175,140935,140936,140941,140946,140949],{},[178,140937,140938,140940],{},[26,140939,140924],{}," 给 30px 的高度，2个像素的下边框",[178,140942,140943,140944],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[26,140945,139192],{},[178,140947,140948],{},"左侧盒左浮动，右侧盒子右浮动",[178,140950,140951,140953,140954,140956],{},[26,140952,546],{},"标签之间的距离用左右的",[26,140955,31012],{},"撑开即可",[171,140958,140959],{},"结构代码",[19,140961,140962],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,140963,140964,140970,140980],{"__ignoreMap":24},[29,140965,140966,140968],{"class":31,"line":32},[29,140967,130529],{"class":35},[29,140969,15747],{"class":309},[29,140971,140972,140974,140976,140978],{"class":31,"line":43},[29,140973,131161],{"class":39},[29,140975,51566],{"class":309},[29,140977,23911],{"class":39},[29,140979,1468],{"class":309},[29,140981,140982],{"class":31,"line":51},[29,140983,1741],{"class":309},[171,140985,140986],{},"样式代码",[19,140988,140989],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,140990,140991,140997,141007],{"__ignoreMap":24},[29,140992,140993,140995],{"class":31,"line":32},[29,140994,130529],{"class":35},[29,140996,15747],{"class":309},[29,140998,140999,141001,141003,141005],{"class":31,"line":43},[29,141000,131161],{"class":39},[29,141002,51566],{"class":309},[29,141004,23911],{"class":39},[29,141006,1468],{"class":309},[29,141008,141009],{"class":31,"line":51},[29,141010,1741],{"class":309},[171,141012,141013,140925],{},[26,141014,141015],{},"box_bd",[171,141017,141018],{},"2 号盒子 box_bd，不要给高度",[1638,141020],{"style":126537,"src":141021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[171,141023,141024],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[171,141026,141027],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[171,141029,141030],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[175,141032,141033,141045,141061],{},[178,141034,141035,141037,141038,141041,141042,141044],{},[26,141036,141015],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[26,141039,141040],{},"tab_content","，在",[26,141043,141040],{}," 里面包裹tab选项卡对应的内容",[178,141046,141047,141048,141051,141052,141054,141055,141057,141058,141060],{},"内容被一个大盒子包裹（",[26,141049,141050],{},"tab_list_item","），里面是 ",[26,141053,175],{}," 包裹 5个 ",[26,141056,178],{},"，每个",[26,141059,178],{},"设置对应的宽度，然后设置浮动",[178,141062,141063,141064,141066,141067,141069,141070],{},"而这5个",[26,141065,178],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[26,141068,178],{},"设置",[175,141071,141072,141090,141093],{},[178,141073,141074,141075,141077,141078,141080,141081,141083,141084,141086,141087,141089],{},"第一个小 ",[26,141076,178],{}," 分为上下结构，上面是 ",[26,141079,175],{}," 包裹 ",[26,141082,178],{}," ，",[26,141085,178],{},"里面包裹 ",[26,141088,546],{},"，下面插入一张图片",[178,141091,141092],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[178,141094,141095,141096,141098,141099,141101,141102,141104],{},"后面的小 ",[26,141097,178],{}," 里面先放一个",[26,141100,546],{},"标签，然后在",[26,141103,546],{},"标签里面插入图片即可",[171,141106,140959],{},[19,141108,141109],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,141110,141111],{"__ignoreMap":24},[29,141112,141113,141115,141117,141119,141121,141123,141125,141127,141129,141131,141133,141135],{"class":31,"line":32},[29,141114,1218],{"class":309},[29,141116,1638],{"class":51429},[29,141118,55368],{"class":35},[29,141120,355],{"class":309},[29,141122,134198],{"class":103},[29,141124,55376],{"class":35},[29,141126,355],{"class":309},[29,141128,134205],{"class":103},[29,141130,134208],{"class":35},[29,141132,355],{"class":309},[29,141134,134213],{"class":103},[29,141136,51436],{"class":309},[171,141138,140986],{},[19,141140,141141],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,141142,141143],{"__ignoreMap":24},[29,141144,141145,141147,141149,141151,141153,141155,141157,141159,141161,141163,141165,141167],{"class":31,"line":32},[29,141146,1218],{"class":309},[29,141148,1638],{"class":51429},[29,141150,55368],{"class":35},[29,141152,355],{"class":309},[29,141154,134198],{"class":103},[29,141156,55376],{"class":35},[29,141158,355],{"class":309},[29,141160,134205],{"class":103},[29,141162,134208],{"class":35},[29,141164,355],{"class":309},[29,141166,134213],{"class":103},[29,141168,51436],{"class":309},[171,141170,141171],{},"tab栏切换需求！！！！！！介绍：",[1638,141173],{"style":126537,"src":141174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[175,141176,141177,141185,141191,141194],{},[178,141178,141179,141182,141183],{},[26,141180,141181],{},"tab","栏的布局是 ",[26,141184,139192],{},[178,141186,141187,141188,141190],{},"有多少个",[26,141189,141181],{},"选项卡，那么对应就有多少个内容",[178,141192,141193],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[178,141195,141196,141197,141200,141201,141203,141204,141206],{},"等后面我们学习了",[26,141198,141199],{},"js","之后，我们就会配合",[26,141202,141199],{},"来实现，",[26,141205,141181],{},"栏的切换",[14,141208,141210],{"id":141209},"_162-列表制作","16.2 列表制作",[275,141212,141214],{"id":141213},"_1621-准备工作","16.2.1 准备工作",[175,141216,141217,141220,141223,141226],{},[178,141218,141219],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[178,141221,141222],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[178,141224,141225],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[178,141227,141228],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[275,141230,141232,141233,101147,141235,141237],{"id":141231},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[26,141234,131686],{},[26,141236,53842],{}," 修改",[1638,141239],{"style":126537,"src":141240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[175,141242,141243],{},[178,141244,141245],{},"秒杀盒子 sk（ second kill ） 定位即可",[171,141247,140051],{},[19,141249,141250],{"className":126681,"code":132113,"language":126683,"meta":24,"style":24},[26,141251,141252,141256,141270,141274,141288,141292,141306,141310,141324,141328],{"__ignoreMap":24},[29,141253,141254],{"class":31,"line":32},[29,141255,132120],{"class":367},[29,141257,141258,141260,141262,141264,141266,141268],{"class":31,"line":43},[29,141259,132125],{"class":35},[29,141261,79936],{"class":309},[29,141263,129041],{"class":39},[29,141265,51566],{"class":309},[29,141267,132134],{"class":39},[29,141269,129611],{"class":309},[29,141271,141272],{"class":31,"line":51},[29,141273,132141],{"class":367},[29,141275,141276,141278,141280,141282,141284,141286],{"class":31,"line":59},[29,141277,132146],{"class":35},[29,141279,79936],{"class":309},[29,141281,129041],{"class":39},[29,141283,51566],{"class":309},[29,141285,54893],{"class":39},[29,141287,129611],{"class":309},[29,141289,141290],{"class":31,"line":67},[29,141291,132161],{"class":367},[29,141293,141294,141296,141298,141300,141302,141304],{"class":31,"line":75},[29,141295,132166],{"class":35},[29,141297,79936],{"class":309},[29,141299,129041],{"class":39},[29,141301,51566],{"class":309},[29,141303,54960],{"class":39},[29,141305,129611],{"class":309},[29,141307,141308],{"class":31,"line":83},[29,141309,132181],{"class":367},[29,141311,141312,141314,141316,141318,141320,141322],{"class":31,"line":158},[29,141313,132186],{"class":35},[29,141315,79936],{"class":309},[29,141317,129041],{"class":39},[29,141319,51566],{"class":309},[29,141321,86362],{"class":39},[29,141323,129611],{"class":309},[29,141325,141326],{"class":31,"line":166},[29,141327,132201],{"class":367},[29,141329,141330,141332,141334,141336,141338,141340],{"class":31,"line":1505},[29,141331,132206],{"class":35},[29,141333,79936],{"class":309},[29,141335,129041],{"class":39},[29,141337,51566],{"class":309},[29,141339,132215],{"class":39},[29,141341,129611],{"class":309},[171,141343,140140],{},[19,141345,141346],{"className":126681,"code":132113,"language":126683,"meta":24,"style":24},[26,141347,141348,141352,141366,141370,141384,141388,141402,141406,141420,141424],{"__ignoreMap":24},[29,141349,141350],{"class":31,"line":32},[29,141351,132120],{"class":367},[29,141353,141354,141356,141358,141360,141362,141364],{"class":31,"line":43},[29,141355,132125],{"class":35},[29,141357,79936],{"class":309},[29,141359,129041],{"class":39},[29,141361,51566],{"class":309},[29,141363,132134],{"class":39},[29,141365,129611],{"class":309},[29,141367,141368],{"class":31,"line":51},[29,141369,132141],{"class":367},[29,141371,141372,141374,141376,141378,141380,141382],{"class":31,"line":59},[29,141373,132146],{"class":35},[29,141375,79936],{"class":309},[29,141377,129041],{"class":39},[29,141379,51566],{"class":309},[29,141381,54893],{"class":39},[29,141383,129611],{"class":309},[29,141385,141386],{"class":31,"line":67},[29,141387,132161],{"class":367},[29,141389,141390,141392,141394,141396,141398,141400],{"class":31,"line":75},[29,141391,132166],{"class":35},[29,141393,79936],{"class":309},[29,141395,129041],{"class":39},[29,141397,51566],{"class":309},[29,141399,54960],{"class":39},[29,141401,129611],{"class":309},[29,141403,141404],{"class":31,"line":83},[29,141405,132181],{"class":367},[29,141407,141408,141410,141412,141414,141416,141418],{"class":31,"line":158},[29,141409,132186],{"class":35},[29,141411,79936],{"class":309},[29,141413,129041],{"class":39},[29,141415,51566],{"class":309},[29,141417,86362],{"class":39},[29,141419,129611],{"class":309},[29,141421,141422],{"class":31,"line":166},[29,141423,132201],{"class":367},[29,141425,141426,141428,141430,141432,141434,141436],{"class":31,"line":1505},[29,141427,132206],{"class":35},[29,141429,79936],{"class":309},[29,141431,129041],{"class":39},[29,141433,51566],{"class":309},[29,141435,132215],{"class":39},[29,141437,129611],{"class":309},[175,141439,141440,141451],{},[178,141441,141442,141443,141446,141447,101147,141449],{},"1 号盒子左侧浮动 ",[26,141444,141445],{},"sk_list"," 里面包含 ",[26,141448,175],{},[26,141450,178],{},[178,141452,141453,141454,141446,141457,101147,141459],{},"2 号盒子左侧浮动 ",[26,141455,141456],{},"sk_con",[26,141458,175],{},[26,141460,178],{},[171,141462,140051],{},[19,141464,141465],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,141466,141467,141473,141483],{"__ignoreMap":24},[29,141468,141469,141471],{"class":31,"line":32},[29,141470,130529],{"class":35},[29,141472,15747],{"class":309},[29,141474,141475,141477,141479,141481],{"class":31,"line":43},[29,141476,131161],{"class":39},[29,141478,51566],{"class":309},[29,141480,23911],{"class":39},[29,141482,1468],{"class":309},[29,141484,141485],{"class":31,"line":51},[29,141486,1741],{"class":309},[171,141488,140140],{},[19,141490,141491],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,141492,141493,141499,141509],{"__ignoreMap":24},[29,141494,141495,141497],{"class":31,"line":32},[29,141496,130529],{"class":35},[29,141498,15747],{"class":309},[29,141500,141501,141503,141505,141507],{"class":31,"line":43},[29,141502,131161],{"class":39},[29,141504,51566],{"class":309},[29,141506,23911],{"class":39},[29,141508,1468],{"class":309},[29,141510,141511],{"class":31,"line":51},[29,141512,1741],{"class":309},[275,141514,141516,141517],{"id":141515},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[26,141518,141519],{},"sk_container",[1638,141521],{"style":126537,"src":141522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[175,141524,141525,141530],{},[178,141526,140705,141527,141529],{},[26,141528,141519],{}," 给宽度 1200，不要给高度",[178,141531,141532],{},"一定不要忘记清除浮动",[171,141534,140051],{},[19,141536,141537],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,141538,141539,141545,141555],{"__ignoreMap":24},[29,141540,141541,141543],{"class":31,"line":32},[29,141542,130529],{"class":35},[29,141544,15747],{"class":309},[29,141546,141547,141549,141551,141553],{"class":31,"line":43},[29,141548,131161],{"class":39},[29,141550,51566],{"class":309},[29,141552,23911],{"class":39},[29,141554,1468],{"class":309},[29,141556,141557],{"class":31,"line":51},[29,141558,1741],{"class":309},[259,141560,141561],{},[178,141562,141563],{},"sk_hd制作",[175,141565,141566],{},[178,141567,140785,141568,141571],{},[26,141569,141570],{},"sk_hd"," ，插入图片即可",[171,141573,140051],{},[19,141575,141576],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,141577,141578],{"__ignoreMap":24},[29,141579,141580,141582,141584,141586,141588,141590,141592,141594,141596,141598,141600,141602],{"class":31,"line":32},[29,141581,1218],{"class":309},[29,141583,1638],{"class":51429},[29,141585,55368],{"class":35},[29,141587,355],{"class":309},[29,141589,134198],{"class":103},[29,141591,55376],{"class":35},[29,141593,355],{"class":309},[29,141595,134205],{"class":103},[29,141597,134208],{"class":35},[29,141599,355],{"class":309},[29,141601,134213],{"class":103},[29,141603,51436],{"class":309},[259,141605,141606],{"start":43},[178,141607,141608],{},"sk_bd制作",[175,141610,141611],{},[178,141612,141613,141614,141617,141618,101147,141620,141622],{},"3 号盒子 ",[26,141615,141616],{},"sk_bd"," ，里面包含很多的 ",[26,141619,175],{},[26,141621,178],{},[175,141623,141624,141633],{},[178,141625,141626,141627,141629,141630,141632],{},"当鼠标移入到 ",[26,141628,178],{}," 上面的时候显示红色的边框，在这里先给 ",[26,141631,178],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[178,141634,141635,141636,141638,141639,141641,141642,141645,141646,141648],{},"由于给每个 ",[26,141637,178],{}," 都设置了外边距，导致一行的最后一个 ",[26,141640,178],{}," 掉了下来，在这里我们利用 ",[26,141643,141644],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[26,141647,178],{},"，去掉外边距就好了",[171,141650,140051],{},[19,141652,141653],{"className":126681,"code":138870,"language":126683,"meta":24,"style":24},[26,141654,141655,141661,141673],{"__ignoreMap":24},[29,141656,141657,141659],{"class":31,"line":32},[29,141658,51740],{"class":51429},[29,141660,15747],{"class":309},[29,141662,141663,141665,141667,141669,141671],{"class":31,"line":43},[29,141664,70599],{"class":39},[29,141666,51566],{"class":309},[29,141668,499],{"class":39},[29,141670,51685],{"class":39},[29,141672,1468],{"class":309},[29,141674,141675],{"class":31,"line":51},[29,141676,1741],{"class":309},[171,141678,140140],{},[19,141680,141681],{"className":126681,"code":138870,"language":126683,"meta":24,"style":24},[26,141682,141683,141689,141701],{"__ignoreMap":24},[29,141684,141685,141687],{"class":31,"line":32},[29,141686,51740],{"class":51429},[29,141688,15747],{"class":309},[29,141690,141691,141693,141695,141697,141699],{"class":31,"line":43},[29,141692,70599],{"class":39},[29,141694,51566],{"class":309},[29,141696,499],{"class":39},[29,141698,51685],{"class":39},[29,141700,1468],{"class":309},[29,141702,141703],{"class":31,"line":51},[29,141704,1741],{"class":309},[14,141706,141708],{"id":141707},"_163-注册页面制作","16.3 注册页面制作",[1638,141710],{"style":126537,"src":141711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[171,141713,141714,141716],{},[457,141715,9200],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1638,141718],{"style":126537,"src":141719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[275,141721,141723],{"id":141722},"_1631-准备工作","16.3.1 准备工作",[175,141725,141726,141729],{},[178,141727,141728],{},"创建register.html，引入 base.css，引入favicon图标",[178,141730,141731],{},"创建register.css ，在html页面进行引入",[275,141733,141735,141736,141738],{"id":141734},"_1632-header-头部实现","16.3.2 ",[26,141737,131686],{}," 头部实现",[175,141740,141741,141744],{},[178,141742,141743],{},"整个内容用 版心 进行包裹",[178,141745,141746],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[171,141748,140051],{},[19,141750,141751],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,141752,141753],{"__ignoreMap":24},[29,141754,141755,141757,141759,141761,141763,141765,141767,141769,141771,141773,141775,141777],{"class":31,"line":32},[29,141756,1218],{"class":309},[29,141758,1638],{"class":51429},[29,141760,55368],{"class":35},[29,141762,355],{"class":309},[29,141764,134198],{"class":103},[29,141766,55376],{"class":35},[29,141768,355],{"class":309},[29,141770,134205],{"class":103},[29,141772,134208],{"class":35},[29,141774,355],{"class":309},[29,141776,134213],{"class":103},[29,141778,51436],{"class":309},[171,141780,140140],{},[19,141782,141783],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,141784,141785],{"__ignoreMap":24},[29,141786,141787,141789,141791,141793,141795,141797,141799,141801,141803,141805,141807,141809],{"class":31,"line":32},[29,141788,1218],{"class":309},[29,141790,1638],{"class":51429},[29,141792,55368],{"class":35},[29,141794,355],{"class":309},[29,141796,134198],{"class":103},[29,141798,55376],{"class":35},[29,141800,355],{"class":309},[29,141802,134205],{"class":103},[29,141804,134208],{"class":35},[29,141806,355],{"class":309},[29,141808,134213],{"class":103},[29,141810,51436],{"class":309},[275,141812,141814,141815,141818],{"id":141813},"_1633-registerarea-主体模块实现","16.3.3 ",[26,141816,141817],{},"registerarea"," 主体模块实现",[1638,141820],{"style":126537,"src":141821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[171,141823,141824],{},"整个大盒子 高度为 522px，设置4个边框",[171,141826,140051],{},[19,141828,141829],{"className":126681,"code":130838,"language":126683,"meta":24,"style":24},[26,141830,141831,141837,141853],{"__ignoreMap":24},[29,141832,141833,141835],{"class":31,"line":32},[29,141834,51740],{"class":51429},[29,141836,15747],{"class":309},[29,141838,141839,141841,141843,141845,141847,141849,141851],{"class":31,"line":43},[29,141840,71025],{"class":39},[29,141842,51566],{"class":309},[29,141844,525],{"class":39},[29,141846,51621],{"class":305},[29,141848,51650],{"class":39},[29,141850,130073],{"class":39},[29,141852,1468],{"class":309},[29,141854,141855],{"class":31,"line":51},[29,141856,1741],{"class":309},[171,141858,140140],{},[19,141860,141861],{"className":126681,"code":130838,"language":126683,"meta":24,"style":24},[26,141862,141863,141869,141885],{"__ignoreMap":24},[29,141864,141865,141867],{"class":31,"line":32},[29,141866,51740],{"class":51429},[29,141868,15747],{"class":309},[29,141870,141871,141873,141875,141877,141879,141881,141883],{"class":31,"line":43},[29,141872,71025],{"class":39},[29,141874,51566],{"class":309},[29,141876,525],{"class":39},[29,141878,51621],{"class":305},[29,141880,51650],{"class":39},[29,141882,130073],{"class":39},[29,141884,1468],{"class":309},[29,141886,141887],{"class":31,"line":51},[29,141888,1741],{"class":309},[171,141890,141891],{},"1号盒子 是一个 h3 标签，放标题",[175,141893,141894],{},[178,141895,141896],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[171,141898,140051],{},[19,141900,141901],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,141902,141903,141909,141919],{"__ignoreMap":24},[29,141904,141905,141907],{"class":31,"line":32},[29,141906,130529],{"class":35},[29,141908,15747],{"class":309},[29,141910,141911,141913,141915,141917],{"class":31,"line":43},[29,141912,131161],{"class":39},[29,141914,51566],{"class":309},[29,141916,23911],{"class":39},[29,141918,1468],{"class":309},[29,141920,141921],{"class":31,"line":51},[29,141922,1741],{"class":309},[171,141924,140140],{},[19,141926,141927],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,141928,141929,141935,141945],{"__ignoreMap":24},[29,141930,141931,141933],{"class":31,"line":32},[29,141932,130529],{"class":35},[29,141934,15747],{"class":309},[29,141936,141937,141939,141941,141943],{"class":31,"line":43},[29,141938,131161],{"class":39},[29,141940,51566],{"class":309},[29,141942,23911],{"class":39},[29,141944,1468],{"class":309},[29,141946,141947],{"class":31,"line":51},[29,141948,1741],{"class":309},[171,141950,141951],{},"2号盒子 里面放注册的内容",[175,141953,141954,141957,141966,141980,141993,141996,141999,142017,142031],{},[178,141955,141956],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[178,141958,141959,141960,141962,141963,141965],{},"里面的内容利用 ",[26,141961,175],{}," 包含 ",[26,141964,178],{}," 来实现的（不需要用表格）",[178,141967,139195,141968,141970,141971,141973,141974,141976,141977,141979],{},[26,141969,178],{}," 里面，左侧放 ",[26,141972,33737],{}," 标签， 中间放",[26,141975,53950],{}," 标签， 右侧放 ",[26,141978,29],{}," 提示信息",[178,141981,141982,141983,141985,141986,141988,141989,141992],{},"左侧 ",[26,141984,33737],{},"里面的文字都是右对齐，我们可以给",[26,141987,33737],{},"设置一个宽度（88px），然后利用",[26,141990,141991],{},"text-align"," 来设置右对齐",[178,141994,141995],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[178,141997,141998],{},"右侧 span修饰一下文字颜色",[178,142000,142001,142002],{},"提示信息的样式优化",[175,142003,142004,142007,142010],{},[178,142005,142006],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[178,142008,142009],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[178,142011,142012,142013,142016],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[26,142014,142015],{},"vertical-algin"," 来设置 图片与文字对齐方式",[178,142018,142019,142020],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[175,142021,142022,142028],{},[178,142023,142024,142025,142027],{},"设置 ",[26,142026,23728],{}," 的 左右 12px 的内边距，设置一下文字颜色",[178,142029,142030],{},"分别设置 背景颜色",[178,142032,142033,142034,142036],{},"同意协议 和 完成注册 都是用 ",[26,142035,178],{}," 进行包裹",[171,142038,140051],{},[19,142040,142041],{"className":126681,"code":140624,"language":126683,"meta":24,"style":24},[26,142042,142043,142049,142059],{"__ignoreMap":24},[29,142044,142045,142047],{"class":31,"line":32},[29,142046,51740],{"class":51429},[29,142048,15747],{"class":309},[29,142050,142051,142053,142055,142057],{"class":31,"line":43},[29,142052,71007],{"class":39},[29,142054,51566],{"class":309},[29,142056,140641],{"class":39},[29,142058,1468],{"class":309},[29,142060,142061],{"class":31,"line":51},[29,142062,1741],{"class":309},[171,142064,140140],{},[19,142066,142067],{"className":126681,"code":140624,"language":126683,"meta":24,"style":24},[26,142068,142069,142075,142085],{"__ignoreMap":24},[29,142070,142071,142073],{"class":31,"line":32},[29,142072,51740],{"class":51429},[29,142074,15747],{"class":309},[29,142076,142077,142079,142081,142083],{"class":31,"line":43},[29,142078,71007],{"class":39},[29,142080,51566],{"class":309},[29,142082,140641],{"class":39},[29,142084,1468],{"class":309},[29,142086,142087],{"class":31,"line":51},[29,142088,1741],{"class":309},[275,142090,142092],{"id":142091},"_1634-底部实现","16.3.4 底部实现",[171,142094,140051],{},[19,142096,142097],{"className":126681,"code":140624,"language":126683,"meta":24,"style":24},[26,142098,142099,142105,142115],{"__ignoreMap":24},[29,142100,142101,142103],{"class":31,"line":32},[29,142102,51740],{"class":51429},[29,142104,15747],{"class":309},[29,142106,142107,142109,142111,142113],{"class":31,"line":43},[29,142108,71007],{"class":39},[29,142110,51566],{"class":309},[29,142112,140641],{"class":39},[29,142114,1468],{"class":309},[29,142116,142117],{"class":31,"line":51},[29,142118,1741],{"class":309},[171,142120,140140],{},[19,142122,142123],{"className":127428,"code":130785,"language":127430,"meta":24,"style":24},[26,142124,142125,142129,142143,142147],{"__ignoreMap":24},[29,142126,142127],{"class":31,"line":32},[29,142128,130792],{"class":367},[29,142130,142131,142133,142135,142137,142139,142141],{"class":31,"line":43},[29,142132,1218],{"class":309},[29,142134,51740],{"class":51429},[29,142136,53615],{"class":35},[29,142138,355],{"class":309},[29,142140,130805],{"class":103},[29,142142,51436],{"class":309},[29,142144,142145],{"class":31,"line":51},[29,142146,130812],{"class":309},[29,142148,142149,142151,142153],{"class":31,"line":59},[29,142150,51914],{"class":309},[29,142152,51740],{"class":51429},[29,142154,51436],{"class":309},[14,142156,142158],{"id":142157},"_164-项目总结","16.4 项目总结",[259,142160,142161,142164,142167,142170],{},[178,142162,142163],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[178,142165,142166],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[178,142168,142169],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[178,142171,142172],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1638,142174],{"style":126537,"src":142175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[259,142177,142178],{"start":67},[178,142179,142180],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1638,142182],{"style":126537,"src":142183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[259,142185,142186],{"start":75},[178,142187,142188],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1638,142190],{"style":126537,"src":142191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[19,142193,142194],{"className":127428,"code":136838,"language":127430,"meta":24,"style":24},[26,142195,142196],{"__ignoreMap":24},[29,142197,142198,142200,142202,142204,142206,142208,142210,142212,142214,142216,142218,142220],{"class":31,"line":32},[29,142199,1218],{"class":309},[29,142201,53950],{"class":51429},[29,142203,53953],{"class":35},[29,142205,355],{"class":309},[29,142207,62828],{"class":103},[29,142209,15095],{"class":35},[29,142211,355],{"class":309},[29,142213,136859],{"class":103},[29,142215,61149],{"class":35},[29,142217,355],{"class":309},[29,142219,136866],{"class":103},[29,142221,51436],{"class":309},[259,142223,142224,142227],{"start":83},[178,142225,142226],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[178,142228,142229],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[223,142231,142232],{},"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":24,"searchDepth":43,"depth":43,"links":142234},[142235,142240,142247,142255],{"id":139861,"depth":43,"text":139862,"children":142236},[142237,142238,142239],{"id":139865,"depth":51,"text":139866},{"id":140596,"depth":51,"text":140597},{"id":140909,"depth":51,"text":140910},{"id":141209,"depth":43,"text":141210,"children":142241},[142242,142243,142245],{"id":141213,"depth":51,"text":141214},{"id":141231,"depth":51,"text":142244},"16.2.2 列表页 header 和 nav 修改",{"id":141515,"depth":51,"text":142246},"16.2.3 列表页主体 sk_container",{"id":141707,"depth":43,"text":141708,"children":142248},[142249,142250,142252,142254],{"id":141722,"depth":51,"text":141723},{"id":141734,"depth":51,"text":142251},"16.3.2 header 头部实现",{"id":141813,"depth":51,"text":142253},"16.3.3 registerarea 主体模块实现",{"id":142091,"depth":51,"text":142092},{"id":142157,"depth":43,"text":142158},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139853,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142262,"title":142263,"body":142264,"description":230,"extension":231,"meta":142372,"navigation":233,"path":142373,"seo":142374,"stem":142375,"__hash__":142376},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142265,"toc":142367},[142266,142269,142273,142276,142279,142288,142297,142301,142306,142313,142331,142334,142337,142340,142343,142346,142349,142352,142355,142358,142361,142364],[10,142267,142263],{"id":142268},"_17-web服务器与网站发布",[14,142270,142272],{"id":142271},"_171-web服务器","17.1 Web服务器",[171,142274,142275],{},"把自己网站上传到服务器上，可以让其他人访问",[1638,142277],{"style":126537,"src":142278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[171,142280,142281,142284,142285],{},[457,142282,142283],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[457,142286,142287],{},"Web 服务器等",[171,142289,142290,142291,101147,142294,25869],{},"根据服务器在网络中所在的位置不同，又可分为 ",[457,142292,142293],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[457,142295,142296],{},"远程服务器",[275,142298,142300],{"id":142299},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[171,142302,142303],{},[457,142304,142305],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[171,142307,142308,142309],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[546,142310,142311],{"href":142311,"rel":142312},"http:\u002F\u002Ffree.3v.do\u002F",[24038],[175,142314,142315,142318,142321,142328],{},[178,142316,142317],{},"去免费空间网站注册账号。",[178,142319,142320],{},"记录下主机名、用户名、密码、域名。",[178,142322,142323,142324,142327],{},"利用 ",[26,142325,142326],{},"utftp"," 软件 上传网站到远程服务器",[178,142329,142330],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[171,142332,142333],{},"使用软件上传，对上传软件文件进行解压",[1638,142335],{"style":126537,"src":142336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1638,142338],{"style":126537,"src":142339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[171,142341,142342],{},"输入刚刚申请的服务器账号信息：",[1638,142344],{"style":126537,"src":142345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1638,142347],{"style":126537,"src":142348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1638,142350],{"style":126537,"src":142351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1638,142353],{"style":126537,"src":142354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[171,142356,142357],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1638,142359],{"style":126537,"src":142360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[171,142362,142363],{},"浏览器输入域名即可访问",[171,142365,142366],{},"首页一定必须是index",{"title":24,"searchDepth":43,"depth":43,"links":142368},[142369],{"id":142271,"depth":43,"text":142272,"children":142370},[142371],{"id":142299,"depth":51,"text":142300},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142263,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142378,"title":142379,"body":142380,"description":230,"extension":231,"meta":143307,"navigation":233,"path":143308,"seo":143309,"stem":143310,"__hash__":143311},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142381,"toc":143290},[142382,142385,142389,142392,142395,142406,142409,142413,142417,142422,142425,142428,142431,142434,142438,142464,142468,142472,142475,142478,142482,142515,142519,142522,142525,142589,142593,142597,142600,142603,142606,142610,142655,142659,142662,142692,142696,142700,142703,142706,142710,142713,142782,142785,142893,142895,142901,142905,142908,142911,143007,143010,143014,143038,143042,143045,143049,143052,143056,143059,143062,143065,143068,143072,143075,143078,143082,143086,143089,143092,143095,143098,143102,143105,143109,143112,143115,143160,143164,143168,143171,143174,143177,143209,143213,143216,143250,143254,143257,143287],[10,142383,142379],{"id":142384},"_18-2d动画与3d转换",[14,142386,142388],{"id":142387},"_181-css3-2d转换","18.1 CSS3 2D转换",[171,142390,142391],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[171,142393,142394],{},"转换（transform）你可以简单理解为变形",[175,142396,142397,142400,142403],{},[178,142398,142399],{},"移动：translate",[178,142401,142402],{},"旋转：rotate",[178,142404,142405],{},"缩放：scale",[1638,142407],{"style":126537,"src":142408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[275,142410,142412],{"id":142411},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22173,142414,142416],{"id":142415},"_18111-translate介绍","18.1.1.1 translate介绍",[171,142418,142419,142420],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[457,142421,133340],{},[1638,142423],{"style":126537,"src":142424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[171,142426,142427],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[171,142429,142430],{},"对于行内元素无效",[171,142432,142433],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22173,142435,142437],{"id":142436},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[19,142439,142440],{"className":126681,"code":138870,"language":126683,"meta":24,"style":24},[26,142441,142442,142448,142460],{"__ignoreMap":24},[29,142443,142444,142446],{"class":31,"line":32},[29,142445,51740],{"class":51429},[29,142447,15747],{"class":309},[29,142449,142450,142452,142454,142456,142458],{"class":31,"line":43},[29,142451,70599],{"class":39},[29,142453,51566],{"class":309},[29,142455,499],{"class":39},[29,142457,51685],{"class":39},[29,142459,1468],{"class":309},[29,142461,142462],{"class":31,"line":51},[29,142463,1741],{"class":309},[275,142465,142467],{"id":142466},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22173,142469,142471],{"id":142470},"_18121-rotate介绍","18.1.2.1 rotate介绍",[171,142473,142474],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1638,142476],{"style":126537,"src":142477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22173,142479,142481],{"id":142480},"_18122-旋转效果","18.1.2.2 旋转效果",[19,142483,142485],{"className":126681,"code":142484,"language":126683,"meta":24,"style":24},"div {\n  transform: rotate(45deg);\n}\n",[26,142486,142487,142493,142511],{"__ignoreMap":24},[29,142488,142489,142491],{"class":31,"line":32},[29,142490,51740],{"class":51429},[29,142492,15747],{"class":309},[29,142494,142495,142497,142499,142502,142504,142506,142509],{"class":31,"line":43},[29,142496,136665],{"class":39},[29,142498,51566],{"class":309},[29,142500,142501],{"class":39},"rotate",[29,142503,310],{"class":309},[29,142505,837],{"class":39},[29,142507,142508],{"class":305},"deg",[29,142510,2894],{"class":309},[29,142512,142513],{"class":31,"line":51},[29,142514,1741],{"class":309},[22173,142516,142518],{"id":142517},"_18123-三角做法","18.1.2.3 三角做法",[171,142520,142521],{},"该下标当经过最外层大盒子时会实现向上反转",[1638,142523],{"style":126537,"src":142524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[19,142526,142527],{"className":126681,"code":135201,"language":126683,"meta":24,"style":24},[26,142528,142529,142533,142539,142549,142559,142575,142585],{"__ignoreMap":24},[29,142530,142531],{"class":31,"line":32},[29,142532,135208],{"class":367},[29,142534,142535,142537],{"class":31,"line":43},[29,142536,135213],{"class":35},[29,142538,15747],{"class":309},[29,142540,142541,142543,142545,142547],{"class":31,"line":51},[29,142542,70697],{"class":39},[29,142544,51566],{"class":309},[29,142546,499],{"class":39},[29,142548,1468],{"class":309},[29,142550,142551,142553,142555,142557],{"class":31,"line":59},[29,142552,70917],{"class":39},[29,142554,51566],{"class":309},[29,142556,499],{"class":39},[29,142558,1468],{"class":309},[29,142560,142561,142563,142565,142567,142569,142571,142573],{"class":31,"line":67},[29,142562,71025],{"class":39},[29,142564,51566],{"class":309},[29,142566,754],{"class":39},[29,142568,51621],{"class":305},[29,142570,51650],{"class":39},[29,142572,64120],{"class":39},[29,142574,1468],{"class":309},[29,142576,142577,142579,142581,142583],{"class":31,"line":75},[29,142578,135256],{"class":39},[29,142580,51566],{"class":309},[29,142582,62498],{"class":39},[29,142584,1468],{"class":309},[29,142586,142587],{"class":31,"line":83},[29,142588,1741],{"class":309},[275,142590,142592],{"id":142591},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22173,142594,142596],{"id":142595},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[171,142598,142599],{},"设置中心点",[1638,142601],{"style":126537,"src":142602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[171,142604,142605],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22173,142607,142609],{"id":142608},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[19,142611,142613],{"className":126681,"code":142612,"language":126683,"meta":24,"style":24},"\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",[26,142614,142615,142620,142626,142641,142646,142651],{"__ignoreMap":24},[29,142616,142617],{"class":31,"line":32},[29,142618,142619],{"class":367},"\u002F* 转换中心点 *\u002F\n",[29,142621,142622,142624],{"class":31,"line":43},[29,142623,51740],{"class":51429},[29,142625,15747],{"class":309},[29,142627,142628,142631,142633,142635,142637,142639],{"class":31,"line":51},[29,142629,142630],{"class":39},"  transform-origin",[29,142632,51566],{"class":309},[29,142634,51721],{"class":39},[29,142636,17319],{"class":39},[29,142638,130544],{"class":309},[29,142640,135354],{"class":367},[29,142642,142643],{"class":31,"line":59},[29,142644,142645],{"class":367},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[29,142647,142648],{"class":31,"line":67},[29,142649,142650],{"class":367},"  \u002F* transform-origin: left top; *\u002F\n",[29,142652,142653],{"class":31,"line":75},[29,142654,1741],{"class":309},[22173,142656,142658],{"id":142657},"_18133-旋转案例","18.1.3.3 旋转案例",[1638,142660],{"style":126537,"src":142661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[19,142663,142664],{"className":126681,"code":142484,"language":126683,"meta":24,"style":24},[26,142665,142666,142672,142688],{"__ignoreMap":24},[29,142667,142668,142670],{"class":31,"line":32},[29,142669,51740],{"class":51429},[29,142671,15747],{"class":309},[29,142673,142674,142676,142678,142680,142682,142684,142686],{"class":31,"line":43},[29,142675,136665],{"class":39},[29,142677,51566],{"class":309},[29,142679,142501],{"class":39},[29,142681,310],{"class":309},[29,142683,837],{"class":39},[29,142685,142508],{"class":305},[29,142687,2894],{"class":309},[29,142689,142690],{"class":31,"line":51},[29,142691,1741],{"class":309},[275,142693,142695],{"id":142694},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22173,142697,142699],{"id":142698},"_18141-scale介绍","18.1.4.1 scale介绍",[171,142701,142702],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1638,142704],{"style":126537,"src":142705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22173,142707,142709],{"id":142708},"_18142-分页按钮","18.1.4.2 分页按钮",[1638,142711],{"style":126537,"src":142712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[19,142714,142716],{"className":126681,"code":142715,"language":126683,"meta":24,"style":24},"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",[26,142717,142718,142724,142740,142744,142748,142753,142759,142773,142778],{"__ignoreMap":24},[29,142719,142720,142722],{"class":31,"line":32},[29,142721,51740],{"class":51429},[29,142723,15747],{"class":309},[29,142725,142726,142728,142730,142733,142735,142738],{"class":31,"line":43},[29,142727,136665],{"class":39},[29,142729,51566],{"class":309},[29,142731,142732],{"class":39},"scale",[29,142734,310],{"class":309},[29,142736,142737],{"class":39},"1.2",[29,142739,2894],{"class":309},[29,142741,142742],{"class":31,"line":51},[29,142743,1741],{"class":309},[29,142745,142746],{"class":31,"line":59},[29,142747,136142],{"class":309},[29,142749,142750],{"class":31,"line":67},[29,142751,142752],{"class":367},"\u002F* 2D 缩放 *\u002F\n",[29,142754,142755,142757],{"class":31,"line":75},[29,142756,51740],{"class":51429},[29,142758,15747],{"class":309},[29,142760,142761,142763,142765,142767,142769,142771],{"class":31,"line":83},[29,142762,136665],{"class":39},[29,142764,51566],{"class":309},[29,142766,142732],{"class":39},[29,142768,310],{"class":309},[29,142770,142737],{"class":39},[29,142772,2894],{"class":309},[29,142774,142775],{"class":31,"line":158},[29,142776,142777],{"class":367},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[29,142779,142780],{"class":31,"line":166},[29,142781,1741],{"class":309},[171,142783,142784],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[19,142786,142788],{"className":126681,"code":142787,"language":126683,"meta":24,"style":24},"\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",[26,142789,142790,142795,142805,142826,142847,142851,142856,142862,142889],{"__ignoreMap":24},[29,142791,142792],{"class":31,"line":32},[29,142793,142794],{"class":367},"\u002F* 定义动画 *\u002F\n",[29,142796,142797,142800,142803],{"class":31,"line":43},[29,142798,142799],{"class":305},"@keyframes",[29,142801,142802],{"class":5391}," move",[29,142804,15747],{"class":309},[29,142806,142807,142810,142812,142814,142816,142819,142821,142823],{"class":31,"line":51},[29,142808,142809],{"class":35},"  0%",[29,142811,79936],{"class":309},[29,142813,48263],{"class":39},[29,142815,51566],{"class":309},[29,142817,142818],{"class":39},"translateX",[29,142820,310],{"class":309},[29,142822,499],{"class":39},[29,142824,142825],{"class":309},"); }\n",[29,142827,142828,142831,142833,142835,142837,142839,142841,142843,142845],{"class":31,"line":59},[29,142829,142830],{"class":35},"  100%",[29,142832,79936],{"class":309},[29,142834,48263],{"class":39},[29,142836,51566],{"class":309},[29,142838,142818],{"class":39},[29,142840,310],{"class":309},[29,142842,619],{"class":39},[29,142844,51621],{"class":305},[29,142846,142825],{"class":309},[29,142848,142849],{"class":31,"line":67},[29,142850,1741],{"class":309},[29,142852,142853],{"class":31,"line":75},[29,142854,142855],{"class":367},"\u002F* 调用动画 *\u002F\n",[29,142857,142858,142860],{"class":31,"line":83},[29,142859,51740],{"class":51429},[29,142861,15747],{"class":309},[29,142863,142864,142867,142869,142871,142873,142875,142877,142879,142881,142884,142887],{"class":31,"line":158},[29,142865,142866],{"class":39},"  animation",[29,142868,51566],{"class":309},[29,142870,135367],{"class":39},[29,142872,25247],{"class":39},[29,142874,1003],{"class":305},[29,142876,78809],{"class":39},[29,142878,4268],{"class":39},[29,142880,1003],{"class":305},[29,142882,142883],{"class":39}," infinite",[29,142885,142886],{"class":39}," alternate",[29,142888,1468],{"class":309},[29,142890,142891],{"class":31,"line":166},[29,142892,1741],{"class":309},[171,142894,142784],{},[19,142896,142899],{"className":142897,"code":142898,"language":5362},[5360],"\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",[26,142900,142898],{"__ignoreMap":24},[22173,142902,142904],{"id":142903},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[171,142906,142907],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1638,142909],{"style":126537,"src":142910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[19,142912,142913],{"className":126681,"code":142787,"language":126683,"meta":24,"style":24},[26,142914,142915,142919,142927,142945,142965,142969,142973,142979,143003],{"__ignoreMap":24},[29,142916,142917],{"class":31,"line":32},[29,142918,142794],{"class":367},[29,142920,142921,142923,142925],{"class":31,"line":43},[29,142922,142799],{"class":305},[29,142924,142802],{"class":5391},[29,142926,15747],{"class":309},[29,142928,142929,142931,142933,142935,142937,142939,142941,142943],{"class":31,"line":51},[29,142930,142809],{"class":35},[29,142932,79936],{"class":309},[29,142934,48263],{"class":39},[29,142936,51566],{"class":309},[29,142938,142818],{"class":39},[29,142940,310],{"class":309},[29,142942,499],{"class":39},[29,142944,142825],{"class":309},[29,142946,142947,142949,142951,142953,142955,142957,142959,142961,142963],{"class":31,"line":59},[29,142948,142830],{"class":35},[29,142950,79936],{"class":309},[29,142952,48263],{"class":39},[29,142954,51566],{"class":309},[29,142956,142818],{"class":39},[29,142958,310],{"class":309},[29,142960,619],{"class":39},[29,142962,51621],{"class":305},[29,142964,142825],{"class":309},[29,142966,142967],{"class":31,"line":67},[29,142968,1741],{"class":309},[29,142970,142971],{"class":31,"line":75},[29,142972,142855],{"class":367},[29,142974,142975,142977],{"class":31,"line":83},[29,142976,51740],{"class":51429},[29,142978,15747],{"class":309},[29,142980,142981,142983,142985,142987,142989,142991,142993,142995,142997,142999,143001],{"class":31,"line":158},[29,142982,142866],{"class":39},[29,142984,51566],{"class":309},[29,142986,135367],{"class":39},[29,142988,25247],{"class":39},[29,142990,1003],{"class":305},[29,142992,78809],{"class":39},[29,142994,4268],{"class":39},[29,142996,1003],{"class":305},[29,142998,142883],{"class":39},[29,143000,142886],{"class":39},[29,143002,1468],{"class":309},[29,143004,143005],{"class":31,"line":166},[29,143006,1741],{"class":309},[171,143008,143009],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[275,143011,143013],{"id":143012},"_1823-知识点回顾","18.2.3 知识点回顾",[19,143015,143016],{"className":126681,"code":128850,"language":126683,"meta":24,"style":24},[26,143017,143018,143024,143034],{"__ignoreMap":24},[29,143019,143020,143022],{"class":31,"line":32},[29,143021,51740],{"class":51429},[29,143023,15747],{"class":309},[29,143025,143026,143028,143030,143032],{"class":31,"line":43},[29,143027,128863],{"class":39},[29,143029,51566],{"class":309},[29,143031,61865],{"class":39},[29,143033,1468],{"class":309},[29,143035,143036],{"class":31,"line":51},[29,143037,1741],{"class":309},[14,143039,143041],{"id":143040},"_183-3d-转换","18.3 3D 转换",[171,143043,143044],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[275,143046,143048],{"id":143047},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1638,143050],{"style":126537,"src":143051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[275,143053,143055],{"id":143054},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1638,143057],{"style":126537,"src":143058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[171,143060,143061],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[171,143063,143064],{},"translate3d的效果需要搭配透视perspective来使用",[1638,143066],{"style":126537,"src":143067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[275,143069,143071],{"id":143070},"_1833-透视-perspective","18.3.3 透视 perspective",[1638,143073],{"style":126537,"src":143074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[171,143076,143077],{},"透视写在父盒子上，单位为像素",[275,143079,143081],{"id":143080},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22173,143083,143085],{"id":143084},"_18341-分开解释","18.3.4.1 分开解释",[1638,143087],{"style":126537,"src":143088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1638,143090],{"style":126537,"src":143091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1638,143093],{"style":126537,"src":143094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[171,143096,143097],{},"总结来说就是左手原则",[22173,143099,143101],{"id":143100},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1638,143103],{"style":126537,"src":143104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[275,143106,143108],{"id":143107},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1638,143110],{"style":126537,"src":143111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1638,143113],{"style":126537,"src":143114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[19,143116,143118],{"className":126681,"code":143117,"language":126683,"meta":24,"style":24},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[26,143119,143120,143126,143139,143156],{"__ignoreMap":24},[29,143121,143122,143124],{"class":31,"line":32},[29,143123,51740],{"class":51429},[29,143125,15747],{"class":309},[29,143127,143128,143131,143133,143135,143137],{"class":31,"line":43},[29,143129,143130],{"class":39},"  perspective",[29,143132,51566],{"class":309},[29,143134,65203],{"class":39},[29,143136,51621],{"class":305},[29,143138,1468],{"class":309},[29,143140,143141,143143,143145,143148,143150,143152,143154],{"class":31,"line":51},[29,143142,136665],{"class":39},[29,143144,51566],{"class":309},[29,143146,143147],{"class":39},"rotateX",[29,143149,310],{"class":309},[29,143151,837],{"class":39},[29,143153,142508],{"class":305},[29,143155,2894],{"class":309},[29,143157,143158],{"class":31,"line":59},[29,143159,1741],{"class":309},[275,143161,143163],{"id":143162},"_1836-案例","18.3.6 案例",[22173,143165,143167],{"id":143166},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1638,143169],{"style":126537,"src":143170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1638,143172],{"style":126537,"src":143173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1638,143175],{"style":126537,"src":143176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[19,143178,143180],{"className":126681,"code":143179,"language":126683,"meta":24,"style":24},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[26,143181,143182,143187,143193,143205],{"__ignoreMap":24},[29,143183,143184],{"class":31,"line":32},[29,143185,143186],{"class":367},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[29,143188,143189,143191],{"class":31,"line":43},[29,143190,133678],{"class":35},[29,143192,15747],{"class":309},[29,143194,143195,143197,143199,143201,143203],{"class":31,"line":51},[29,143196,143130],{"class":39},[29,143198,51566],{"class":309},[29,143200,65203],{"class":39},[29,143202,51621],{"class":305},[29,143204,1468],{"class":309},[29,143206,143207],{"class":31,"line":59},[29,143208,1741],{"class":309},[22173,143210,143212],{"id":143211},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1638,143214],{"style":126537,"src":143215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[19,143217,143218],{"className":127428,"code":130785,"language":127430,"meta":24,"style":24},[26,143219,143220,143224,143238,143242],{"__ignoreMap":24},[29,143221,143222],{"class":31,"line":32},[29,143223,130792],{"class":367},[29,143225,143226,143228,143230,143232,143234,143236],{"class":31,"line":43},[29,143227,1218],{"class":309},[29,143229,51740],{"class":51429},[29,143231,53615],{"class":35},[29,143233,355],{"class":309},[29,143235,130805],{"class":103},[29,143237,51436],{"class":309},[29,143239,143240],{"class":31,"line":51},[29,143241,130812],{"class":309},[29,143243,143244,143246,143248],{"class":31,"line":59},[29,143245,51914],{"class":309},[29,143247,51740],{"class":51429},[29,143249,51436],{"class":309},[22173,143251,143253],{"id":143252},"_18363-旋转木马","18.3.6.3 旋转木马",[1638,143255],{"style":126537,"src":143256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[19,143258,143259],{"className":126681,"code":142484,"language":126683,"meta":24,"style":24},[26,143260,143261,143267,143283],{"__ignoreMap":24},[29,143262,143263,143265],{"class":31,"line":32},[29,143264,51740],{"class":51429},[29,143266,15747],{"class":309},[29,143268,143269,143271,143273,143275,143277,143279,143281],{"class":31,"line":43},[29,143270,136665],{"class":39},[29,143272,51566],{"class":309},[29,143274,142501],{"class":39},[29,143276,310],{"class":309},[29,143278,837],{"class":39},[29,143280,142508],{"class":305},[29,143282,2894],{"class":309},[29,143284,143285],{"class":31,"line":51},[29,143286,1741],{"class":309},[223,143288,143289],{},"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":24,"searchDepth":43,"depth":43,"links":143291},[143292,143299],{"id":142387,"depth":43,"text":142388,"children":143293},[143294,143295,143296,143297,143298],{"id":142411,"depth":51,"text":142412},{"id":142466,"depth":51,"text":142467},{"id":142591,"depth":51,"text":142592},{"id":142694,"depth":51,"text":142695},{"id":143012,"depth":51,"text":143013},{"id":143040,"depth":43,"text":143041,"children":143300},[143301,143302,143303,143304,143305,143306],{"id":143047,"depth":51,"text":143048},{"id":143054,"depth":51,"text":143055},{"id":143070,"depth":51,"text":143071},{"id":143080,"depth":51,"text":143081},{"id":143107,"depth":51,"text":143108},{"id":143162,"depth":51,"text":143163},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142379,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143313,"title":143314,"body":143315,"description":230,"extension":231,"meta":143518,"navigation":233,"path":143519,"seo":143520,"stem":143521,"__hash__":143522},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143316,"toc":143507},[143317,143320,143324,143327,143330,143334,143337,143340,143343,143347,143350,143354,143357,143361,143364,143368,143382,143386,143411,143414,143417,143434,143438,143442,143445,143448,143452,143455,143458,143476,143480,143483,143497,143501,143504],[10,143318,143314],{"id":143319},"_19-移动端基础-前缀现状与视口",[14,143321,143323],{"id":143322},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1638,143325],{"style":126537,"src":143326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[171,143328,143329],{},"意思就是加个前缀，增加兼容性",[14,143331,143333],{"id":143332},"_192-移动端现状认识","19.2 移动端现状认识",[1638,143335],{"style":126537,"src":143336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[171,143338,143339],{},"调试方法：",[1638,143341],{"style":126537,"src":143342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143344,143346],{"id":143345},"_193-视口","19.3 视口",[171,143348,143349],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[275,143351,143353],{"id":143352},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1638,143355],{"style":126537,"src":143356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[275,143358,143360],{"id":143359},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1638,143362],{"style":126537,"src":143363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[275,143365,143367],{"id":143366},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[175,143369,143370,143373,143376,143379],{},[178,143371,143372],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[178,143374,143375],{},"理想视口，对设备来讲，是最理想的视口尺寸",[178,143377,143378],{},"需要手动添写meta视口标签通知浏览器操作",[178,143380,143381],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[275,143383,143385],{"id":143384},"_1934-meta视口标签","19.3.4 meta视口标签",[19,143387,143389],{"className":127428,"code":143388,"language":127430,"meta":24,"style":24},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[26,143390,143391],{"__ignoreMap":24},[29,143392,143393,143395,143397,143399,143401,143403,143405,143407,143409],{"class":31,"line":32},[29,143394,1218],{"class":309},[29,143396,51473],{"class":51429},[29,143398,15095],{"class":35},[29,143400,355],{"class":309},[29,143402,51520],{"class":103},[29,143404,51500],{"class":35},[29,143406,355],{"class":309},[29,143408,51527],{"class":103},[29,143410,51436],{"class":309},[1638,143412],{"style":126537,"src":143413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[171,143415,143416],{},"标准视口设置：",[259,143418,143419,143422,143425,143428,143431],{},[178,143420,143421],{},"视口宽度和设备保持一致",[178,143423,143424],{},"视口的默认缩放比例1.0",[178,143426,143427],{},"不允许用户自行缩放",[178,143429,143430],{},"最大允许的缩放比例1.0",[178,143432,143433],{},"最小允许的缩放比例1.0",[275,143435,143437],{"id":143436},"_1935-二倍图","19.3.5 二倍图",[22173,143439,143441],{"id":143440},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1638,143443],{"style":126537,"src":143444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1638,143446],{"style":126537,"src":143447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22173,143449,143451],{"id":143450},"_19352-多倍图","19.3.5.2 多倍图",[1638,143453],{"style":126537,"src":143454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[171,143456,143457],{},"二倍图法，代码如下：",[19,143459,143461],{"className":126681,"code":143460,"language":126683,"meta":24,"style":24},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[26,143462,143463,143468],{"__ignoreMap":24},[29,143464,143465],{"class":31,"line":32},[29,143466,143467],{"class":367},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[29,143469,143470,143473],{"class":31,"line":43},[29,143471,143472],{"class":51429},"background-size",[29,143474,143475],{"class":309},": 50% 50%;\n",[22173,143477,143479],{"id":143478},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1638,143481],{"style":126537,"src":143482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[259,143484,143485,143488,143491,143494],{},[178,143486,143487],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[178,143489,143490],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[178,143492,143493],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[178,143495,143496],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22173,143498,143500],{"id":143499},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1638,143502],{"style":126537,"src":143503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[223,143505,143506],{},"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":24,"searchDepth":43,"depth":43,"links":143508},[143509,143510,143511],{"id":143322,"depth":43,"text":143323},{"id":143332,"depth":43,"text":143333},{"id":143345,"depth":43,"text":143346,"children":143512},[143513,143514,143515,143516,143517],{"id":143352,"depth":51,"text":143353},{"id":143359,"depth":51,"text":143360},{"id":143366,"depth":51,"text":143367},{"id":143384,"depth":51,"text":143385},{"id":143436,"depth":51,"text":143437},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143314,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143524,"title":143525,"body":143526,"description":230,"extension":231,"meta":144403,"navigation":233,"path":144404,"seo":144405,"stem":144406,"__hash__":144407},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143527,"toc":144387},[143528,143531,143535,143542,143545,143552,143555,143560,143563,143567,143571,143578,143581,143584,143588,143591,143594,143597,143600,143603,143607,143610,143614,143616,143619,143622,143625,143628,143630,143633,143635,143665,143667,143697,143701,143704,143708,143711,143728,143731,143734,143810,143812,143815,143818,143821,143824,143826,143829,143832,143836,143858,143861,143864,143868,143871,143877,143880,143884,143887,143890,143894,143897,143900,143903,143907,143910,143913,143916,143919,143923,143926,143930,143937,143940,143943,143946,143949,143959,143962,143965,143972,143975,143979,143982,143985,143989,143992,143995,143998,144043,144046,144049,144052,144054,144183,144185,144223,144226,144229,144231,144349,144351,144385],[10,143529,143525],{"id":143530},"_20-移动端布局实战上篇",[14,143532,143534],{"id":143533},"_201-移动端主流方案","20.1 移动端主流方案",[259,143536,143537],{},[178,143538,143539],{},[457,143540,143541],{},"单独移动端页面（主流）",[1638,143543],{"style":126537,"src":143544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[259,143546,143547],{"start":43},[178,143548,143549],{},[457,143550,143551],{},"响应式兼容PC移动端",[1638,143553],{"style":126537,"src":143554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[259,143556,143557],{"start":51},[178,143558,143559],{},"两种页面选型布局方式",[1638,143561],{"style":126537,"src":143562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143564,143566],{"id":143565},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[275,143568,143570],{"id":143569},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[171,143572,143573,143574],{},"官网地址： ",[546,143575,143576],{"href":143576,"rel":143577},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24038],[1638,143579],{"style":126537,"src":143580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1638,143582],{"style":126537,"src":143583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[275,143585,143587],{"id":143586},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1638,143589],{"style":126537,"src":143590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1638,143592],{"style":126537,"src":143593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[171,143595,143596],{},"去除高亮：",[171,143598,143599],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[171,143601,143602],{},"-webkit- tap-highlight-color: transparent;",[14,143604,143606],{"id":143605},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1638,143608],{"style":126537,"src":143609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143611,143613],{"id":143612},"_204-流式布局案例","20.4 流式布局案例",[171,143615,339],{},[171,143617,143618],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[171,143620,143621],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[171,143623,143624],{},"图片格式：",[1638,143626],{"style":126537,"src":143627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[171,143629,135724],{},[1638,143631],{"style":126537,"src":143632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[171,143634,140051],{},[19,143636,143637],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,143638,143639],{"__ignoreMap":24},[29,143640,143641,143643,143645,143647,143649,143651,143653,143655,143657,143659,143661,143663],{"class":31,"line":32},[29,143642,1218],{"class":309},[29,143644,1638],{"class":51429},[29,143646,55368],{"class":35},[29,143648,355],{"class":309},[29,143650,134198],{"class":103},[29,143652,55376],{"class":35},[29,143654,355],{"class":309},[29,143656,134205],{"class":103},[29,143658,134208],{"class":35},[29,143660,355],{"class":309},[29,143662,134213],{"class":103},[29,143664,51436],{"class":309},[171,143666,140140],{},[19,143668,143669],{"className":127428,"code":134183,"language":127430,"meta":24,"style":24},[26,143670,143671],{"__ignoreMap":24},[29,143672,143673,143675,143677,143679,143681,143683,143685,143687,143689,143691,143693,143695],{"class":31,"line":32},[29,143674,1218],{"class":309},[29,143676,1638],{"class":51429},[29,143678,55368],{"class":35},[29,143680,355],{"class":309},[29,143682,134198],{"class":103},[29,143684,55376],{"class":35},[29,143686,355],{"class":309},[29,143688,134205],{"class":103},[29,143690,134208],{"class":35},[29,143692,355],{"class":309},[29,143694,134213],{"class":103},[29,143696,51436],{"class":309},[14,143698,143700],{"id":143699},"_205-flex布局","20.5 flex布局",[1638,143702],{"style":126537,"src":143703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[275,143705,143707],{"id":143706},"_2051-布局原理","20.5.1 布局原理",[171,143709,143710],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[175,143712,143713,143716,143719,143722,143725],{},[178,143714,143715],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[178,143717,143718],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[178,143720,143721],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[178,143723,143724],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[178,143726,143727],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[171,143729,143730],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[171,143732,143733],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[19,143735,143737],{"className":126681,"code":143736,"language":126683,"meta":24,"style":24},"\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",[26,143738,143739,143744,143751,143761,143773,143784,143795,143806],{"__ignoreMap":24},[29,143740,143741],{"class":31,"line":32},[29,143742,143743],{"class":367},"\u002F* Flex 弹性布局 *\u002F\n",[29,143745,143746,143749],{"class":31,"line":43},[29,143747,143748],{"class":35},".container",[29,143750,15747],{"class":309},[29,143752,143753,143755,143757,143759],{"class":31,"line":51},[29,143754,128297],{"class":39},[29,143756,51566],{"class":309},[29,143758,51606],{"class":39},[29,143760,1468],{"class":309},[29,143762,143763,143766,143768,143771],{"class":31,"line":59},[29,143764,143765],{"class":39},"  flex-direction",[29,143767,51566],{"class":309},[29,143769,143770],{"class":39},"row",[29,143772,1468],{"class":309},[29,143774,143775,143778,143780,143782],{"class":31,"line":67},[29,143776,143777],{"class":39},"  justify-content",[29,143779,51566],{"class":309},[29,143781,51797],{"class":39},[29,143783,1468],{"class":309},[29,143785,143786,143789,143791,143793],{"class":31,"line":75},[29,143787,143788],{"class":39},"  align-items",[29,143790,51566],{"class":309},[29,143792,51721],{"class":39},[29,143794,1468],{"class":309},[29,143796,143797,143800,143802,143804],{"class":31,"line":83},[29,143798,143799],{"class":39},"  flex-wrap",[29,143801,51566],{"class":309},[29,143803,78739],{"class":39},[29,143805,1468],{"class":309},[29,143807,143808],{"class":31,"line":158},[29,143809,1741],{"class":309},[171,143811,70582],{},[171,143813,143814],{},".form-item .male-label {",[171,143816,143817],{},"   margin-right: 20px;",[171,143819,143820],{},"   display: inline-flex;",[171,143822,143823],{},"   align-items: center;",[171,143825,1254],{},[1638,143827],{"style":126537,"src":143828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1638,143830],{"style":126537,"src":143831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[275,143833,143835],{"id":143834},"_2052-常见父项属性","20.5.2 常见父项属性",[259,143837,143838,143841,143844,143847,143850,143853,143856],{},[178,143839,143840],{},"flex-direction：设置主轴的方向",[178,143842,143843],{},"justify-content：设置主轴上的子元素排列方式",[178,143845,143846],{},"flex-wrap：设置子元素是否换行",[178,143848,143849],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[178,143851,143852],{},"align-items：设置侧轴上的子元素排列方式（单行）",[178,143854,143855],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[178,143857,143840],{},[1638,143859],{"style":126537,"src":143860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1638,143862],{"style":126537,"src":143863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[259,143865,143866],{"start":43},[178,143867,143843],{},[1638,143869],{"style":126537,"src":143870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[171,143872,143873,143876],{},[26,143874,143875],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[171,143878,143879],{},"跟着主轴走",[259,143881,143882],{"start":51},[178,143883,143846],{},[1638,143885],{"style":126537,"src":143886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[171,143888,143889],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[259,143891,143892],{"start":59},[178,143893,143849],{},[1638,143895],{"style":126537,"src":143896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[171,143898,143899],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[171,143901,143902],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[259,143904,143905],{"start":67},[178,143906,143852],{},[1638,143908],{"style":126537,"src":143909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[171,143911,143912],{},"align-items与align-content之间的区别：",[171,143914,143915],{},"单找items，多找content",[1638,143917],{"style":126537,"src":143918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[259,143920,143921],{"start":75},[178,143922,143855],{},[1638,143924],{"style":126537,"src":143925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[275,143927,143929],{"id":143928},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[259,143931,143932],{},[178,143933,143934],{},[457,143935,143936],{},"flex 属性",[171,143938,143939],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1638,143941],{"style":126537,"src":143942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[171,143944,143945],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[171,143947,143948],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[259,143950,143951],{"start":43},[178,143952,143953,13970,143956],{},[457,143954,143955],{},"align-self",[457,143957,143958],{},"控制子项自己在侧轴上的排列方式",[1638,143960],{"style":126537,"src":143961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[171,143963,143964],{},"单个子盒子在父盒子侧轴上的排列方式",[259,143966,143967],{"start":51},[178,143968,143969,143971],{},[457,143970,95426],{}," 属性定义项目的排列顺序",[1638,143973],{"style":126537,"src":143974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[275,143976,143978],{"id":143977},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1638,143980],{"style":126537,"src":143981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[171,143983,143984],{},"必须要添加浏览器的私有前缀",[275,143986,143988],{"id":143987},"_2055-携程网首页案例","20.5.5 携程网首页案例",[171,143990,143991],{},"学到最重要的知识：",[171,143993,143994],{},"flex处理这样的布局思路",[1638,143996],{"style":126537,"src":143997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[19,143999,144001],{"className":126681,"code":144000,"language":126683,"meta":24,"style":24},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[26,144002,144003,144009,144019,144029,144039],{"__ignoreMap":24},[29,144004,144005,144007],{"class":31,"line":32},[29,144006,143748],{"class":35},[29,144008,15747],{"class":309},[29,144010,144011,144013,144015,144017],{"class":31,"line":43},[29,144012,128297],{"class":39},[29,144014,51566],{"class":309},[29,144016,51606],{"class":39},[29,144018,1468],{"class":309},[29,144020,144021,144023,144025,144027],{"class":31,"line":51},[29,144022,143777],{"class":39},[29,144024,51566],{"class":309},[29,144026,51721],{"class":39},[29,144028,1468],{"class":309},[29,144030,144031,144033,144035,144037],{"class":31,"line":59},[29,144032,143788],{"class":39},[29,144034,51566],{"class":309},[29,144036,51721],{"class":39},[29,144038,1468],{"class":309},[29,144040,144041],{"class":31,"line":67},[29,144042,1741],{"class":309},[171,144044,144045],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[171,144047,144048],{},"使用属性选择器",[1638,144050],{"style":126537,"src":144051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[171,144053,69018],{},[19,144055,144057],{"className":127428,"code":144056,"language":127430,"meta":24,"style":24},"\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",[26,144058,144059,144064,144078,144083,144103,144108,144127,144132,144151,144156,144175],{"__ignoreMap":24},[29,144060,144061],{"class":31,"line":32},[29,144062,144063],{"class":367},"\u003C!-- 携程网移动端案例结构 -->\n",[29,144065,144066,144068,144070,144072,144074,144076],{"class":31,"line":43},[29,144067,1218],{"class":309},[29,144069,51740],{"class":51429},[29,144071,53615],{"class":35},[29,144073,355],{"class":309},[29,144075,92452],{"class":103},[29,144077,51436],{"class":309},[29,144079,144080],{"class":31,"line":51},[29,144081,144082],{"class":367},"  \u003C!-- 搜索栏 -->\n",[29,144084,144085,144087,144089,144091,144093,144096,144099,144101],{"class":31,"line":59},[29,144086,52273],{"class":309},[29,144088,51740],{"class":51429},[29,144090,53615],{"class":35},[29,144092,355],{"class":309},[29,144094,144095],{"class":103},"\"search-index\"",[29,144097,144098],{"class":309},">...\u003C\u002F",[29,144100,51740],{"class":51429},[29,144102,51436],{"class":309},[29,144104,144105],{"class":31,"line":67},[29,144106,144107],{"class":367},"  \u003C!-- 焦点图 -->\n",[29,144109,144110,144112,144114,144116,144118,144121,144123,144125],{"class":31,"line":75},[29,144111,52273],{"class":309},[29,144113,51740],{"class":51429},[29,144115,53615],{"class":35},[29,144117,355],{"class":309},[29,144119,144120],{"class":103},"\"focus\"",[29,144122,144098],{"class":309},[29,144124,51740],{"class":51429},[29,144126,51436],{"class":309},[29,144128,144129],{"class":31,"line":83},[29,144130,144131],{"class":367},"  \u003C!-- 主导航 -->\n",[29,144133,144134,144136,144138,144140,144142,144145,144147,144149],{"class":31,"line":158},[29,144135,52273],{"class":309},[29,144137,51740],{"class":51429},[29,144139,53615],{"class":35},[29,144141,355],{"class":309},[29,144143,144144],{"class":103},"\"local-nav\"",[29,144146,144098],{"class":309},[29,144148,51740],{"class":51429},[29,144150,51436],{"class":309},[29,144152,144153],{"class":31,"line":166},[29,144154,144155],{"class":367},"  \u003C!-- 子导航 -->\n",[29,144157,144158,144160,144162,144164,144166,144169,144171,144173],{"class":31,"line":1505},[29,144159,52273],{"class":309},[29,144161,51740],{"class":51429},[29,144163,53615],{"class":35},[29,144165,355],{"class":309},[29,144167,144168],{"class":103},"\"nav-common\"",[29,144170,144098],{"class":309},[29,144172,51740],{"class":51429},[29,144174,51436],{"class":309},[29,144176,144177,144179,144181],{"class":31,"line":1788},[29,144178,51914],{"class":309},[29,144180,51740],{"class":51429},[29,144182,51436],{"class":309},[171,144184,70582],{},[19,144186,144187],{"className":126681,"code":137133,"language":126683,"meta":24,"style":24},[26,144188,144189,144203,144219],{"__ignoreMap":24},[29,144190,144191,144193,144195,144197,144199,144201],{"class":31,"line":32},[29,144192,53950],{"class":51429},[29,144194,1198],{"class":309},[29,144196,103236],{"class":35},[29,144198,355],{"class":305},[29,144200,62828],{"class":103},[29,144202,137150],{"class":309},[29,144204,144205,144207,144209,144211,144213,144215,144217],{"class":31,"line":43},[29,144206,71025],{"class":39},[29,144208,51566],{"class":309},[29,144210,525],{"class":39},[29,144212,51621],{"class":305},[29,144214,51650],{"class":39},[29,144216,130261],{"class":39},[29,144218,1468],{"class":309},[29,144220,144221],{"class":31,"line":51},[29,144222,1741],{"class":309},[171,144224,144225],{},"总代码和效果展示：",[1638,144227],{"style":126537,"src":144228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[171,144230,69018],{},[19,144232,144233],{"className":127428,"code":144056,"language":127430,"meta":24,"style":24},[26,144234,144235,144239,144253,144257,144275,144279,144297,144301,144319,144323,144341],{"__ignoreMap":24},[29,144236,144237],{"class":31,"line":32},[29,144238,144063],{"class":367},[29,144240,144241,144243,144245,144247,144249,144251],{"class":31,"line":43},[29,144242,1218],{"class":309},[29,144244,51740],{"class":51429},[29,144246,53615],{"class":35},[29,144248,355],{"class":309},[29,144250,92452],{"class":103},[29,144252,51436],{"class":309},[29,144254,144255],{"class":31,"line":51},[29,144256,144082],{"class":367},[29,144258,144259,144261,144263,144265,144267,144269,144271,144273],{"class":31,"line":59},[29,144260,52273],{"class":309},[29,144262,51740],{"class":51429},[29,144264,53615],{"class":35},[29,144266,355],{"class":309},[29,144268,144095],{"class":103},[29,144270,144098],{"class":309},[29,144272,51740],{"class":51429},[29,144274,51436],{"class":309},[29,144276,144277],{"class":31,"line":67},[29,144278,144107],{"class":367},[29,144280,144281,144283,144285,144287,144289,144291,144293,144295],{"class":31,"line":75},[29,144282,52273],{"class":309},[29,144284,51740],{"class":51429},[29,144286,53615],{"class":35},[29,144288,355],{"class":309},[29,144290,144120],{"class":103},[29,144292,144098],{"class":309},[29,144294,51740],{"class":51429},[29,144296,51436],{"class":309},[29,144298,144299],{"class":31,"line":83},[29,144300,144131],{"class":367},[29,144302,144303,144305,144307,144309,144311,144313,144315,144317],{"class":31,"line":158},[29,144304,52273],{"class":309},[29,144306,51740],{"class":51429},[29,144308,53615],{"class":35},[29,144310,355],{"class":309},[29,144312,144144],{"class":103},[29,144314,144098],{"class":309},[29,144316,51740],{"class":51429},[29,144318,51436],{"class":309},[29,144320,144321],{"class":31,"line":166},[29,144322,144155],{"class":367},[29,144324,144325,144327,144329,144331,144333,144335,144337,144339],{"class":31,"line":1505},[29,144326,52273],{"class":309},[29,144328,51740],{"class":51429},[29,144330,53615],{"class":35},[29,144332,355],{"class":309},[29,144334,144168],{"class":103},[29,144336,144098],{"class":309},[29,144338,51740],{"class":51429},[29,144340,51436],{"class":309},[29,144342,144343,144345,144347],{"class":31,"line":1788},[29,144344,51914],{"class":309},[29,144346,51740],{"class":51429},[29,144348,51436],{"class":309},[171,144350,70582],{},[19,144352,144353],{"className":127428,"code":130785,"language":127430,"meta":24,"style":24},[26,144354,144355,144359,144373,144377],{"__ignoreMap":24},[29,144356,144357],{"class":31,"line":32},[29,144358,130792],{"class":367},[29,144360,144361,144363,144365,144367,144369,144371],{"class":31,"line":43},[29,144362,1218],{"class":309},[29,144364,51740],{"class":51429},[29,144366,53615],{"class":35},[29,144368,355],{"class":309},[29,144370,130805],{"class":103},[29,144372,51436],{"class":309},[29,144374,144375],{"class":31,"line":51},[29,144376,130812],{"class":309},[29,144378,144379,144381,144383],{"class":31,"line":59},[29,144380,51914],{"class":309},[29,144382,51740],{"class":51429},[29,144384,51436],{"class":309},[223,144386,138082],{},{"title":24,"searchDepth":43,"depth":43,"links":144388},[144389,144390,144394,144395,144396],{"id":143533,"depth":43,"text":143534},{"id":143565,"depth":43,"text":143566,"children":144391},[144392,144393],{"id":143569,"depth":51,"text":143570},{"id":143586,"depth":51,"text":143587},{"id":143605,"depth":43,"text":143606},{"id":143612,"depth":43,"text":143613},{"id":143699,"depth":43,"text":143700,"children":144397},[144398,144399,144400,144401,144402],{"id":143706,"depth":51,"text":143707},{"id":143834,"depth":51,"text":143835},{"id":143928,"depth":51,"text":143929},{"id":143977,"depth":51,"text":143978},{"id":143987,"depth":51,"text":143988},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143525,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144409,"title":144410,"body":144411,"description":230,"extension":231,"meta":145638,"navigation":233,"path":145639,"seo":145640,"stem":145641,"__hash__":145642},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144412,"toc":145616},[144413,144416,144420,144424,144427,144430,144434,144439,144442,144445,144448,144451,144454,144511,144514,144519,144522,144525,144529,144540,144544,144547,144550,144557,144562,144566,144569,144575,144578,144582,144585,144592,144595,144598,144605,144608,144615,144618,144621,144628,144631,144634,144636,144653,144657,144660,144663,144666,144670,144673,144676,144679,144682,144685,144688,144690,144693,144696,144758,144761,144871,144878,144884,144887,144890,144894,144897,144901,144906,144909,144916,144919,144925,144930,144933,144936,144939,144942,144945,144948,144951,144954,145010,145012,145038,145042,145045,145048,145051,145059,145062,145065,145069,145125,145128,145132,145138,145149,145152,145157,145160,145163,145169,145172,145175,145178,145181,145184,145187,145190,145193,145218,145224,145227,145230,145233,145236,145239,145242,145247,145250,145253,145256,145264,145267,145274,145277,145280,145282,145306,145308,145311,145314,145317,145320,145323,145326,145329,145363,145366,145369,145403,145410,145413,145416,145419,145422,145425,145428,145435,145438,145441,145444,145447,145454,145457,145460,145467,145470,145473,145477,145480,145483,145486,145489,145492,145495,145498,145501,145503,145527,145529,145553,145557,145568,145571,145574,145577,145580,145583,145586,145589,145592,145595,145598,145601,145604,145607,145610,145613],[10,144414,144410],{"id":144415},"_21-移动端布局实战下篇",[14,144417,144419],{"id":144418},"_211-rem适配布局","21.1 rem适配布局",[275,144421,144423],{"id":144422},"_2111-rem单位","21.1.1 rem单位",[1638,144425],{"style":126537,"src":144426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[171,144428,144429],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[275,144431,144433],{"id":144432},"_2112-媒体查询","21.1.2 媒体查询",[259,144435,144436],{},[178,144437,144438],{},"参数介绍",[1638,144440],{"style":126537,"src":144441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1638,144443],{"style":126537,"src":144444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1638,144446],{"style":126537,"src":144447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1638,144449],{"style":126537,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1638,144452],{"style":126537,"src":144453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[19,144455,144457],{"className":126681,"code":144456,"language":126683,"meta":24,"style":24},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[26,144458,144459,144464,144483,144490,144503,144507],{"__ignoreMap":24},[29,144460,144461],{"class":31,"line":32},[29,144462,144463],{"class":367},"\u002F* 媒体查询 *\u002F\n",[29,144465,144466,144469,144471,144474,144476,144479,144481],{"class":31,"line":43},[29,144467,144468],{"class":305},"@media",[29,144470,1834],{"class":309},[29,144472,144473],{"class":39},"max-width",[29,144475,51566],{"class":309},[29,144477,144478],{"class":39},"768",[29,144480,51621],{"class":305},[29,144482,12617],{"class":309},[29,144484,144485,144488],{"class":31,"line":51},[29,144486,144487],{"class":35},"  .container",[29,144489,15747],{"class":309},[29,144491,144492,144495,144497,144499,144501],{"class":31,"line":59},[29,144493,144494],{"class":39},"    width",[29,144496,51566],{"class":309},[29,144498,619],{"class":39},[29,144500,636],{"class":305},[29,144502,1468],{"class":309},[29,144504,144505],{"class":31,"line":67},[29,144506,127477],{"class":309},[29,144508,144509],{"class":31,"line":75},[29,144510,1741],{"class":309},[171,144512,144513],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[259,144515,144516],{"start":43},[178,144517,144518],{},"引入资源",[1638,144520],{"style":126537,"src":144521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[171,144523,144524],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[275,144526,144528],{"id":144527},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[175,144530,144531,144534,144537],{},[178,144532,144533],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[178,144535,144536],{},"媒体查询可以根据不同设备宽度来修改样式",[178,144538,144539],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144541,144543],{"id":144542},"_212-less基础","21.2 Less基础",[171,144545,144546],{},"css冗余度较高，不利于复用，没有很好的计算能力",[171,144548,144549],{},"Less可以解决该问题，它是css的扩展语言",[171,144551,144552,144553],{},"Less中文网址： ",[546,144554,144555],{"href":144555,"rel":144556},"http:\u002F\u002Flesscss.cn\u002F",[24038],[171,144558,144559],{},[457,144560,144561],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[275,144563,144565],{"id":144564},"_2121-less安装","21.2.1 less安装",[171,144567,144568],{},"如果使用vscode，则无需进行下方安装步骤",[171,144570,144571],{},[546,144572,144573],{"href":144573,"rel":144574},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24038],[1638,144576],{"style":126537,"src":144577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[275,144579,144581],{"id":144580},"_2122-less使用","21.2.2 less使用",[171,144583,144584],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[259,144586,144587],{},[178,144588,144589],{},[457,144590,144591],{},"Less 变量",[1638,144593],{"style":126537,"src":144594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1638,144596],{"style":126537,"src":144597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[259,144599,144600],{"start":43},[178,144601,144602],{},[457,144603,144604],{},"Less 编译",[1638,144606],{"style":126537,"src":144607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[259,144609,144610],{"start":51},[178,144611,144612],{},[457,144613,144614],{},"Less 嵌套",[1638,144616],{"style":126537,"src":144617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1638,144619],{"style":126537,"src":144620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[259,144622,144623],{"start":59},[178,144624,144625],{},[457,144626,144627],{},"Less 运算",[1638,144629],{"style":126537,"src":144630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[171,144632,144633],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[171,144635,339],{},[175,144637,144638,144641,144644,144647,144650],{},[178,144639,144640],{},"乘号（*）和除号（\u002F）的写法",[178,144642,144643],{},"运算符中间左右有个空格隔开 1px + 5",[178,144645,144646],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[178,144648,144649],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[178,144651,144652],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144654,144656],{"id":144655},"_213-rem-适配方案","21.3 rem 适配方案",[171,144658,144659],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[171,144661,144662],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1638,144664],{"style":126537,"src":144665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[275,144667,144669],{"id":144668},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[171,144671,144672],{},"rem + 媒体查询 + less 技术",[1638,144674],{"style":126537,"src":144675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[171,144677,144678],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[171,144680,144681],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1638,144683],{"style":126537,"src":144684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[171,144686,144687],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[171,144689,14808],{},[1638,144691],{"style":126537,"src":144692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[171,144694,144695],{},"index.html:",[19,144697,144699],{"className":126681,"code":144698,"language":126683,"meta":24,"style":24},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[26,144700,144701,144706,144712,144728,144732,144738,144754],{"__ignoreMap":24},[29,144702,144703],{"class":31,"line":32},[29,144704,144705],{"class":367},"\u002F* rem 适配方案 *\u002F\n",[29,144707,144708,144710],{"class":31,"line":43},[29,144709,50764],{"class":51429},[29,144711,15747],{"class":309},[29,144713,144714,144716,144718,144721,144723,144725],{"class":31,"line":51},[29,144715,70755],{"class":39},[29,144717,51566],{"class":309},[29,144719,144720],{"class":39},"62.5",[29,144722,636],{"class":305},[29,144724,130544],{"class":309},[29,144726,144727],{"class":367},"\u002F* 1rem = 10px *\u002F\n",[29,144729,144730],{"class":31,"line":59},[29,144731,1741],{"class":309},[29,144733,144734,144736],{"class":31,"line":67},[29,144735,130529],{"class":35},[29,144737,15747],{"class":309},[29,144739,144740,144742,144744,144746,144749,144751],{"class":31,"line":75},[29,144741,70697],{"class":39},[29,144743,51566],{"class":309},[29,144745,754],{"class":39},[29,144747,144748],{"class":305},"rem",[29,144750,130544],{"class":309},[29,144752,144753],{"class":367},"\u002F* 100px *\u002F\n",[29,144755,144756],{"class":31,"line":83},[29,144757,1741],{"class":309},[171,144759,144760],{},"common.less",[19,144762,144764],{"className":126681,"code":144763,"language":126683,"meta":24,"style":24},"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",[26,144765,144766,144772,144787,144791,144797,144811,144815,144819,144823,144829,144843,144847,144853,144867],{"__ignoreMap":24},[29,144767,144768,144770],{"class":31,"line":32},[29,144769,50764],{"class":51429},[29,144771,15747],{"class":309},[29,144773,144774,144776,144778,144780,144782,144784],{"class":31,"line":43},[29,144775,70755],{"class":39},[29,144777,51566],{"class":309},[29,144779,144720],{"class":39},[29,144781,636],{"class":305},[29,144783,26196],{"class":309},[29,144785,144786],{"class":367},"\u002F* 10px *\u002F\n",[29,144788,144789],{"class":31,"line":51},[29,144790,1741],{"class":309},[29,144792,144793,144795],{"class":31,"line":59},[29,144794,51740],{"class":51429},[29,144796,15747],{"class":309},[29,144798,144799,144801,144803,144805,144807,144809],{"class":31,"line":67},[29,144800,70697],{"class":39},[29,144802,51566],{"class":309},[29,144804,754],{"class":39},[29,144806,144748],{"class":305},[29,144808,26196],{"class":309},[29,144810,144753],{"class":367},[29,144812,144813],{"class":31,"line":75},[29,144814,1741],{"class":309},[29,144816,144817],{"class":31,"line":83},[29,144818,136142],{"class":309},[29,144820,144821],{"class":31,"line":158},[29,144822,144705],{"class":367},[29,144824,144825,144827],{"class":31,"line":166},[29,144826,50764],{"class":51429},[29,144828,15747],{"class":309},[29,144830,144831,144833,144835,144837,144839,144841],{"class":31,"line":1505},[29,144832,70755],{"class":39},[29,144834,51566],{"class":309},[29,144836,144720],{"class":39},[29,144838,636],{"class":305},[29,144840,130544],{"class":309},[29,144842,144727],{"class":367},[29,144844,144845],{"class":31,"line":1788},[29,144846,1741],{"class":309},[29,144848,144849,144851],{"class":31,"line":1793},[29,144850,130529],{"class":35},[29,144852,15747],{"class":309},[29,144854,144855,144857,144859,144861,144863,144865],{"class":31,"line":1799},[29,144856,70697],{"class":39},[29,144858,51566],{"class":309},[29,144860,754],{"class":39},[29,144862,144748],{"class":305},[29,144864,130544],{"class":309},[29,144866,144753],{"class":367},[29,144868,144869],{"class":31,"line":1804},[29,144870,1741],{"class":309},[171,144872,144873,144874,144877],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23728,144875,144876],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[19,144879,144882],{"className":144880,"code":144881,"language":5362},[5360],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[26,144883,144881],{"__ignoreMap":24},[171,144885,144886],{},"less保存时会自动变成.css文件",[171,144888,144889],{},"好好搞懂上述代码写法",[275,144891,144893],{"id":144892},"_2132-样式导入样式","21.3.2 样式导入样式",[1638,144895],{"style":126537,"src":144896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[275,144898,144900],{"id":144899},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[259,144902,144903],{},[178,144904,144905],{},"准备工作",[1638,144907],{"style":126537,"src":144908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[171,144910,144911,144912],{},"github地址：",[546,144913,144914],{"href":144914,"rel":144915},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24038],[171,144917,144918],{},"下载之后，将index.js文件拖到项目中就可以了",[171,144920,144921,144922],{},"js文件引入到index.html中使用的是",[26,144923,144924],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[259,144926,144927],{"start":43},[178,144928,144929],{},"vscode插件",[1638,144931],{"style":126537,"src":144932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[171,144934,144935],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[171,144937,144938],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1638,144940],{"style":126537,"src":144941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[171,144943,144944],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1638,144946],{"style":126537,"src":144947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[171,144949,144950],{},"修改成75就可以，alt+z为快捷键",[171,144952,144953],{},"index.css：",[19,144955,144956],{"className":126681,"code":144698,"language":126683,"meta":24,"style":24},[26,144957,144958,144962,144968,144982,144986,144992,145006],{"__ignoreMap":24},[29,144959,144960],{"class":31,"line":32},[29,144961,144705],{"class":367},[29,144963,144964,144966],{"class":31,"line":43},[29,144965,50764],{"class":51429},[29,144967,15747],{"class":309},[29,144969,144970,144972,144974,144976,144978,144980],{"class":31,"line":51},[29,144971,70755],{"class":39},[29,144973,51566],{"class":309},[29,144975,144720],{"class":39},[29,144977,636],{"class":305},[29,144979,130544],{"class":309},[29,144981,144727],{"class":367},[29,144983,144984],{"class":31,"line":59},[29,144985,1741],{"class":309},[29,144987,144988,144990],{"class":31,"line":67},[29,144989,130529],{"class":35},[29,144991,15747],{"class":309},[29,144993,144994,144996,144998,145000,145002,145004],{"class":31,"line":75},[29,144995,70697],{"class":39},[29,144997,51566],{"class":309},[29,144999,754],{"class":39},[29,145001,144748],{"class":305},[29,145003,130544],{"class":309},[29,145005,144753],{"class":367},[29,145007,145008],{"class":31,"line":83},[29,145009,1741],{"class":309},[171,145011,144695],{},[19,145013,145014],{"className":126681,"code":127085,"language":126683,"meta":24,"style":24},[26,145015,145016,145022,145034],{"__ignoreMap":24},[29,145017,145018,145020],{"class":31,"line":32},[29,145019,51929],{"class":51429},[29,145021,15747],{"class":309},[29,145023,145024,145026,145028,145030,145032],{"class":31,"line":43},[29,145025,70755],{"class":39},[29,145027,51566],{"class":309},[29,145029,909],{"class":39},[29,145031,51621],{"class":305},[29,145033,1468],{"class":309},[29,145035,145036],{"class":31,"line":51},[29,145037,1741],{"class":309},[14,145039,145041],{"id":145040},"_214-响应式开发","21.4 响应式开发",[171,145043,145044],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1638,145046],{"style":126537,"src":145047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[171,145049,145050],{},"做法：",[175,145052,145053,145056],{},[178,145054,145055],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[178,145057,145058],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1638,145060],{"style":126537,"src":145061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[171,145063,145064],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[275,145066,145068],{"id":145067},"_2141-简单代码示范","21.4.1 简单代码示范",[19,145070,145071],{"className":126681,"code":144698,"language":126683,"meta":24,"style":24},[26,145072,145073,145077,145083,145097,145101,145107,145121],{"__ignoreMap":24},[29,145074,145075],{"class":31,"line":32},[29,145076,144705],{"class":367},[29,145078,145079,145081],{"class":31,"line":43},[29,145080,50764],{"class":51429},[29,145082,15747],{"class":309},[29,145084,145085,145087,145089,145091,145093,145095],{"class":31,"line":51},[29,145086,70755],{"class":39},[29,145088,51566],{"class":309},[29,145090,144720],{"class":39},[29,145092,636],{"class":305},[29,145094,130544],{"class":309},[29,145096,144727],{"class":367},[29,145098,145099],{"class":31,"line":59},[29,145100,1741],{"class":309},[29,145102,145103,145105],{"class":31,"line":67},[29,145104,130529],{"class":35},[29,145106,15747],{"class":309},[29,145108,145109,145111,145113,145115,145117,145119],{"class":31,"line":75},[29,145110,70697],{"class":39},[29,145112,51566],{"class":309},[29,145114,754],{"class":39},[29,145116,144748],{"class":305},[29,145118,130544],{"class":309},[29,145120,144753],{"class":367},[29,145122,145123],{"class":31,"line":83},[29,145124,1741],{"class":309},[171,145126,145127],{},"父盒子一般命名为container",[275,145129,145131],{"id":145130},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[171,145133,145134,145135],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[457,145136,145137],{},"使得 Web 开发更加快捷",[175,145139,145140],{},[178,145141,145142,145143],{},"官网：",[457,145144,145145],{},[546,145146,145147],{"href":145147,"rel":145148},"http:\u002F\u002Fgetbootstrap.com\u002F",[24038],[171,145150,145151],{},"可以直接去官网拿现成的东西",[259,145153,145154],{},[178,145155,145156],{},"Bootstrap的使用",[171,145158,145159],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[171,145161,145162],{},"Bootstrap 使用四步曲：",[171,145164,145165,145168],{},[457,145166,145167],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1638,145170],{"style":126537,"src":145171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[171,145173,145174],{},"打开Bootstrap官网，然后下载",[1638,145176],{"style":126537,"src":145177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1638,145179],{"style":126537,"src":145180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[171,145182,145183],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[171,145185,145186],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[171,145188,145189],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1638,145191],{"style":126537,"src":145192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[19,145194,145196],{"className":126681,"code":145195,"language":126683,"meta":24,"style":24},".center {\n  color: red;\n}\n",[26,145197,145198,145204,145214],{"__ignoreMap":24},[29,145199,145200,145202],{"class":31,"line":32},[29,145201,126972],{"class":35},[29,145203,15747],{"class":309},[29,145205,145206,145208,145210,145212],{"class":31,"line":43},[29,145207,71034],{"class":39},[29,145209,51566],{"class":309},[29,145211,57550],{"class":39},[29,145213,1468],{"class":309},[29,145215,145216],{"class":31,"line":51},[29,145217,1741],{"class":309},[171,145219,145220,145223],{},[26,145221,145222],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1638,145225],{"style":126537,"src":145226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1638,145228],{"style":126537,"src":145229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1638,145231],{"style":126537,"src":145232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[171,145234,145235],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1638,145237],{"style":126537,"src":145238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[171,145240,145241],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[259,145243,145244],{"start":43},[178,145245,145246],{},"布局容器",[1638,145248],{"style":126537,"src":145249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[171,145251,145252],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[171,145254,145255],{},"container-fluid用于移动式布局比较方便",[259,145257,145258],{"start":51},[178,145259,145260,145261],{},"bootstrap ",[457,145262,145263],{},"栅格系统原理",[1638,145265],{"style":126537,"src":145266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[259,145268,145269],{"start":59},[178,145270,145271],{},[457,145272,145273],{},"栅格选项参数",[1638,145275],{"style":126537,"src":145276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[171,145278,145279],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[171,145281,14808],{},[19,145283,145284],{"className":126681,"code":145195,"language":126683,"meta":24,"style":24},[26,145285,145286,145292,145302],{"__ignoreMap":24},[29,145287,145288,145290],{"class":31,"line":32},[29,145289,126972],{"class":35},[29,145291,15747],{"class":309},[29,145293,145294,145296,145298,145300],{"class":31,"line":43},[29,145295,71034],{"class":39},[29,145297,51566],{"class":309},[29,145299,57550],{"class":39},[29,145301,1468],{"class":309},[29,145303,145304],{"class":31,"line":51},[29,145305,1741],{"class":309},[171,145307,135724],{},[1638,145309],{"style":126537,"src":145310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[171,145312,145313],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[171,145315,145316],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[171,145318,145319],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[171,145321,145322],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[171,145324,145325],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[171,145327,145328],{},"汇总展示说明：",[19,145330,145331],{"className":127428,"code":130785,"language":127430,"meta":24,"style":24},[26,145332,145333,145337,145351,145355],{"__ignoreMap":24},[29,145334,145335],{"class":31,"line":32},[29,145336,130792],{"class":367},[29,145338,145339,145341,145343,145345,145347,145349],{"class":31,"line":43},[29,145340,1218],{"class":309},[29,145342,51740],{"class":51429},[29,145344,53615],{"class":35},[29,145346,355],{"class":309},[29,145348,130805],{"class":103},[29,145350,51436],{"class":309},[29,145352,145353],{"class":31,"line":51},[29,145354,130812],{"class":309},[29,145356,145357,145359,145361],{"class":31,"line":59},[29,145358,51914],{"class":309},[29,145360,51740],{"class":51429},[29,145362,51436],{"class":309},[1638,145364],{"style":126537,"src":145365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[171,145367,145368],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[19,145370,145371],{"className":127428,"code":130785,"language":127430,"meta":24,"style":24},[26,145372,145373,145377,145391,145395],{"__ignoreMap":24},[29,145374,145375],{"class":31,"line":32},[29,145376,130792],{"class":367},[29,145378,145379,145381,145383,145385,145387,145389],{"class":31,"line":43},[29,145380,1218],{"class":309},[29,145382,51740],{"class":51429},[29,145384,53615],{"class":35},[29,145386,355],{"class":309},[29,145388,130805],{"class":103},[29,145390,51436],{"class":309},[29,145392,145393],{"class":31,"line":51},[29,145394,130812],{"class":309},[29,145396,145397,145399,145401],{"class":31,"line":59},[29,145398,51914],{"class":309},[29,145400,51740],{"class":51429},[29,145402,51436],{"class":309},[259,145404,145405],{"start":67},[178,145406,145407],{},[457,145408,145409],{},"列嵌套",[1638,145411],{"style":126537,"src":145412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[171,145414,145415],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[171,145417,145418],{},"没加row内部这样：",[1638,145420],{"style":126537,"src":145421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[171,145423,145424],{},"加上row之后内部为：",[1638,145426],{"style":126537,"src":145427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[259,145429,145430],{"start":75},[178,145431,145432],{},[457,145433,145434],{},"列偏移",[1638,145436],{"style":126537,"src":145437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[171,145439,145440],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[171,145442,145443],{},"要加偏移量，即偏移份数",[171,145445,145446],{},"偏移的份数=12-两个盒子的份数",[259,145448,145449],{"start":83},[178,145450,145451],{},[457,145452,145453],{},"列排序",[1638,145455],{"style":126537,"src":145456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[171,145458,145459],{},"pull拉左；push推右",[259,145461,145462],{"start":158},[178,145463,145464],{},[457,145465,145466],{},"响应式工具",[1638,145468],{"style":126537,"src":145469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[171,145471,145472],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[275,145474,145476],{"id":145475},"_2143-响应式小项目","21.4.3 响应式小项目",[171,145478,145479],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[171,145481,145482],{},"ul {",[171,145484,145485],{},"list-style: none;",[171,145487,145488],{},"margin:0;",[171,145490,145491],{},"padding:0; }",[1638,145493],{"style":126537,"src":145494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1638,145496],{"style":126537,"src":145497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[171,145499,145500],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[171,145502,69018],{},[19,145504,145505],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,145506,145507,145513,145523],{"__ignoreMap":24},[29,145508,145509,145511],{"class":31,"line":32},[29,145510,130529],{"class":35},[29,145512,15747],{"class":309},[29,145514,145515,145517,145519,145521],{"class":31,"line":43},[29,145516,131161],{"class":39},[29,145518,51566],{"class":309},[29,145520,23911],{"class":39},[29,145522,1468],{"class":309},[29,145524,145525],{"class":31,"line":51},[29,145526,1741],{"class":309},[171,145528,70582],{},[19,145530,145531],{"className":126681,"code":139351,"language":126683,"meta":24,"style":24},[26,145532,145533,145539,145549],{"__ignoreMap":24},[29,145534,145535,145537],{"class":31,"line":32},[29,145536,130529],{"class":35},[29,145538,15747],{"class":309},[29,145540,145541,145543,145545,145547],{"class":31,"line":43},[29,145542,131161],{"class":39},[29,145544,51566],{"class":309},[29,145546,23911],{"class":39},[29,145548,1468],{"class":309},[29,145550,145551],{"class":31,"line":51},[29,145552,1741],{"class":309},[14,145554,145556],{"id":145555},"_215-swiper-插件使用","21.5 swiper 插件使用",[175,145558,145559,145562,145565],{},[178,145560,145561],{},"下载需要的css和js文件html页面中 引入相关文件",[178,145563,145564],{},"官网找到类似案例，复制html结构，css样式 js 语法",[178,145566,145567],{},"根据需求定制修改模块",[1638,145569],{"style":126537,"src":145570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[171,145572,145573],{},"解压后将这两部分放到项目中",[1638,145575],{"style":126537,"src":145576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[171,145578,145579],{},"这个插件可以帮助我们实现轮播图效果",[171,145581,145582],{},"用法：",[1638,145584],{"style":126537,"src":145585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[171,145587,145588],{},"找到自己喜欢的",[1638,145590],{"style":126537,"src":145591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[171,145593,145594],{},"右键，查看网页源代码",[1638,145596],{"style":126537,"src":145597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[171,145599,145600],{},"复制人家的结构内容",[171,145602,145603],{},"然后去看API文档：",[1638,145605],{"style":126537,"src":145606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[171,145608,145609],{},"可以看看如何修改样式",[171,145611,145612],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[223,145614,145615],{},"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":24,"searchDepth":43,"depth":43,"links":145617},[145618,145623,145627,145632,145637],{"id":144418,"depth":43,"text":144419,"children":145619},[145620,145621,145622],{"id":144422,"depth":51,"text":144423},{"id":144432,"depth":51,"text":144433},{"id":144527,"depth":51,"text":144528},{"id":144542,"depth":43,"text":144543,"children":145624},[145625,145626],{"id":144564,"depth":51,"text":144565},{"id":144580,"depth":51,"text":144581},{"id":144655,"depth":43,"text":144656,"children":145628},[145629,145630,145631],{"id":144668,"depth":51,"text":144669},{"id":144892,"depth":51,"text":144893},{"id":144899,"depth":51,"text":144900},{"id":145040,"depth":43,"text":145041,"children":145633},[145634,145635,145636],{"id":145067,"depth":51,"text":145068},{"id":145130,"depth":51,"text":145131},{"id":145475,"depth":51,"text":145476},{"id":145555,"depth":43,"text":145556},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144410,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145644,"title":145645,"body":145646,"description":230,"extension":231,"meta":145866,"navigation":233,"path":145867,"seo":145868,"stem":145869,"__hash__":145870},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145647,"toc":145862},[145648,145651,145655,145658,145673,145678,145681,145686,145721,145726,145738,145743,145756,145761,145778,145783,145803,145808,145826,145829,145832,145835,145838,145842,145845,145848,145851,145854,145857,145860],[10,145649,145645],{"id":145650},"_22-代码提交与新型相对单位",[14,145652,145654],{"id":145653},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[171,145656,145657],{},"法1：",[259,145659,145660,145667,145670],{},[178,145661,145662,145663],{},"登录网站注册：",[546,145664,145665],{"href":145665,"rel":145666},"https:\u002F\u002Fgitee.com\u002F",[24038],[178,145668,145669],{},"码云创建新的仓库",[178,145671,145672],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[175,145674,145675],{},[178,145676,145677],{},"在网站根目录右键-- Git Bash Here",[1638,145679],{"style":126537,"src":145680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[175,145682,145683],{},[178,145684,145685],{},"如果是第一次利用git提交，请配置好全局选项",[19,145687,145689],{"className":117425,"code":145688,"language":117427,"meta":24,"style":24},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[26,145690,145691,145707],{"__ignoreMap":24},[29,145692,145693,145696,145698,145701,145704],{"class":31,"line":32},[29,145694,145695],{"class":35},"git",[29,145697,119848],{"class":103},[29,145699,145700],{"class":39}," --global",[29,145702,145703],{"class":103}," user.name",[29,145705,145706],{"class":103}," \"你的名字\"\n",[29,145708,145709,145711,145713,145715,145718],{"class":31,"line":43},[29,145710,145695],{"class":35},[29,145712,119848],{"class":103},[29,145714,145700],{"class":39},[29,145716,145717],{"class":103}," user.email",[29,145719,145720],{"class":103}," \"你的邮箱\"\n",[175,145722,145723],{},[178,145724,145725],{},"初始化仓库",[19,145727,145729],{"className":117425,"code":145728,"language":117427,"meta":24,"style":24},"git init\n",[26,145730,145731],{"__ignoreMap":24},[29,145732,145733,145735],{"class":31,"line":32},[29,145734,145695],{"class":35},[29,145736,145737],{"class":103}," init\n",[175,145739,145740],{},[178,145741,145742],{},"把本地文件放到暂存区",[19,145744,145746],{"className":117425,"code":145745,"language":117427,"meta":24,"style":24},"git add .\n",[26,145747,145748],{"__ignoreMap":24},[29,145749,145750,145752,145754],{"class":31,"line":32},[29,145751,145695],{"class":35},[29,145753,5384],{"class":103},[29,145755,28870],{"class":103},[175,145757,145758],{},[178,145759,145760],{},"把本地文件放到本地仓库里面",[19,145762,145764],{"className":117425,"code":145763,"language":117427,"meta":24,"style":24},"git commit -m \"first commit\"\n",[26,145765,145766],{"__ignoreMap":24},[29,145767,145768,145770,145773,145775],{"class":31,"line":32},[29,145769,145695],{"class":35},[29,145771,145772],{"class":103}," commit",[29,145774,101011],{"class":39},[29,145776,145777],{"class":103}," \"first commit\"\n",[175,145779,145780],{},[178,145781,145782],{},"链接远程仓库",[19,145784,145786],{"className":117425,"code":145785,"language":117427,"meta":24,"style":24},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[26,145787,145788],{"__ignoreMap":24},[29,145789,145790,145792,145795,145797,145800],{"class":31,"line":32},[29,145791,145695],{"class":35},[29,145793,145794],{"class":103}," remote",[29,145796,5384],{"class":103},[29,145798,145799],{"class":103}," origin",[29,145801,145802],{"class":103}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[175,145804,145805],{},[178,145806,145807],{},"把本地仓库的文件推送到远程仓库 push",[19,145809,145811],{"className":117425,"code":145810,"language":117427,"meta":24,"style":24},"git push -u origin master\n",[26,145812,145813],{"__ignoreMap":24},[29,145814,145815,145817,145819,145821,145823],{"class":31,"line":32},[29,145816,145695],{"class":35},[29,145818,29145],{"class":103},[29,145820,28419],{"class":39},[29,145822,145799],{"class":103},[29,145824,145825],{"class":103}," master\n",[1638,145827],{"style":126537,"src":145828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[171,145830,145831],{},"上方方法暂未实现，后边学完git后在整",[171,145833,145834],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1638,145836],{"style":126537,"src":145837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145839,145841],{"id":145840},"_222-新型相对单位","22.2 新型相对单位",[1638,145843],{"style":126537,"src":145844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1638,145846],{"style":126537,"src":145847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[171,145849,145850],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[171,145852,145853],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1638,145855],{"style":126537,"src":145856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[171,145858,145859],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[223,145861,24131],{},{"title":24,"searchDepth":43,"depth":43,"links":145863},[145864,145865],{"id":145653,"depth":43,"text":145654},{"id":145840,"depth":43,"text":145841},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145645,"description":230},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145872,"title":145873,"body":145874,"description":145878,"extension":231,"meta":145879,"navigation":233,"path":145880,"seo":145881,"stem":145882,"__hash__":145883},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145875,"toc":145876},[],{"title":24,"searchDepth":43,"depth":43,"links":145877},[],"自己正经开始学编程的第一门语言！",{"category":92968},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145873,"description":145878},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145885,"title":145886,"body":145887,"description":230,"extension":231,"meta":147034,"navigation":233,"path":147035,"seo":147036,"stem":147037,"__hash__":147038},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145888,"toc":147010},[145889,145892,145896,145899,145902,145927,145930,145936,145940,145943,145970,145973,146013,146016,146028,146031,146037,146041,146045,146072,146089,146096,146100,146103,146129,146132,146136,146139,146179,146182,146199,146205,146209,146214,146258,146261,146279,146282,146350,146354,146361,146364,146379,146382,146391,146394,146405,146408,146417,146420,146437,146440,146455,146459,146463,146466,146468,146488,146492,146495,146498,146509,146512,146518,146522,146528,146555,146558,146570,146573,146584,146587,146593,146597,146603,146653,146656,146698,146701,146734,146737,146771,146775,146778,146798,146801,146837,146840,146853,146857,146861,146867,146870,146883,146887,146890,146896,146899,146903,146906,146909,146958,146962,146978,146984,146991,146997,147007],[10,145890,145886],{"id":145891},"_1-python环境与第一个程序",[14,145893,145895],{"id":145894},"_11-什么是python","1.1 什么是Python",[171,145897,145898],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[171,145900,145901],{},"理解 Python 时抓住三个关键词：",[259,145903,145904,145907,145910],{},[178,145905,145906],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[178,145908,145909],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[178,145911,145912,145913,520,145916,520,145919,520,145922,520,145924,28514],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[26,145914,145915],{},"os",[26,145917,145918],{},"sys",[26,145920,145921],{},"json",[26,145923,57989],{},[26,145925,145926],{},"datetime",[171,145928,145929],{},"Python 程序的运行链路：",[19,145931,145934],{"className":145932,"code":145933,"language":5362,"meta":24},[5360],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[26,145935,145933],{"__ignoreMap":24},[14,145937,145939],{"id":145938},"_12-python解释器","1.2 Python解释器",[171,145941,145942],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[19,145944,145946],{"className":21,"code":145945,"language":23,"meta":24,"style":24},"python --version\npython3 --version\npython\npython3\n",[26,145947,145948,145954,145960,145965],{"__ignoreMap":24},[29,145949,145950,145952],{"class":31,"line":32},[29,145951,30509],{"class":35},[29,145953,26422],{"class":39},[29,145955,145956,145958],{"class":31,"line":43},[29,145957,101008],{"class":35},[29,145959,26422],{"class":39},[29,145961,145962],{"class":31,"line":51},[29,145963,145964],{"class":35},"python\n",[29,145966,145967],{"class":31,"line":59},[29,145968,145969],{"class":35},"python3\n",[171,145971,145972],{},"进入交互模式后，可以直接输入表达式：",[19,145974,145976],{"className":30507,"code":145975,"language":30509,"meta":24,"style":24},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[26,145977,145978,145989,145994,146008],{"__ignoreMap":24},[29,145979,145980,145983,145985,145987],{"class":31,"line":32},[29,145981,145982],{"class":305},">>>",[29,145984,25247],{"class":39},[29,145986,45695],{"class":305},[29,145988,47852],{"class":39},[29,145990,145991],{"class":31,"line":43},[29,145992,145993],{"class":39},"3\n",[29,145995,145996,145998,146001,146003,146006],{"class":31,"line":51},[29,145997,145982],{"class":305},[29,145999,146000],{"class":39}," print",[29,146002,310],{"class":309},[29,146004,146005],{"class":103},"\"hello python\"",[29,146007,316],{"class":309},[29,146009,146010],{"class":31,"line":59},[29,146011,146012],{"class":309},"hello python\n",[171,146014,146015],{},"退出交互模式：",[19,146017,146019],{"className":30507,"code":146018,"language":30509,"meta":24,"style":24},"exit()\n",[26,146020,146021],{"__ignoreMap":24},[29,146022,146023,146026],{"class":31,"line":32},[29,146024,146025],{"class":39},"exit",[29,146027,2151],{"class":309},[171,146029,146030],{},"或使用快捷键：",[19,146032,146035],{"className":146033,"code":146034,"language":5362,"meta":24},[5360],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[26,146036,146034],{"__ignoreMap":24},[14,146038,146040],{"id":146039},"_13-安装python","1.3 安装Python",[275,146042,146044],{"id":146043},"_131-windows安装","1.3.1 Windows安装",[259,146046,146047,146054,146057,146063,146069],{},[178,146048,146049,146050],{},"打开 Python 官网：",[546,146051,146052],{"href":146052,"rel":146053},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24038],[178,146055,146056],{},"下载 Windows Installer。",[178,146058,146059,146060,28514],{},"安装时勾选 ",[26,146061,146062],{},"Add Python to PATH",[178,146064,146065,146066,28514],{},"点击 ",[26,146067,146068],{},"Install Now",[178,146070,146071],{},"安装完成后打开命令提示符验证：",[19,146073,146075],{"className":21,"code":146074,"language":23,"meta":24,"style":24},"python --version\npip --version\n",[26,146076,146077,146083],{"__ignoreMap":24},[29,146078,146079,146081],{"class":31,"line":32},[29,146080,30509],{"class":35},[29,146082,26422],{"class":39},[29,146084,146085,146087],{"class":31,"line":43},[29,146086,24004],{"class":35},[29,146088,26422],{"class":39},[171,146090,146091,146092,146095],{},"如果提示 ",[26,146093,146094],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[275,146097,146099],{"id":146098},"_132-macos安装","1.3.2 macOS安装",[171,146101,146102],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[19,146104,146106],{"className":21,"code":146105,"language":23,"meta":24,"style":24},"brew install python\npython3 --version\npip3 --version\n",[26,146107,146108,146117,146123],{"__ignoreMap":24},[29,146109,146110,146113,146115],{"class":31,"line":32},[29,146111,146112],{"class":35},"brew",[29,146114,24007],{"class":103},[29,146116,124447],{"class":103},[29,146118,146119,146121],{"class":31,"line":43},[29,146120,101008],{"class":35},[29,146122,26422],{"class":39},[29,146124,146125,146127],{"class":31,"line":51},[29,146126,119829],{"class":35},[29,146128,26422],{"class":39},[171,146130,146131],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[275,146133,146135],{"id":146134},"_133-linux安装","1.3.3 Linux安装",[171,146137,146138],{},"Ubuntu\u002FDebian：",[19,146140,146142],{"className":21,"code":146141,"language":23,"meta":24,"style":24},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[26,146143,146144,146152,146167,146173],{"__ignoreMap":24},[29,146145,146146,146148,146150],{"class":31,"line":32},[29,146147,24749],{"class":35},[29,146149,117446],{"class":103},[29,146151,26371],{"class":103},[29,146153,146154,146156,146158,146160,146162,146164],{"class":31,"line":43},[29,146155,24749],{"class":35},[29,146157,117446],{"class":103},[29,146159,24007],{"class":103},[29,146161,104532],{"class":103},[29,146163,100927],{"class":103},[29,146165,146166],{"class":103}," python3-venv\n",[29,146168,146169,146171],{"class":31,"line":51},[29,146170,101008],{"class":35},[29,146172,26422],{"class":39},[29,146174,146175,146177],{"class":31,"line":59},[29,146176,119829],{"class":35},[29,146178,26422],{"class":39},[171,146180,146181],{},"Fedora：",[19,146183,146185],{"className":21,"code":146184,"language":23,"meta":24,"style":24},"sudo dnf install python3 python3-pip\n",[26,146186,146187],{"__ignoreMap":24},[29,146188,146189,146191,146193,146195,146197],{"class":31,"line":32},[29,146190,24749],{"class":35},[29,146192,26444],{"class":103},[29,146194,24007],{"class":103},[29,146196,104532],{"class":103},[29,146198,119894],{"class":103},[171,146200,146201,146202,146204],{},"Linux 上通常使用 ",[26,146203,101008],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146206,146208],{"id":146207},"_14-pip包管理器","1.4 pip包管理器",[171,146210,146211,146213],{},[26,146212,24004],{}," 用来安装第三方库。",[19,146215,146217],{"className":21,"code":146216,"language":23,"meta":24,"style":24},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[26,146218,146219,146228,146237,146245,146251],{"__ignoreMap":24},[29,146220,146221,146223,146225],{"class":31,"line":32},[29,146222,24004],{"class":35},[29,146224,24007],{"class":103},[29,146226,146227],{"class":103}," requests\n",[29,146229,146230,146232,146235],{"class":31,"line":43},[29,146231,24004],{"class":35},[29,146233,146234],{"class":103}," uninstall",[29,146236,146227],{"class":103},[29,146238,146239,146241,146243],{"class":31,"line":51},[29,146240,24004],{"class":35},[29,146242,117703],{"class":103},[29,146244,146227],{"class":103},[29,146246,146247,146249],{"class":31,"line":59},[29,146248,24004],{"class":35},[29,146250,119084],{"class":103},[29,146252,146253,146255],{"class":31,"line":67},[29,146254,24004],{"class":35},[29,146256,146257],{"class":103}," freeze\n",[171,146259,146260],{},"国内网络较慢时可以临时使用镜像：",[19,146262,146264],{"className":21,"code":146263,"language":23,"meta":24,"style":24},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[26,146265,146266],{"__ignoreMap":24},[29,146267,146268,146270,146272,146275,146277],{"class":31,"line":32},[29,146269,24004],{"class":35},[29,146271,24007],{"class":103},[29,146273,146274],{"class":103}," requests",[29,146276,26559],{"class":39},[29,146278,119857],{"class":103},[171,146280,146281],{},"常见第三方库：",[445,146283,146284,146293],{},[448,146285,146286],{},[451,146287,146288,146291],{},[454,146289,146290],{},"库",[454,146292,102825],{},[492,146294,146295,146303,146310,146318,146326,146334,146342],{},[451,146296,146297,146300],{},[497,146298,146299],{},"requests",[497,146301,146302],{},"网络请求",[451,146304,146305,146307],{},[497,146306,100755],{},[497,146308,146309],{},"数值计算",[451,146311,146312,146315],{},[497,146313,146314],{},"pandas",[497,146316,146317],{},"表格数据处理",[451,146319,146320,146323],{},[497,146321,146322],{},"matplotlib",[497,146324,146325],{},"绘图",[451,146327,146328,146331],{},[497,146329,146330],{},"pyecharts",[497,146332,146333],{},"ECharts 图表",[451,146335,146336,146339],{},[497,146337,146338],{},"flask",[497,146340,146341],{},"Web 后端",[451,146343,146344,146347],{},[497,146345,146346],{},"pytest",[497,146348,146349],{},"自动化测试",[14,146351,146353],{"id":146352},"_15-虚拟环境","1.5 虚拟环境",[171,146355,146356,146357,146360],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[26,146358,146359],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[171,146362,146363],{},"创建虚拟环境：",[19,146365,146367],{"className":21,"code":146366,"language":23,"meta":24,"style":24},"python -m venv .venv\n",[26,146368,146369],{"__ignoreMap":24},[29,146370,146371,146373,146375,146377],{"class":31,"line":32},[29,146372,30509],{"class":35},[29,146374,101011],{"class":39},[29,146376,101014],{"class":103},[29,146378,101017],{"class":103},[171,146380,146381],{},"Windows 激活：",[19,146383,146385],{"className":21,"code":146384,"language":23,"meta":24,"style":24},".venv\\Scripts\\activate\n",[26,146386,146387],{"__ignoreMap":24},[29,146388,146389],{"class":31,"line":32},[29,146390,146384],{"class":35},[171,146392,146393],{},"macOS\u002FLinux 激活：",[19,146395,146397],{"className":21,"code":146396,"language":23,"meta":24,"style":24},"source .venv\u002Fbin\u002Factivate\n",[26,146398,146399],{"__ignoreMap":24},[29,146400,146401,146403],{"class":31,"line":32},[29,146402,101022],{"class":39},[29,146404,101025],{"class":103},[171,146406,146407],{},"退出虚拟环境：",[19,146409,146411],{"className":21,"code":146410,"language":23,"meta":24,"style":24},"deactivate\n",[26,146412,146413],{"__ignoreMap":24},[29,146414,146415],{"class":31,"line":32},[29,146416,146410],{"class":35},[171,146418,146419],{},"保存依赖：",[19,146421,146423],{"className":21,"code":146422,"language":23,"meta":24,"style":24},"pip freeze > requirements.txt\n",[26,146424,146425],{"__ignoreMap":24},[29,146426,146427,146429,146432,146434],{"class":31,"line":32},[29,146428,24004],{"class":35},[29,146430,146431],{"class":103}," freeze",[29,146433,26351],{"class":305},[29,146435,146436],{"class":103}," requirements.txt\n",[171,146438,146439],{},"安装依赖：",[19,146441,146443],{"className":21,"code":146442,"language":23,"meta":24,"style":24},"pip install -r requirements.txt\n",[26,146444,146445],{"__ignoreMap":24},[29,146446,146447,146449,146451,146453],{"class":31,"line":32},[29,146448,24004],{"class":35},[29,146450,24007],{"class":103},[29,146452,119768],{"class":39},[29,146454,146436],{"class":103},[14,146456,146458],{"id":146457},"_16-开发工具","1.6 开发工具",[275,146460,146462],{"id":146461},"_161-pycharm","1.6.1 PyCharm",[171,146464,146465],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[171,146467,122191],{},[259,146469,146470,146473,146476,146482,146485],{},[178,146471,146472],{},"New Project：创建项目。",[178,146474,146475],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[178,146477,146478,146479,126112],{},"New Python File：创建 ",[26,146480,146481],{},".py",[178,146483,146484],{},"Run：运行当前文件。",[178,146486,146487],{},"Debug：断点调试。",[275,146489,146491],{"id":146490},"_162-vs-code","1.6.2 VS Code",[171,146493,146494],{},"VS Code 轻量，适合后续多语言开发。",[171,146496,146497],{},"建议安装插件：",[259,146499,146500,146503,146506],{},[178,146501,146502],{},"Python。",[178,146504,146505],{},"Pylance。",[178,146507,146508],{},"Jupyter。",[171,146510,146511],{},"选择解释器：",[19,146513,146516],{"className":146514,"code":146515,"language":5362,"meta":24},[5360],"Ctrl + Shift + P -> Python: Select Interpreter\n",[26,146517,146515],{"__ignoreMap":24},[14,146519,146521],{"id":146520},"_17-第一个python程序","1.7 第一个Python程序",[171,146523,146524,146525,24791],{},"创建文件 ",[26,146526,146527],{},"hello.py",[19,146529,146531],{"className":30507,"code":146530,"language":30509,"meta":24,"style":24},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[26,146532,146533,146544],{"__ignoreMap":24},[29,146534,146535,146537,146539,146542],{"class":31,"line":32},[29,146536,30544],{"class":39},[29,146538,310],{"class":309},[29,146540,146541],{"class":103},"\"Hello World\"",[29,146543,316],{"class":309},[29,146545,146546,146548,146550,146553],{"class":31,"line":43},[29,146547,30544],{"class":39},[29,146549,310],{"class":309},[29,146551,146552],{"class":103},"\"你好，Python\"",[29,146554,316],{"class":309},[171,146556,146557],{},"在终端运行：",[19,146559,146561],{"className":21,"code":146560,"language":23,"meta":24,"style":24},"python hello.py\n",[26,146562,146563],{"__ignoreMap":24},[29,146564,146565,146567],{"class":31,"line":32},[29,146566,30509],{"class":35},[29,146568,146569],{"class":103}," hello.py\n",[171,146571,146572],{},"或：",[19,146574,146576],{"className":21,"code":146575,"language":23,"meta":24,"style":24},"python3 hello.py\n",[26,146577,146578],{"__ignoreMap":24},[29,146579,146580,146582],{"class":31,"line":32},[29,146581,101008],{"class":35},[29,146583,146569],{"class":103},[171,146585,146586],{},"输出：",[19,146588,146591],{"className":146589,"code":146590,"language":5362,"meta":24},[5360],"Hello World\n你好，Python\n",[26,146592,146590],{"__ignoreMap":24},[14,146594,146596],{"id":146595},"_18-print函数","1.8 print函数",[171,146598,146599,146602],{},[26,146600,146601],{},"print()"," 用来输出内容。",[19,146604,146606],{"className":30507,"code":146605,"language":30509,"meta":24,"style":24},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[26,146607,146608,146618,146628,146638],{"__ignoreMap":24},[29,146609,146610,146612,146614,146616],{"class":31,"line":32},[29,146611,30544],{"class":39},[29,146613,310],{"class":309},[29,146615,6019],{"class":103},[29,146617,316],{"class":309},[29,146619,146620,146622,146624,146626],{"class":31,"line":43},[29,146621,30544],{"class":39},[29,146623,310],{"class":309},[29,146625,619],{"class":39},[29,146627,316],{"class":309},[29,146629,146630,146632,146634,146636],{"class":31,"line":51},[29,146631,30544],{"class":39},[29,146633,310],{"class":309},[29,146635,358],{"class":39},[29,146637,316],{"class":309},[29,146639,146640,146642,146644,146647,146649,146651],{"class":31,"line":59},[29,146641,30544],{"class":39},[29,146643,310],{"class":309},[29,146645,146646],{"class":103},"\"年龄:\"",[29,146648,12610],{"class":309},[29,146650,958],{"class":39},[29,146652,316],{"class":309},[171,146654,146655],{},"多个内容用逗号隔开，默认中间加空格：",[19,146657,146659],{"className":30507,"code":146658,"language":30509,"meta":24,"style":24},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[26,146660,146661,146671,146681],{"__ignoreMap":24},[29,146662,146663,146666,146668],{"class":31,"line":32},[29,146664,146665],{"class":309},"name ",[29,146667,355],{"class":305},[29,146669,146670],{"class":103}," \"张三\"\n",[29,146672,146673,146676,146678],{"class":31,"line":43},[29,146674,146675],{"class":309},"age ",[29,146677,355],{"class":305},[29,146679,146680],{"class":39}," 18\n",[29,146682,146683,146685,146687,146690,146693,146695],{"class":31,"line":51},[29,146684,30544],{"class":39},[29,146686,310],{"class":309},[29,146688,146689],{"class":103},"\"姓名:\"",[29,146691,146692],{"class":309},", name, ",[29,146694,146646],{"class":103},[29,146696,146697],{"class":309},", age)\n",[171,146699,146700],{},"修改分隔符：",[19,146702,146704],{"className":30507,"code":146703,"language":30509,"meta":24,"style":24},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[26,146705,146706],{"__ignoreMap":24},[29,146707,146708,146710,146712,146715,146717,146719,146721,146723,146725,146728,146730,146732],{"class":31,"line":32},[29,146709,30544],{"class":39},[29,146711,310],{"class":309},[29,146713,146714],{"class":103},"\"2024\"",[29,146716,12610],{"class":309},[29,146718,54445],{"class":103},[29,146720,12610],{"class":309},[29,146722,54445],{"class":103},[29,146724,12610],{"class":309},[29,146726,146727],{"class":5391},"sep",[29,146729,355],{"class":305},[29,146731,32612],{"class":103},[29,146733,316],{"class":309},[171,146735,146736],{},"修改结尾符：",[19,146738,146740],{"className":30507,"code":146739,"language":30509,"meta":24,"style":24},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[26,146741,146742,146760],{"__ignoreMap":24},[29,146743,146744,146746,146748,146750,146752,146754,146756,146758],{"class":31,"line":32},[29,146745,30544],{"class":39},[29,146747,310],{"class":309},[29,146749,6019],{"class":103},[29,146751,12610],{"class":309},[29,146753,45930],{"class":5391},[29,146755,355],{"class":305},[29,146757,4534],{"class":103},[29,146759,316],{"class":309},[29,146761,146762,146764,146766,146769],{"class":31,"line":43},[29,146763,30544],{"class":39},[29,146765,310],{"class":309},[29,146767,146768],{"class":103},"\"python\"",[29,146770,316],{"class":309},[14,146772,146774],{"id":146773},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[171,146776,146777],{},"交互运行适合临时验证：",[19,146779,146781],{"className":30507,"code":146780,"language":30509,"meta":24,"style":24},">>> 10 * 3\n30\n",[26,146782,146783,146793],{"__ignoreMap":24},[29,146784,146785,146787,146789,146791],{"class":31,"line":32},[29,146786,145982],{"class":305},[29,146788,2213],{"class":39},[29,146790,6693],{"class":305},[29,146792,120165],{"class":39},[29,146794,146795],{"class":31,"line":43},[29,146796,146797],{"class":39},"30\n",[171,146799,146800],{},"脚本运行适合保存程序：",[19,146802,146804],{"className":30507,"code":146803,"language":30509,"meta":24,"style":24},"price = 8\ncount = 5\nprint(price * count)\n",[26,146805,146806,146816,146825],{"__ignoreMap":24},[29,146807,146808,146811,146813],{"class":31,"line":32},[29,146809,146810],{"class":309},"price ",[29,146812,355],{"class":305},[29,146814,146815],{"class":39}," 8\n",[29,146817,146818,146821,146823],{"class":31,"line":43},[29,146819,146820],{"class":309},"count ",[29,146822,355],{"class":305},[29,146824,54556],{"class":39},[29,146826,146827,146829,146832,146834],{"class":31,"line":51},[29,146828,30544],{"class":39},[29,146830,146831],{"class":309},"(price ",[29,146833,763],{"class":305},[29,146835,146836],{"class":309}," count)\n",[171,146838,146839],{},"实际学习中推荐：",[259,146841,146842,146845,146850],{},[178,146843,146844],{},"临时试一个语法，用交互模式。",[178,146846,146847,146848,126112],{},"写完整练习，用 ",[26,146849,146481],{},[178,146851,146852],{},"写项目，用独立目录和虚拟环境。",[14,146854,146856],{"id":146855},"_110-常见错误","1.10 常见错误",[275,146858,146860],{"id":146859},"_1101-命令找不到","1.10.1 命令找不到",[19,146862,146865],{"className":146863,"code":146864,"language":5362,"meta":24},[5360],"python: command not found\n",[26,146866,146864],{"__ignoreMap":24},[171,146868,146869],{},"原因：",[259,146871,146872,146875,146878],{},[178,146873,146874],{},"没安装 Python。",[178,146876,146877],{},"PATH 没配置。",[178,146879,146880,146881,28514],{},"Linux\u002FmacOS 应该使用 ",[26,146882,101008],{},[275,146884,146886],{"id":146885},"_1102-文件名冲突","1.10.2 文件名冲突",[171,146888,146889],{},"不要把文件命名为：",[19,146891,146894],{"className":146892,"code":146893,"language":5362,"meta":24},[5360],"random.py\njson.py\ntime.py\nrequests.py\n",[26,146895,146893],{"__ignoreMap":24},[171,146897,146898],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[275,146900,146902],{"id":146901},"_1103-中文乱码","1.10.3 中文乱码",[171,146904,146905],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[171,146907,146908],{},"如果读写文件出现乱码，要明确指定编码：",[19,146910,146912],{"className":30507,"code":146911,"language":30509,"meta":24,"style":24},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[26,146913,146914,146948],{"__ignoreMap":24},[29,146915,146916,146918,146921,146923,146926,146928,146931,146933,146936,146938,146941,146943,146945],{"class":31,"line":32},[29,146917,107962],{"class":305},[29,146919,146920],{"class":39}," open",[29,146922,310],{"class":309},[29,146924,146925],{"class":103},"\"data.txt\"",[29,146927,12610],{"class":309},[29,146929,146930],{"class":103},"\"r\"",[29,146932,12610],{"class":309},[29,146934,146935],{"class":5391},"encoding",[29,146937,355],{"class":305},[29,146939,146940],{"class":103},"\"utf-8\"",[29,146942,13889],{"class":309},[29,146944,31512],{"class":305},[29,146946,146947],{"class":309}," f:\n",[29,146949,146950,146953,146955],{"class":31,"line":43},[29,146951,146952],{"class":309},"    content ",[29,146954,355],{"class":305},[29,146956,146957],{"class":309}," f.read()\n",[14,146959,146961],{"id":146960},"_111-本章练习","1.11 本章练习",[259,146963,146964,146967,146973],{},[178,146965,146966],{},"安装 Python，并在终端输出版本号。",[178,146968,146969,146970,146972],{},"新建 ",[26,146971,146527],{},"，输出自己的姓名、年龄、学习目标。",[178,146974,104495,146975,146977],{},[26,146976,146601],{}," 输出下面格式：",[19,146979,146982],{"className":146980,"code":146981,"language":5362,"meta":24},[5360],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[26,146983,146981],{"__ignoreMap":24},[259,146985,146986],{"start":59},[178,146987,104495,146988,146990],{},[26,146989,146727],{}," 输出日期：",[19,146992,146995],{"className":146993,"code":146994,"language":5362,"meta":24},[5360],"2024-10-10\n",[26,146996,146994],{"__ignoreMap":24},[259,146998,146999],{"start":67},[178,147000,104495,147001,147003,147004,147006],{},[26,147002,45930],{}," 让两次 ",[26,147005,146601],{}," 输出在同一行。",[223,147008,147009],{},"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":24,"searchDepth":43,"depth":43,"links":147011},[147012,147013,147014,147019,147020,147021,147025,147026,147027,147028,147033],{"id":145894,"depth":43,"text":145895},{"id":145938,"depth":43,"text":145939},{"id":146039,"depth":43,"text":146040,"children":147015},[147016,147017,147018],{"id":146043,"depth":51,"text":146044},{"id":146098,"depth":51,"text":146099},{"id":146134,"depth":51,"text":146135},{"id":146207,"depth":43,"text":146208},{"id":146352,"depth":43,"text":146353},{"id":146457,"depth":43,"text":146458,"children":147022},[147023,147024],{"id":146461,"depth":51,"text":146462},{"id":146490,"depth":51,"text":146491},{"id":146520,"depth":43,"text":146521},{"id":146595,"depth":43,"text":146596},{"id":146773,"depth":43,"text":146774},{"id":146855,"depth":43,"text":146856,"children":147029},[147030,147031,147032],{"id":146859,"depth":51,"text":146860},{"id":146885,"depth":51,"text":146886},{"id":146901,"depth":51,"text":146902},{"id":146960,"depth":43,"text":146961},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145886,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147040,"title":147041,"body":147042,"description":230,"extension":231,"meta":149446,"navigation":233,"path":149447,"seo":149448,"stem":149449,"__hash__":149450},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147043,"toc":149431},[147044,147047,147051,147054,147057,147074,147077,147119,147122,147126,147129,147132,147169,147172,147206,147209,147301,147305,147319,147322,147349,147352,147356,147459,147466,147469,147486,147490,147497,147686,147689,147762,147766,147769,147853,147856,147888,147892,148096,148099,148103,148109,148211,148214,148470,148474,148477,148480,148494,148496,148682,148686,149048,149054,149058,149061,149185,149188,149367,149370,149374,149407,149411,149428],[10,147045,147041],{"id":147046},"_10-json与pyecharts折线图",[14,147048,147050],{"id":147049},"_101-数据可视化","10.1 数据可视化",[171,147052,147053],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[171,147055,147056],{},"常见图表：",[259,147058,147059,147062,147065,147068,147071],{},[178,147060,147061],{},"折线图：看趋势。",[178,147063,147064],{},"柱状图：看分类对比。",[178,147066,147067],{},"饼图：看占比。",[178,147069,147070],{},"地图：看地域分布。",[178,147072,147073],{},"散点图：看两个变量之间的关系。",[171,147075,147076],{},"Python 可视化常用库：",[445,147078,147079,147087],{},[448,147080,147081],{},[451,147082,147083,147085],{},[454,147084,146290],{},[454,147086,23915],{},[492,147088,147089,147096,147104,147111],{},[451,147090,147091,147093],{},[497,147092,146322],{},[497,147094,147095],{},"基础、经典、可定制",[451,147097,147098,147101],{},[497,147099,147100],{},"seaborn",[497,147102,147103],{},"统计图表更美观",[451,147105,147106,147108],{},[497,147107,146330],{},[497,147109,147110],{},"生成交互式网页图表",[451,147112,147113,147116],{},[497,147114,147115],{},"plotly",[497,147117,147118],{},"交互图表能力强",[171,147120,147121],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147123,147125],{"id":147124},"_102-json回顾","10.2 JSON回顾",[171,147127,147128],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[171,147130,147131],{},"Python 字典：",[19,147133,147135],{"className":30507,"code":147134,"language":30509,"meta":24,"style":24},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[26,147136,147137,147145,147156,147165],{"__ignoreMap":24},[29,147138,147139,147141,147143],{"class":31,"line":32},[29,147140,101787],{"class":309},[29,147142,355],{"class":305},[29,147144,15747],{"class":309},[29,147146,147147,147150,147152,147154],{"class":31,"line":43},[29,147148,147149],{"class":103},"    \"name\"",[29,147151,51566],{"class":309},[29,147153,69398],{"class":103},[29,147155,31595],{"class":309},[29,147157,147158,147161,147163],{"class":31,"line":51},[29,147159,147160],{"class":103},"    \"value\"",[29,147162,51566],{"class":309},[29,147164,97587],{"class":39},[29,147166,147167],{"class":31,"line":59},[29,147168,1741],{"class":309},[171,147170,147171],{},"JSON 字符串：",[19,147173,147176],{"className":147174,"code":147175,"language":145921,"meta":24,"style":24},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[26,147177,147178,147182,147193,147202],{"__ignoreMap":24},[29,147179,147180],{"class":31,"line":32},[29,147181,1722],{"class":309},[29,147183,147184,147187,147189,147191],{"class":31,"line":43},[29,147185,147186],{"class":39},"  \"name\"",[29,147188,51566],{"class":309},[29,147190,69398],{"class":103},[29,147192,31595],{"class":309},[29,147194,147195,147198,147200],{"class":31,"line":51},[29,147196,147197],{"class":39},"  \"value\"",[29,147199,51566],{"class":309},[29,147201,97587],{"class":39},[29,147203,147204],{"class":31,"line":59},[29,147205,1741],{"class":309},[171,147207,147208],{},"Python 与 JSON 的转换：",[19,147210,147212],{"className":30507,"code":147211,"language":30509,"meta":24,"style":24},"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",[26,147213,147214,147221,147225,147250,147254,147273,147280,147284,147294],{"__ignoreMap":24},[29,147215,147216,147218],{"class":31,"line":32},[29,147217,30521],{"class":305},[29,147219,147220],{"class":309}," json\n",[29,147222,147223],{"class":31,"line":43},[29,147224,2575],{"emptyLinePlaceholder":233},[29,147226,147227,147229,147231,147233,147235,147237,147239,147241,147244,147246,147248],{"class":31,"line":51},[29,147228,101787],{"class":309},[29,147230,355],{"class":305},[29,147232,4623],{"class":309},[29,147234,62808],{"class":103},[29,147236,51566],{"class":309},[29,147238,69398],{"class":103},[29,147240,12610],{"class":309},[29,147242,147243],{"class":103},"\"value\"",[29,147245,51566],{"class":309},[29,147247,619],{"class":39},[29,147249,1741],{"class":309},[29,147251,147252],{"class":31,"line":59},[29,147253,2575],{"emptyLinePlaceholder":233},[29,147255,147256,147259,147261,147264,147267,147269,147271],{"class":31,"line":67},[29,147257,147258],{"class":309},"json_text ",[29,147260,355],{"class":305},[29,147262,147263],{"class":309}," json.dumps(data, ",[29,147265,147266],{"class":5391},"ensure_ascii",[29,147268,355],{"class":305},[29,147270,34116],{"class":39},[29,147272,316],{"class":309},[29,147274,147275,147277],{"class":31,"line":75},[29,147276,30544],{"class":39},[29,147278,147279],{"class":309},"(json_text)\n",[29,147281,147282],{"class":31,"line":83},[29,147283,2575],{"emptyLinePlaceholder":233},[29,147285,147286,147289,147291],{"class":31,"line":158},[29,147287,147288],{"class":309},"new_data ",[29,147290,355],{"class":305},[29,147292,147293],{"class":309}," json.loads(json_text)\n",[29,147295,147296,147298],{"class":31,"line":166},[29,147297,30544],{"class":39},[29,147299,147300],{"class":309},"(new_data)\n",[14,147302,147304],{"id":147303},"_103-安装pyecharts","10.3 安装pyecharts",[19,147306,147308],{"className":21,"code":147307,"language":23,"meta":24,"style":24},"pip install pyecharts\n",[26,147309,147310],{"__ignoreMap":24},[29,147311,147312,147314,147316],{"class":31,"line":32},[29,147313,24004],{"class":35},[29,147315,24007],{"class":103},[29,147317,147318],{"class":103}," pyecharts\n",[171,147320,147321],{},"验证：",[19,147323,147325],{"className":30507,"code":147324,"language":30509,"meta":24,"style":24},"import pyecharts\n\nprint(pyecharts.__version__)\n",[26,147326,147327,147333,147337],{"__ignoreMap":24},[29,147328,147329,147331],{"class":31,"line":32},[29,147330,30521],{"class":305},[29,147332,147318],{"class":309},[29,147334,147335],{"class":31,"line":43},[29,147336,2575],{"emptyLinePlaceholder":233},[29,147338,147339,147341,147344,147347],{"class":31,"line":51},[29,147340,30544],{"class":39},[29,147342,147343],{"class":309},"(pyecharts.",[29,147345,147346],{"class":39},"__version__",[29,147348,316],{"class":309},[171,147350,147351],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147353,147355],{"id":147354},"_104-第一个折线图","10.4 第一个折线图",[19,147357,147359],{"className":30507,"code":147358,"language":30509,"meta":24,"style":24},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[26,147360,147361,147373,147377,147387,147417,147449],{"__ignoreMap":24},[29,147362,147363,147365,147368,147370],{"class":31,"line":32},[29,147364,30866],{"class":305},[29,147366,147367],{"class":309}," pyecharts.charts ",[29,147369,30521],{"class":305},[29,147371,147372],{"class":309}," Line\n",[29,147374,147375],{"class":31,"line":43},[29,147376,2575],{"emptyLinePlaceholder":233},[29,147378,147379,147382,147384],{"class":31,"line":51},[29,147380,147381],{"class":309},"line ",[29,147383,355],{"class":305},[29,147385,147386],{"class":309}," Line()\n",[29,147388,147389,147392,147395,147397,147400,147402,147405,147407,147410,147412,147415],{"class":31,"line":59},[29,147390,147391],{"class":309},"line.add_xaxis([",[29,147393,147394],{"class":103},"\"周一\"",[29,147396,12610],{"class":309},[29,147398,147399],{"class":103},"\"周二\"",[29,147401,12610],{"class":309},[29,147403,147404],{"class":103},"\"周三\"",[29,147406,12610],{"class":309},[29,147408,147409],{"class":103},"\"周四\"",[29,147411,12610],{"class":309},[29,147413,147414],{"class":103},"\"周五\"",[29,147416,4832],{"class":309},[29,147418,147419,147422,147425,147427,147429,147431,147433,147435,147437,147439,147442,147444,147447],{"class":31,"line":67},[29,147420,147421],{"class":309},"line.add_yaxis(",[29,147423,147424],{"class":103},"\"销售额\"",[29,147426,77647],{"class":309},[29,147428,619],{"class":39},[29,147430,12610],{"class":309},[29,147432,1125],{"class":39},[29,147434,12610],{"class":309},[29,147436,1170],{"class":39},[29,147438,12610],{"class":309},[29,147440,147441],{"class":39},"150",[29,147443,12610],{"class":309},[29,147445,147446],{"class":39},"180",[29,147448,4832],{"class":309},[29,147450,147451,147454,147457],{"class":31,"line":75},[29,147452,147453],{"class":309},"line.render(",[29,147455,147456],{"class":103},"\"line.html\"",[29,147458,316],{"class":309},[171,147460,147461,147462,147465],{},"运行后会生成 ",[26,147463,147464],{},"line.html","，用浏览器打开即可看到图表。",[171,147467,147468],{},"核心步骤：",[259,147470,147471,147474,147477,147480,147483],{},[178,147472,147473],{},"导入图表类。",[178,147475,147476],{},"创建图表对象。",[178,147478,147479],{},"添加 x 轴数据。",[178,147481,147482],{},"添加 y 轴数据。",[178,147484,147485],{},"渲染为 HTML。",[14,147487,147489],{"id":147488},"_105-全局配置","10.5 全局配置",[171,147491,147492,147493,147496],{},"常用配置在 ",[26,147494,147495],{},"pyecharts.options"," 中。",[19,147498,147500],{"className":30507,"code":147499,"language":30509,"meta":24,"style":24},"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",[26,147501,147502,147519,147529,147533,147541,147565,147593,147598,147617,147636,147654,147674,147678],{"__ignoreMap":24},[29,147503,147504,147506,147509,147511,147514,147516],{"class":31,"line":32},[29,147505,30866],{"class":305},[29,147507,147508],{"class":309}," pyecharts ",[29,147510,30521],{"class":305},[29,147512,147513],{"class":309}," options ",[29,147515,31512],{"class":305},[29,147517,147518],{"class":309}," opts\n",[29,147520,147521,147523,147525,147527],{"class":31,"line":43},[29,147522,30866],{"class":305},[29,147524,147367],{"class":309},[29,147526,30521],{"class":305},[29,147528,147372],{"class":309},[29,147530,147531],{"class":31,"line":51},[29,147532,2575],{"emptyLinePlaceholder":233},[29,147534,147535,147537,147539],{"class":31,"line":59},[29,147536,147381],{"class":309},[29,147538,355],{"class":305},[29,147540,147386],{"class":309},[29,147542,147543,147545,147547,147549,147551,147553,147555,147557,147559,147561,147563],{"class":31,"line":67},[29,147544,147391],{"class":309},[29,147546,147394],{"class":103},[29,147548,12610],{"class":309},[29,147550,147399],{"class":103},[29,147552,12610],{"class":309},[29,147554,147404],{"class":103},[29,147556,12610],{"class":309},[29,147558,147409],{"class":103},[29,147560,12610],{"class":309},[29,147562,147414],{"class":103},[29,147564,4832],{"class":309},[29,147566,147567,147569,147571,147573,147575,147577,147579,147581,147583,147585,147587,147589,147591],{"class":31,"line":75},[29,147568,147421],{"class":309},[29,147570,147424],{"class":103},[29,147572,77647],{"class":309},[29,147574,619],{"class":39},[29,147576,12610],{"class":309},[29,147578,1125],{"class":39},[29,147580,12610],{"class":309},[29,147582,1170],{"class":39},[29,147584,12610],{"class":309},[29,147586,147441],{"class":39},[29,147588,12610],{"class":309},[29,147590,147446],{"class":39},[29,147592,4832],{"class":309},[29,147594,147595],{"class":31,"line":83},[29,147596,147597],{"class":309},"line.set_global_opts(\n",[29,147599,147600,147603,147605,147608,147610,147612,147615],{"class":31,"line":158},[29,147601,147602],{"class":5391},"    title_opts",[29,147604,355],{"class":305},[29,147606,147607],{"class":309},"opts.TitleOpts(",[29,147609,51536],{"class":5391},[29,147611,355],{"class":305},[29,147613,147614],{"class":103},"\"一周销售额\"",[29,147616,38176],{"class":309},[29,147618,147619,147622,147624,147627,147629,147631,147634],{"class":31,"line":166},[29,147620,147621],{"class":5391},"    xaxis_opts",[29,147623,355],{"class":305},[29,147625,147626],{"class":309},"opts.AxisOpts(",[29,147628,79939],{"class":5391},[29,147630,355],{"class":305},[29,147632,147633],{"class":103},"\"日期\"",[29,147635,38176],{"class":309},[29,147637,147638,147641,147643,147645,147647,147649,147652],{"class":31,"line":1505},[29,147639,147640],{"class":5391},"    yaxis_opts",[29,147642,355],{"class":305},[29,147644,147626],{"class":309},[29,147646,79939],{"class":5391},[29,147648,355],{"class":305},[29,147650,147651],{"class":103},"\"金额\"",[29,147653,38176],{"class":309},[29,147655,147656,147659,147661,147664,147667,147669,147672],{"class":31,"line":1788},[29,147657,147658],{"class":5391},"    tooltip_opts",[29,147660,355],{"class":305},[29,147662,147663],{"class":309},"opts.TooltipOpts(",[29,147665,147666],{"class":5391},"trigger",[29,147668,355],{"class":305},[29,147670,147671],{"class":103},"\"axis\"",[29,147673,38176],{"class":309},[29,147675,147676],{"class":31,"line":1793},[29,147677,316],{"class":309},[29,147679,147680,147682,147684],{"class":31,"line":1799},[29,147681,147453],{"class":309},[29,147683,147456],{"class":103},[29,147685,316],{"class":309},[171,147687,147688],{},"常见全局配置：",[445,147690,147691,147700],{},[448,147692,147693],{},[451,147694,147695,147698],{},[454,147696,147697],{},"配置",[454,147699,102825],{},[492,147701,147702,147712,147722,147732,147742,147752],{},[451,147703,147704,147709],{},[497,147705,147706],{},[26,147707,147708],{},"TitleOpts",[497,147710,147711],{},"标题",[451,147713,147714,147719],{},[497,147715,147716],{},[26,147717,147718],{},"LegendOpts",[497,147720,147721],{},"图例",[451,147723,147724,147729],{},[497,147725,147726],{},[26,147727,147728],{},"TooltipOpts",[497,147730,147731],{},"提示框",[451,147733,147734,147739],{},[497,147735,147736],{},[26,147737,147738],{},"AxisOpts",[497,147740,147741],{},"坐标轴",[451,147743,147744,147749],{},[497,147745,147746],{},[26,147747,147748],{},"VisualMapOpts",[497,147750,147751],{},"视觉映射",[451,147753,147754,147759],{},[497,147755,147756],{},[26,147757,147758],{},"DataZoomOpts",[497,147760,147761],{},"区域缩放",[14,147763,147765],{"id":147764},"_106-系列配置","10.6 系列配置",[171,147767,147768],{},"系列配置作用于某一组数据。",[19,147770,147772],{"className":30507,"code":147771,"language":30509,"meta":24,"style":24},"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",[26,147773,147774,147779,147790,147819,147830,147849],{"__ignoreMap":24},[29,147775,147776],{"class":31,"line":32},[29,147777,147778],{"class":309},"line.add_yaxis(\n",[29,147780,147781,147784,147786,147788],{"class":31,"line":43},[29,147782,147783],{"class":5391},"    series_name",[29,147785,355],{"class":305},[29,147787,147424],{"class":103},[29,147789,31595],{"class":309},[29,147791,147792,147795,147797,147799,147801,147803,147805,147807,147809,147811,147813,147815,147817],{"class":31,"line":51},[29,147793,147794],{"class":5391},"    y_axis",[29,147796,355],{"class":305},[29,147798,1198],{"class":309},[29,147800,619],{"class":39},[29,147802,12610],{"class":309},[29,147804,1125],{"class":39},[29,147806,12610],{"class":309},[29,147808,1170],{"class":39},[29,147810,12610],{"class":309},[29,147812,147441],{"class":39},[29,147814,12610],{"class":309},[29,147816,147446],{"class":39},[29,147818,87965],{"class":309},[29,147820,147821,147824,147826,147828],{"class":31,"line":59},[29,147822,147823],{"class":5391},"    is_smooth",[29,147825,355],{"class":305},[29,147827,31605],{"class":39},[29,147829,31595],{"class":309},[29,147831,147832,147835,147837,147840,147843,147845,147847],{"class":31,"line":67},[29,147833,147834],{"class":5391},"    label_opts",[29,147836,355],{"class":305},[29,147838,147839],{"class":309},"opts.LabelOpts(",[29,147841,147842],{"class":5391},"is_show",[29,147844,355],{"class":305},[29,147846,31605],{"class":39},[29,147848,38176],{"class":309},[29,147850,147851],{"class":31,"line":75},[29,147852,316],{"class":309},[171,147854,147855],{},"常用参数：",[259,147857,147858,147864,147870,147876,147882],{},[178,147859,147860,147863],{},[26,147861,147862],{},"series_name","：系列名称。",[178,147865,147866,147869],{},[26,147867,147868],{},"y_axis","：y 轴数据。",[178,147871,147872,147875],{},[26,147873,147874],{},"is_smooth","：是否平滑曲线。",[178,147877,147878,147881],{},[26,147879,147880],{},"label_opts","：标签配置。",[178,147883,147884,147887],{},[26,147885,147886],{},"symbol_size","：标记点大小。",[14,147889,147891],{"id":147890},"_107-多条折线","10.7 多条折线",[19,147893,147895],{"className":30507,"code":147894,"language":30509,"meta":24,"style":24},"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",[26,147896,147897,147911,147921,147925,147954,147958,147966,147971,148009,148046,148050,148067,148083,148087],{"__ignoreMap":24},[29,147898,147899,147901,147903,147905,147907,147909],{"class":31,"line":32},[29,147900,30866],{"class":305},[29,147902,147508],{"class":309},[29,147904,30521],{"class":305},[29,147906,147513],{"class":309},[29,147908,31512],{"class":305},[29,147910,147518],{"class":309},[29,147912,147913,147915,147917,147919],{"class":31,"line":43},[29,147914,30866],{"class":305},[29,147916,147367],{"class":309},[29,147918,30521],{"class":305},[29,147920,147372],{"class":309},[29,147922,147923],{"class":31,"line":51},[29,147924,2575],{"emptyLinePlaceholder":233},[29,147926,147927,147930,147932,147934,147936,147938,147940,147942,147944,147946,147948,147950,147952],{"class":31,"line":59},[29,147928,147929],{"class":309},"dates ",[29,147931,355],{"class":305},[29,147933,52355],{"class":309},[29,147935,147394],{"class":103},[29,147937,12610],{"class":309},[29,147939,147399],{"class":103},[29,147941,12610],{"class":309},[29,147943,147404],{"class":103},[29,147945,12610],{"class":309},[29,147947,147409],{"class":103},[29,147949,12610],{"class":309},[29,147951,147414],{"class":103},[29,147953,33375],{"class":309},[29,147955,147956],{"class":31,"line":67},[29,147957,2575],{"emptyLinePlaceholder":233},[29,147959,147960,147962,147964],{"class":31,"line":75},[29,147961,147381],{"class":309},[29,147963,355],{"class":305},[29,147965,147386],{"class":309},[29,147967,147968],{"class":31,"line":83},[29,147969,147970],{"class":309},"line.add_xaxis(dates)\n",[29,147972,147973,147975,147978,147980,147982,147984,147987,147989,147991,147993,147995,147997,147999,148001,148003,148005,148007],{"class":31,"line":158},[29,147974,147421],{"class":309},[29,147976,147977],{"class":103},"\"线上销售\"",[29,147979,77647],{"class":309},[29,147981,619],{"class":39},[29,147983,12610],{"class":309},[29,147985,147986],{"class":39},"130",[29,147988,12610],{"class":309},[29,147990,1125],{"class":39},[29,147992,12610],{"class":309},[29,147994,21223],{"class":39},[29,147996,12610],{"class":309},[29,147998,1898],{"class":39},[29,148000,112331],{"class":309},[29,148002,147874],{"class":5391},[29,148004,355],{"class":305},[29,148006,31605],{"class":39},[29,148008,316],{"class":309},[29,148010,148011,148013,148016,148018,148020,148022,148024,148026,148028,148030,148032,148034,148036,148038,148040,148042,148044],{"class":31,"line":166},[29,148012,147421],{"class":309},[29,148014,148015],{"class":103},"\"线下销售\"",[29,148017,77647],{"class":309},[29,148019,920],{"class":39},[29,148021,12610],{"class":309},[29,148023,1170],{"class":39},[29,148025,12610],{"class":309},[29,148027,619],{"class":39},[29,148029,12610],{"class":309},[29,148031,1125],{"class":39},[29,148033,12610],{"class":309},[29,148035,147441],{"class":39},[29,148037,112331],{"class":309},[29,148039,147874],{"class":5391},[29,148041,355],{"class":305},[29,148043,31605],{"class":39},[29,148045,316],{"class":309},[29,148047,148048],{"class":31,"line":1505},[29,148049,147597],{"class":309},[29,148051,148052,148054,148056,148058,148060,148062,148065],{"class":31,"line":1788},[29,148053,147602],{"class":5391},[29,148055,355],{"class":305},[29,148057,147607],{"class":309},[29,148059,51536],{"class":5391},[29,148061,355],{"class":305},[29,148063,148064],{"class":103},"\"线上线下销售趋势\"",[29,148066,38176],{"class":309},[29,148068,148069,148071,148073,148075,148077,148079,148081],{"class":31,"line":1793},[29,148070,147658],{"class":5391},[29,148072,355],{"class":305},[29,148074,147663],{"class":309},[29,148076,147666],{"class":5391},[29,148078,355],{"class":305},[29,148080,147671],{"class":103},[29,148082,38176],{"class":309},[29,148084,148085],{"class":31,"line":1799},[29,148086,316],{"class":309},[29,148088,148089,148091,148094],{"class":31,"line":1804},[29,148090,147453],{"class":309},[29,148092,148093],{"class":103},"\"sales.html\"",[29,148095,316],{"class":309},[171,148097,148098],{},"多条折线适合比较不同指标或不同地区。",[14,148100,148102],{"id":148101},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[171,148104,148105,148106,24791],{},"假设 ",[26,148107,148108],{},"sales.json",[19,148110,148112],{"className":147174,"code":148111,"language":145921,"meta":24,"style":24},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[26,148113,148114,148119,148151,148179,148207],{"__ignoreMap":24},[29,148115,148116],{"class":31,"line":32},[29,148117,148118],{"class":309},"[\n",[29,148120,148121,148124,148127,148129,148131,148133,148136,148138,148140,148142,148145,148147,148149],{"class":31,"line":43},[29,148122,148123],{"class":309},"  {",[29,148125,148126],{"class":39},"\"date\"",[29,148128,51566],{"class":309},[29,148130,147394],{"class":103},[29,148132,12610],{"class":309},[29,148134,148135],{"class":39},"\"online\"",[29,148137,51566],{"class":309},[29,148139,619],{"class":39},[29,148141,12610],{"class":309},[29,148143,148144],{"class":39},"\"offline\"",[29,148146,51566],{"class":309},[29,148148,920],{"class":39},[29,148150,5105],{"class":309},[29,148152,148153,148155,148157,148159,148161,148163,148165,148167,148169,148171,148173,148175,148177],{"class":31,"line":51},[29,148154,148123],{"class":309},[29,148156,148126],{"class":39},[29,148158,51566],{"class":309},[29,148160,147399],{"class":103},[29,148162,12610],{"class":309},[29,148164,148135],{"class":39},[29,148166,51566],{"class":309},[29,148168,147986],{"class":39},[29,148170,12610],{"class":309},[29,148172,148144],{"class":39},[29,148174,51566],{"class":309},[29,148176,1170],{"class":39},[29,148178,5105],{"class":309},[29,148180,148181,148183,148185,148187,148189,148191,148193,148195,148197,148199,148201,148203,148205],{"class":31,"line":59},[29,148182,148123],{"class":309},[29,148184,148126],{"class":39},[29,148186,51566],{"class":309},[29,148188,147404],{"class":103},[29,148190,12610],{"class":309},[29,148192,148135],{"class":39},[29,148194,51566],{"class":309},[29,148196,1125],{"class":39},[29,148198,12610],{"class":309},[29,148200,148144],{"class":39},[29,148202,51566],{"class":309},[29,148204,619],{"class":39},[29,148206,1741],{"class":309},[29,148208,148209],{"class":31,"line":67},[29,148210,33375],{"class":309},[171,148212,148213],{},"读取并绘图：",[19,148215,148217],{"className":30507,"code":148216,"language":30509,"meta":24,"style":24},"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",[26,148218,148219,148225,148239,148249,148253,148285,148298,148302,148310,148319,148328,148332,148344,148353,148362,148371,148375,148383,148387,148404,148421,148425,148442,148458,148462],{"__ignoreMap":24},[29,148220,148221,148223],{"class":31,"line":32},[29,148222,30521],{"class":305},[29,148224,147220],{"class":309},[29,148226,148227,148229,148231,148233,148235,148237],{"class":31,"line":43},[29,148228,30866],{"class":305},[29,148230,147508],{"class":309},[29,148232,30521],{"class":305},[29,148234,147513],{"class":309},[29,148236,31512],{"class":305},[29,148238,147518],{"class":309},[29,148240,148241,148243,148245,148247],{"class":31,"line":51},[29,148242,30866],{"class":305},[29,148244,147367],{"class":309},[29,148246,30521],{"class":305},[29,148248,147372],{"class":309},[29,148250,148251],{"class":31,"line":59},[29,148252,2575],{"emptyLinePlaceholder":233},[29,148254,148255,148257,148259,148261,148264,148266,148268,148270,148272,148274,148276,148278,148280,148283],{"class":31,"line":67},[29,148256,107962],{"class":305},[29,148258,146920],{"class":39},[29,148260,310],{"class":309},[29,148262,148263],{"class":103},"\"sales.json\"",[29,148265,12610],{"class":309},[29,148267,146930],{"class":103},[29,148269,12610],{"class":309},[29,148271,146935],{"class":5391},[29,148273,355],{"class":305},[29,148275,146940],{"class":103},[29,148277,13889],{"class":309},[29,148279,31512],{"class":305},[29,148281,148282],{"class":5391}," file",[29,148284,3914],{"class":309},[29,148286,148287,148289,148291,148294,148296],{"class":31,"line":75},[29,148288,101550],{"class":309},[29,148290,355],{"class":305},[29,148292,148293],{"class":309}," json.load(",[29,148295,45483],{"class":5391},[29,148297,316],{"class":309},[29,148299,148300],{"class":31,"line":83},[29,148301,2575],{"emptyLinePlaceholder":233},[29,148303,148304,148306,148308],{"class":31,"line":158},[29,148305,147929],{"class":309},[29,148307,355],{"class":305},[29,148309,51967],{"class":309},[29,148311,148312,148315,148317],{"class":31,"line":166},[29,148313,148314],{"class":309},"online_sales ",[29,148316,355],{"class":305},[29,148318,51967],{"class":309},[29,148320,148321,148324,148326],{"class":31,"line":1505},[29,148322,148323],{"class":309},"offline_sales ",[29,148325,355],{"class":305},[29,148327,51967],{"class":309},[29,148329,148330],{"class":31,"line":1788},[29,148331,2575],{"emptyLinePlaceholder":233},[29,148333,148334,148336,148339,148341],{"class":31,"line":1793},[29,148335,3200],{"class":305},[29,148337,148338],{"class":309}," item ",[29,148340,26172],{"class":305},[29,148342,148343],{"class":309}," data:\n",[29,148345,148346,148349,148351],{"class":31,"line":1799},[29,148347,148348],{"class":309},"    dates.append(item[",[29,148350,148126],{"class":103},[29,148352,4832],{"class":309},[29,148354,148355,148358,148360],{"class":31,"line":1804},[29,148356,148357],{"class":309},"    online_sales.append(item[",[29,148359,148135],{"class":103},[29,148361,4832],{"class":309},[29,148363,148364,148367,148369],{"class":31,"line":1818},[29,148365,148366],{"class":309},"    offline_sales.append(item[",[29,148368,148144],{"class":103},[29,148370,4832],{"class":309},[29,148372,148373],{"class":31,"line":1823},[29,148374,2575],{"emptyLinePlaceholder":233},[29,148376,148377,148379,148381],{"class":31,"line":1829},[29,148378,147381],{"class":309},[29,148380,355],{"class":305},[29,148382,147386],{"class":309},[29,148384,148385],{"class":31,"line":1850},[29,148386,147970],{"class":309},[29,148388,148389,148391,148393,148396,148398,148400,148402],{"class":31,"line":1855},[29,148390,147421],{"class":309},[29,148392,147977],{"class":103},[29,148394,148395],{"class":309},", online_sales, ",[29,148397,147874],{"class":5391},[29,148399,355],{"class":305},[29,148401,31605],{"class":39},[29,148403,316],{"class":309},[29,148405,148406,148408,148410,148413,148415,148417,148419],{"class":31,"line":1869},[29,148407,147421],{"class":309},[29,148409,148015],{"class":103},[29,148411,148412],{"class":309},", offline_sales, ",[29,148414,147874],{"class":5391},[29,148416,355],{"class":305},[29,148418,31605],{"class":39},[29,148420,316],{"class":309},[29,148422,148423],{"class":31,"line":1874},[29,148424,147597],{"class":309},[29,148426,148427,148429,148431,148433,148435,148437,148440],{"class":31,"line":1903},[29,148428,147602],{"class":5391},[29,148430,355],{"class":305},[29,148432,147607],{"class":309},[29,148434,51536],{"class":5391},[29,148436,355],{"class":305},[29,148438,148439],{"class":103},"\"销售趋势\"",[29,148441,38176],{"class":309},[29,148443,148444,148446,148448,148450,148452,148454,148456],{"class":31,"line":1908},[29,148445,147658],{"class":5391},[29,148447,355],{"class":305},[29,148449,147663],{"class":309},[29,148451,147666],{"class":5391},[29,148453,355],{"class":305},[29,148455,147671],{"class":103},[29,148457,38176],{"class":309},[29,148459,148460],{"class":31,"line":1925},[29,148461,316],{"class":309},[29,148463,148464,148466,148468],{"class":31,"line":1930},[29,148465,147453],{"class":309},[29,148467,148093],{"class":103},[29,148469,316],{"class":309},[14,148471,148473],{"id":148472},"_109-数据清洗","10.9 数据清洗",[171,148475,148476],{},"真实数据经常不整齐，需要清洗。",[171,148478,148479],{},"常见问题：",[259,148481,148482,148485,148488,148491],{},[178,148483,148484],{},"数字是字符串。",[178,148486,148487],{},"字段缺失。",[178,148489,148490],{},"空值。",[178,148492,148493],{},"日期格式不统一。",[171,148495,15310],{},[19,148497,148499],{"className":30507,"code":148498,"language":30509,"meta":24,"style":24},"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",[26,148500,148501,148510,148533,148553,148574,148578,148582,148590,148599,148603,148614,148628,148637,148642,148646,148654,148664,148668,148675],{"__ignoreMap":24},[29,148502,148503,148506,148508],{"class":31,"line":32},[29,148504,148505],{"class":309},"raw_data ",[29,148507,355],{"class":305},[29,148509,55576],{"class":309},[29,148511,148512,148515,148517,148519,148521,148523,148526,148528,148531],{"class":31,"line":43},[29,148513,148514],{"class":309},"    {",[29,148516,148126],{"class":103},[29,148518,51566],{"class":309},[29,148520,147394],{"class":103},[29,148522,12610],{"class":309},[29,148524,148525],{"class":103},"\"sales\"",[29,148527,51566],{"class":309},[29,148529,148530],{"class":103},"\"100\"",[29,148532,5105],{"class":309},[29,148534,148535,148537,148539,148541,148543,148545,148547,148549,148551],{"class":31,"line":51},[29,148536,148514],{"class":309},[29,148538,148126],{"class":103},[29,148540,51566],{"class":309},[29,148542,147399],{"class":103},[29,148544,12610],{"class":309},[29,148546,148525],{"class":103},[29,148548,51566],{"class":309},[29,148550,7827],{"class":103},[29,148552,5105],{"class":309},[29,148554,148555,148557,148559,148561,148563,148565,148567,148569,148572],{"class":31,"line":59},[29,148556,148514],{"class":309},[29,148558,148126],{"class":103},[29,148560,51566],{"class":309},[29,148562,147404],{"class":103},[29,148564,12610],{"class":309},[29,148566,148525],{"class":103},[29,148568,51566],{"class":309},[29,148570,148571],{"class":103},"\"120\"",[29,148573,5105],{"class":309},[29,148575,148576],{"class":31,"line":67},[29,148577,33375],{"class":309},[29,148579,148580],{"class":31,"line":75},[29,148581,2575],{"emptyLinePlaceholder":233},[29,148583,148584,148586,148588],{"class":31,"line":83},[29,148585,147929],{"class":309},[29,148587,355],{"class":305},[29,148589,51967],{"class":309},[29,148591,148592,148595,148597],{"class":31,"line":158},[29,148593,148594],{"class":309},"sales ",[29,148596,355],{"class":305},[29,148598,51967],{"class":309},[29,148600,148601],{"class":31,"line":166},[29,148602,2575],{"emptyLinePlaceholder":233},[29,148604,148605,148607,148609,148611],{"class":31,"line":1505},[29,148606,3200],{"class":305},[29,148608,148338],{"class":309},[29,148610,26172],{"class":305},[29,148612,148613],{"class":309}," raw_data:\n",[29,148615,148616,148619,148621,148624,148626],{"class":31,"line":1788},[29,148617,148618],{"class":309},"    value ",[29,148620,355],{"class":305},[29,148622,148623],{"class":309}," item.get(",[29,148625,148525],{"class":103},[29,148627,316],{"class":309},[29,148629,148630,148632,148634],{"class":31,"line":1793},[29,148631,3276],{"class":305},[29,148633,39059],{"class":305},[29,148635,148636],{"class":309}," value:\n",[29,148638,148639],{"class":31,"line":1799},[29,148640,148641],{"class":305},"        continue\n",[29,148643,148644],{"class":31,"line":1804},[29,148645,2575],{"emptyLinePlaceholder":233},[29,148647,148648,148650,148652],{"class":31,"line":1818},[29,148649,148348],{"class":309},[29,148651,148126],{"class":103},[29,148653,4832],{"class":309},[29,148655,148656,148659,148661],{"class":31,"line":1823},[29,148657,148658],{"class":309},"    sales.append(",[29,148660,313],{"class":39},[29,148662,148663],{"class":309},"(value))\n",[29,148665,148666],{"class":31,"line":1829},[29,148667,2575],{"emptyLinePlaceholder":233},[29,148669,148670,148672],{"class":31,"line":1850},[29,148671,30544],{"class":39},[29,148673,148674],{"class":309},"(dates)\n",[29,148676,148677,148679],{"class":31,"line":1855},[29,148678,30544],{"class":39},[29,148680,148681],{"class":309},"(sales)\n",[14,148683,148685],{"id":148684},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[19,148687,148689],{"className":30507,"code":148688,"language":30509,"meta":24,"style":24},"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",[26,148690,148691,148705,148715,148719,148727,148748,148770,148792,148814,148836,148840,148844,148866,148887,148891,148899,148903,148907,148917,148926,148936,148952,148956,148960,148977,148993,149009,149025,149035,149039],{"__ignoreMap":24},[29,148692,148693,148695,148697,148699,148701,148703],{"class":31,"line":32},[29,148694,30866],{"class":305},[29,148696,147508],{"class":309},[29,148698,30521],{"class":305},[29,148700,147513],{"class":309},[29,148702,31512],{"class":305},[29,148704,147518],{"class":309},[29,148706,148707,148709,148711,148713],{"class":31,"line":43},[29,148708,30866],{"class":305},[29,148710,147367],{"class":309},[29,148712,30521],{"class":305},[29,148714,147372],{"class":309},[29,148716,148717],{"class":31,"line":51},[29,148718,2575],{"emptyLinePlaceholder":233},[29,148720,148721,148723,148725],{"class":31,"line":59},[29,148722,148594],{"class":309},[29,148724,355],{"class":305},[29,148726,55576],{"class":309},[29,148728,148729,148731,148733,148735,148738,148740,148742,148744,148746],{"class":31,"line":67},[29,148730,148514],{"class":309},[29,148732,148126],{"class":103},[29,148734,51566],{"class":309},[29,148736,148737],{"class":103},"\"2024-10-01\"",[29,148739,12610],{"class":309},[29,148741,84213],{"class":103},[29,148743,51566],{"class":309},[29,148745,92152],{"class":39},[29,148747,5105],{"class":309},[29,148749,148750,148752,148754,148756,148759,148761,148763,148765,148768],{"class":31,"line":75},[29,148751,148514],{"class":309},[29,148753,148126],{"class":103},[29,148755,51566],{"class":309},[29,148757,148758],{"class":103},"\"2024-10-02\"",[29,148760,12610],{"class":309},[29,148762,84213],{"class":103},[29,148764,51566],{"class":309},[29,148766,148767],{"class":39},"1800",[29,148769,5105],{"class":309},[29,148771,148772,148774,148776,148778,148781,148783,148785,148787,148790],{"class":31,"line":83},[29,148773,148514],{"class":309},[29,148775,148126],{"class":103},[29,148777,51566],{"class":309},[29,148779,148780],{"class":103},"\"2024-10-03\"",[29,148782,12610],{"class":309},[29,148784,84213],{"class":103},[29,148786,51566],{"class":309},[29,148788,148789],{"class":39},"1500",[29,148791,5105],{"class":309},[29,148793,148794,148796,148798,148800,148803,148805,148807,148809,148812],{"class":31,"line":158},[29,148795,148514],{"class":309},[29,148797,148126],{"class":103},[29,148799,51566],{"class":309},[29,148801,148802],{"class":103},"\"2024-10-04\"",[29,148804,12610],{"class":309},[29,148806,84213],{"class":103},[29,148808,51566],{"class":309},[29,148810,148811],{"class":39},"2100",[29,148813,5105],{"class":309},[29,148815,148816,148818,148820,148822,148825,148827,148829,148831,148834],{"class":31,"line":166},[29,148817,148514],{"class":309},[29,148819,148126],{"class":103},[29,148821,51566],{"class":309},[29,148823,148824],{"class":103},"\"2024-10-05\"",[29,148826,12610],{"class":309},[29,148828,84213],{"class":103},[29,148830,51566],{"class":309},[29,148832,148833],{"class":39},"2600",[29,148835,5105],{"class":309},[29,148837,148838],{"class":31,"line":1505},[29,148839,33375],{"class":309},[29,148841,148842],{"class":31,"line":1788},[29,148843,2575],{"emptyLinePlaceholder":233},[29,148845,148846,148848,148850,148853,148855,148857,148859,148861,148863],{"class":31,"line":1793},[29,148847,147929],{"class":309},[29,148849,355],{"class":305},[29,148851,148852],{"class":309}," [item[",[29,148854,148126],{"class":103},[29,148856,4618],{"class":309},[29,148858,3200],{"class":305},[29,148860,148338],{"class":309},[29,148862,26172],{"class":305},[29,148864,148865],{"class":309}," sales]\n",[29,148867,148868,148871,148873,148875,148877,148879,148881,148883,148885],{"class":31,"line":1799},[29,148869,148870],{"class":309},"amounts ",[29,148872,355],{"class":305},[29,148874,148852],{"class":309},[29,148876,84213],{"class":103},[29,148878,4618],{"class":309},[29,148880,3200],{"class":305},[29,148882,148338],{"class":309},[29,148884,26172],{"class":305},[29,148886,148865],{"class":309},[29,148888,148889],{"class":31,"line":1804},[29,148890,2575],{"emptyLinePlaceholder":233},[29,148892,148893,148895,148897],{"class":31,"line":1818},[29,148894,147381],{"class":309},[29,148896,355],{"class":305},[29,148898,147386],{"class":309},[29,148900,148901],{"class":31,"line":1823},[29,148902,147970],{"class":309},[29,148904,148905],{"class":31,"line":1829},[29,148906,147778],{"class":309},[29,148908,148909,148911,148913,148915],{"class":31,"line":1850},[29,148910,147783],{"class":5391},[29,148912,355],{"class":305},[29,148914,147424],{"class":103},[29,148916,31595],{"class":309},[29,148918,148919,148921,148923],{"class":31,"line":1855},[29,148920,147794],{"class":5391},[29,148922,355],{"class":305},[29,148924,148925],{"class":309},"amounts,\n",[29,148927,148928,148930,148932,148934],{"class":31,"line":1869},[29,148929,147823],{"class":5391},[29,148931,355],{"class":305},[29,148933,31605],{"class":39},[29,148935,31595],{"class":309},[29,148937,148938,148940,148942,148944,148946,148948,148950],{"class":31,"line":1874},[29,148939,147834],{"class":5391},[29,148941,355],{"class":305},[29,148943,147839],{"class":309},[29,148945,147842],{"class":5391},[29,148947,355],{"class":305},[29,148949,31605],{"class":39},[29,148951,38176],{"class":309},[29,148953,148954],{"class":31,"line":1903},[29,148955,316],{"class":309},[29,148957,148958],{"class":31,"line":1908},[29,148959,147597],{"class":309},[29,148961,148962,148964,148966,148968,148970,148972,148975],{"class":31,"line":1925},[29,148963,147602],{"class":5391},[29,148965,355],{"class":305},[29,148967,147607],{"class":309},[29,148969,51536],{"class":5391},[29,148971,355],{"class":305},[29,148973,148974],{"class":103},"\"每日销售额\"",[29,148976,38176],{"class":309},[29,148978,148979,148981,148983,148985,148987,148989,148991],{"class":31,"line":1930},[29,148980,147621],{"class":5391},[29,148982,355],{"class":305},[29,148984,147626],{"class":309},[29,148986,79939],{"class":5391},[29,148988,355],{"class":305},[29,148990,147633],{"class":103},[29,148992,38176],{"class":309},[29,148994,148995,148997,148999,149001,149003,149005,149007],{"class":31,"line":1935},[29,148996,147640],{"class":5391},[29,148998,355],{"class":305},[29,149000,147626],{"class":309},[29,149002,79939],{"class":5391},[29,149004,355],{"class":305},[29,149006,147651],{"class":103},[29,149008,38176],{"class":309},[29,149010,149011,149013,149015,149017,149019,149021,149023],{"class":31,"line":1940},[29,149012,147658],{"class":5391},[29,149014,355],{"class":305},[29,149016,147663],{"class":309},[29,149018,147666],{"class":5391},[29,149020,355],{"class":305},[29,149022,147671],{"class":103},[29,149024,38176],{"class":309},[29,149026,149027,149030,149032],{"class":31,"line":1954},[29,149028,149029],{"class":5391},"    datazoom_opts",[29,149031,355],{"class":305},[29,149033,149034],{"class":309},"[opts.DataZoomOpts()],\n",[29,149036,149037],{"class":31,"line":1959},[29,149038,316],{"class":309},[29,149040,149041,149043,149046],{"class":31,"line":2752},[29,149042,147453],{"class":309},[29,149044,149045],{"class":103},"\"daily_sales.html\"",[29,149047,316],{"class":309},[171,149049,149050,149053],{},[26,149051,149052],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149055,149057],{"id":149056},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[171,149059,149060],{},"如果数据结构如下：",[19,149062,149064],{"className":30507,"code":149063,"language":30509,"meta":24,"style":24},"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",[26,149065,149066,149074,149082,149104,149125,149130,149137,149157,149177,149181],{"__ignoreMap":24},[29,149067,149068,149070,149072],{"class":31,"line":32},[29,149069,101787],{"class":309},[29,149071,355],{"class":305},[29,149073,15747],{"class":309},[29,149075,149076,149079],{"class":31,"line":43},[29,149077,149078],{"class":103},"    \"北京\"",[29,149080,149081],{"class":309},": [\n",[29,149083,149084,149086,149088,149090,149093,149095,149098,149100,149102],{"class":31,"line":51},[29,149085,5092],{"class":309},[29,149087,148126],{"class":103},[29,149089,51566],{"class":309},[29,149091,149092],{"class":103},"\"2024-01-01\"",[29,149094,12610],{"class":309},[29,149096,149097],{"class":103},"\"confirm\"",[29,149099,51566],{"class":309},[29,149101,754],{"class":39},[29,149103,5105],{"class":309},[29,149105,149106,149108,149110,149112,149115,149117,149119,149121,149123],{"class":31,"line":59},[29,149107,5092],{"class":309},[29,149109,148126],{"class":103},[29,149111,51566],{"class":309},[29,149113,149114],{"class":103},"\"2024-01-02\"",[29,149116,12610],{"class":309},[29,149118,149097],{"class":103},[29,149120,51566],{"class":309},[29,149122,806],{"class":39},[29,149124,5105],{"class":309},[29,149126,149127],{"class":31,"line":67},[29,149128,149129],{"class":309},"    ],\n",[29,149131,149132,149135],{"class":31,"line":75},[29,149133,149134],{"class":103},"    \"上海\"",[29,149136,149081],{"class":309},[29,149138,149139,149141,149143,149145,149147,149149,149151,149153,149155],{"class":31,"line":83},[29,149140,5092],{"class":309},[29,149142,148126],{"class":103},[29,149144,51566],{"class":309},[29,149146,149092],{"class":103},[29,149148,12610],{"class":309},[29,149150,149097],{"class":103},[29,149152,51566],{"class":309},[29,149154,703],{"class":39},[29,149156,5105],{"class":309},[29,149158,149159,149161,149163,149165,149167,149169,149171,149173,149175],{"class":31,"line":158},[29,149160,5092],{"class":309},[29,149162,148126],{"class":103},[29,149164,51566],{"class":309},[29,149166,149114],{"class":103},[29,149168,12610],{"class":309},[29,149170,149097],{"class":103},[29,149172,51566],{"class":309},[29,149174,831],{"class":39},[29,149176,5105],{"class":309},[29,149178,149179],{"class":31,"line":166},[29,149180,149129],{"class":309},[29,149182,149183],{"class":31,"line":1505},[29,149184,1741],{"class":309},[171,149186,149187],{},"绘制多地区趋势：",[19,149189,149191],{"className":30507,"code":149190,"language":30509,"meta":24,"style":24},"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",[26,149192,149193,149207,149217,149221,149246,149250,149258,149262,149266,149278,149300,149313,149317,149321,149338,149354,149358],{"__ignoreMap":24},[29,149194,149195,149197,149199,149201,149203,149205],{"class":31,"line":32},[29,149196,30866],{"class":305},[29,149198,147508],{"class":309},[29,149200,30521],{"class":305},[29,149202,147513],{"class":309},[29,149204,31512],{"class":305},[29,149206,147518],{"class":309},[29,149208,149209,149211,149213,149215],{"class":31,"line":43},[29,149210,30866],{"class":305},[29,149212,147367],{"class":309},[29,149214,30521],{"class":305},[29,149216,147372],{"class":309},[29,149218,149219],{"class":31,"line":51},[29,149220,2575],{"emptyLinePlaceholder":233},[29,149222,149223,149225,149227,149229,149231,149233,149235,149237,149239,149242,149244],{"class":31,"line":59},[29,149224,147929],{"class":309},[29,149226,355],{"class":305},[29,149228,148852],{"class":309},[29,149230,148126],{"class":103},[29,149232,4618],{"class":309},[29,149234,3200],{"class":305},[29,149236,148338],{"class":309},[29,149238,26172],{"class":305},[29,149240,149241],{"class":309}," data[",[29,149243,69398],{"class":103},[29,149245,77656],{"class":309},[29,149247,149248],{"class":31,"line":67},[29,149249,2575],{"emptyLinePlaceholder":233},[29,149251,149252,149254,149256],{"class":31,"line":75},[29,149253,147381],{"class":309},[29,149255,355],{"class":305},[29,149257,147386],{"class":309},[29,149259,149260],{"class":31,"line":83},[29,149261,147970],{"class":309},[29,149263,149264],{"class":31,"line":158},[29,149265,2575],{"emptyLinePlaceholder":233},[29,149267,149268,149270,149273,149275],{"class":31,"line":166},[29,149269,3200],{"class":305},[29,149271,149272],{"class":309}," city, records ",[29,149274,26172],{"class":305},[29,149276,149277],{"class":309}," data.items():\n",[29,149279,149280,149283,149285,149287,149289,149291,149293,149295,149297],{"class":31,"line":1505},[29,149281,149282],{"class":309},"    values ",[29,149284,355],{"class":305},[29,149286,148852],{"class":309},[29,149288,149097],{"class":103},[29,149290,4618],{"class":309},[29,149292,3200],{"class":305},[29,149294,148338],{"class":309},[29,149296,26172],{"class":305},[29,149298,149299],{"class":309}," records]\n",[29,149301,149302,149305,149307,149309,149311],{"class":31,"line":1788},[29,149303,149304],{"class":309},"    line.add_yaxis(city, values, ",[29,149306,147874],{"class":5391},[29,149308,355],{"class":305},[29,149310,31605],{"class":39},[29,149312,316],{"class":309},[29,149314,149315],{"class":31,"line":1793},[29,149316,2575],{"emptyLinePlaceholder":233},[29,149318,149319],{"class":31,"line":1799},[29,149320,147597],{"class":309},[29,149322,149323,149325,149327,149329,149331,149333,149336],{"class":31,"line":1804},[29,149324,147602],{"class":5391},[29,149326,355],{"class":305},[29,149328,147607],{"class":309},[29,149330,51536],{"class":5391},[29,149332,355],{"class":305},[29,149334,149335],{"class":103},"\"多地区趋势图\"",[29,149337,38176],{"class":309},[29,149339,149340,149342,149344,149346,149348,149350,149352],{"class":31,"line":1818},[29,149341,147658],{"class":5391},[29,149343,355],{"class":305},[29,149345,147663],{"class":309},[29,149347,147666],{"class":5391},[29,149349,355],{"class":305},[29,149351,147671],{"class":103},[29,149353,38176],{"class":309},[29,149355,149356],{"class":31,"line":1823},[29,149357,316],{"class":309},[29,149359,149360,149362,149365],{"class":31,"line":1829},[29,149361,147453],{"class":309},[29,149363,149364],{"class":103},"\"trend.html\"",[29,149366,316],{"class":309},[171,149368,149369],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149371,149373],{"id":149372},"_1012-易错点","10.12 易错点",[259,149375,149376,149382,149388,149398,149404],{},[178,149377,149378,149381],{},[26,149379,149380],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[178,149383,149384,149387],{},[26,149385,149386],{},"render()"," 生成的是 HTML，不是图片。",[178,149389,149390,149391,149394,149395,28514],{},"JSON 字符串用 ",[26,149392,149393],{},"json.loads()","，JSON 文件用 ",[26,149396,149397],{},"json.load()",[178,149399,149400,149401,28514],{},"中文 JSON 保存时加 ",[26,149402,149403],{},"ensure_ascii=False",[178,149405,149406],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149408,149410],{"id":149409},"_1013-本章练习","10.13 本章练习",[259,149412,149413,149416,149419,149422,149425],{},[178,149414,149415],{},"安装 pyecharts 并生成第一个折线图。",[178,149417,149418],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[178,149420,149421],{},"绘制两条折线，对比线上和线下销售额。",[178,149423,149424],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[178,149426,149427],{},"对含有空值的销售数据进行清洗后再绘图。",[223,149429,149430],{},"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":24,"searchDepth":43,"depth":43,"links":149432},[149433,149434,149435,149436,149437,149438,149439,149440,149441,149442,149443,149444,149445],{"id":147049,"depth":43,"text":147050},{"id":147124,"depth":43,"text":147125},{"id":147303,"depth":43,"text":147304},{"id":147354,"depth":43,"text":147355},{"id":147488,"depth":43,"text":147489},{"id":147764,"depth":43,"text":147765},{"id":147890,"depth":43,"text":147891},{"id":148101,"depth":43,"text":148102},{"id":148472,"depth":43,"text":148473},{"id":148684,"depth":43,"text":148685},{"id":149056,"depth":43,"text":149057},{"id":149372,"depth":43,"text":149373},{"id":149409,"depth":43,"text":149410},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147041,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149452,"title":149453,"body":149454,"description":230,"extension":231,"meta":151814,"navigation":233,"path":151815,"seo":151816,"stem":151817,"__hash__":151818},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149455,"toc":151791},[149456,149459,149463,149466,149469,149545,149548,149639,149642,149646,149649,149693,149706,149710,149713,149780,149783,149787,149790,149874,149882,149886,149891,150032,150035,150046,150052,150058,150172,150176,150179,150182,150435,150438,150442,150445,150549,150552,150556,150707,150711,150718,150831,150835,150838,150944,150947,150951,150954,150985,150988,151093,151096,151100,151104,151114,151182,151186,151193,151257,151260,151264,151270,151366,151375,151379,151703,151712,151716,151744,151748,151788],[10,149457,149453],{"id":149458},"_11-面向对象基础",[14,149460,149462],{"id":149461},"_111-什么是面向对象","11.1 什么是面向对象",[171,149464,149465],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[171,149467,149468],{},"面向过程：",[19,149470,149472],{"className":30507,"code":149471,"language":30509,"meta":24,"style":24},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[26,149473,149474,149483,149491,149495,149505,149536,149540],{"__ignoreMap":24},[29,149475,149476,149478,149480],{"class":31,"line":32},[29,149477,146665],{"class":309},[29,149479,355],{"class":305},[29,149481,149482],{"class":103}," \"小明\"\n",[29,149484,149485,149487,149489],{"class":31,"line":43},[29,149486,146675],{"class":309},[29,149488,355],{"class":305},[29,149490,146680],{"class":39},[29,149492,149493],{"class":31,"line":51},[29,149494,2575],{"emptyLinePlaceholder":233},[29,149496,149497,149499,149502],{"class":31,"line":59},[29,149498,32076],{"class":305},[29,149500,149501],{"class":35}," introduce",[29,149503,149504],{"class":309},"(name, age):\n",[29,149506,149507,149509,149511,149513,149516,149518,149520,149522,149525,149527,149529,149531,149534],{"class":31,"line":67},[29,149508,31428],{"class":39},[29,149510,310],{"class":309},[29,149512,361],{"class":305},[29,149514,149515],{"class":103},"\"我叫",[29,149517,1204],{"class":39},[29,149519,79939],{"class":309},[29,149521,1254],{"class":39},[29,149523,149524],{"class":103},"，今年",[29,149526,1204],{"class":39},[29,149528,70350],{"class":309},[29,149530,1254],{"class":39},[29,149532,149533],{"class":103},"岁\"",[29,149535,316],{"class":309},[29,149537,149538],{"class":31,"line":75},[29,149539,2575],{"emptyLinePlaceholder":233},[29,149541,149542],{"class":31,"line":83},[29,149543,149544],{"class":309},"introduce(name, age)\n",[171,149546,149547],{},"面向对象：",[19,149549,149551],{"className":30507,"code":149550,"language":30509,"meta":24,"style":24},"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",[26,149552,149553,149561,149569,149598,149602,149606,149616,149625,149634],{"__ignoreMap":24},[29,149554,149555,149557,149559],{"class":31,"line":32},[29,149556,14869],{"class":305},[29,149558,8073],{"class":35},[29,149560,3914],{"class":309},[29,149562,149563,149565,149567],{"class":31,"line":43},[29,149564,30930],{"class":305},[29,149566,149501],{"class":35},[29,149568,30936],{"class":309},[29,149570,149571,149573,149575,149577,149579,149582,149584,149586,149588,149590,149592,149594,149596],{"class":31,"line":51},[29,149572,32580],{"class":39},[29,149574,310],{"class":309},[29,149576,361],{"class":305},[29,149578,149515],{"class":103},[29,149580,149581],{"class":39},"{self",[29,149583,80430],{"class":309},[29,149585,1254],{"class":39},[29,149587,149524],{"class":103},[29,149589,149581],{"class":39},[29,149591,80442],{"class":309},[29,149593,1254],{"class":39},[29,149595,149533],{"class":103},[29,149597,316],{"class":309},[29,149599,149600],{"class":31,"line":59},[29,149601,2575],{"emptyLinePlaceholder":233},[29,149603,149604],{"class":31,"line":67},[29,149605,2575],{"emptyLinePlaceholder":233},[29,149607,149608,149611,149613],{"class":31,"line":75},[29,149609,149610],{"class":309},"student ",[29,149612,355],{"class":305},[29,149614,149615],{"class":309}," Student()\n",[29,149617,149618,149621,149623],{"class":31,"line":83},[29,149619,149620],{"class":309},"student.name ",[29,149622,355],{"class":305},[29,149624,149482],{"class":103},[29,149626,149627,149630,149632],{"class":31,"line":158},[29,149628,149629],{"class":309},"student.age ",[29,149631,355],{"class":305},[29,149633,146680],{"class":39},[29,149635,149636],{"class":31,"line":166},[29,149637,149638],{"class":309},"student.introduce()\n",[171,149640,149641],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149643,149645],{"id":149644},"_112-类和对象","11.2 类和对象",[171,149647,149648],{},"类是模板，对象是根据模板创建出来的具体实例。",[19,149650,149652],{"className":30507,"code":149651,"language":30509,"meta":24,"style":24},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[26,149653,149654,149662,149667,149671,149675,149684],{"__ignoreMap":24},[29,149655,149656,149658,149660],{"class":31,"line":32},[29,149657,14869],{"class":305},[29,149659,8073],{"class":35},[29,149661,3914],{"class":309},[29,149663,149664],{"class":31,"line":43},[29,149665,149666],{"class":305},"    pass\n",[29,149668,149669],{"class":31,"line":51},[29,149670,2575],{"emptyLinePlaceholder":233},[29,149672,149673],{"class":31,"line":59},[29,149674,2575],{"emptyLinePlaceholder":233},[29,149676,149677,149680,149682],{"class":31,"line":67},[29,149678,149679],{"class":309},"student1 ",[29,149681,355],{"class":305},[29,149683,149615],{"class":309},[29,149685,149686,149689,149691],{"class":31,"line":75},[29,149687,149688],{"class":309},"student2 ",[29,149690,355],{"class":305},[29,149692,149615],{"class":309},[171,149694,149695,149698,149699,101147,149702,149705],{},[26,149696,149697],{},"Student"," 是类，",[26,149700,149701],{},"student1",[26,149703,149704],{},"student2"," 是对象。",[14,149707,149709],{"id":149708},"_113-属性","11.3 属性",[171,149711,149712],{},"属性是对象保存的数据。",[19,149714,149716],{"className":30507,"code":149715,"language":30509,"meta":24,"style":24},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[26,149717,149718,149726,149730,149734,149738,149746,149754,149762,149766,149773],{"__ignoreMap":24},[29,149719,149720,149722,149724],{"class":31,"line":32},[29,149721,14869],{"class":305},[29,149723,8073],{"class":35},[29,149725,3914],{"class":309},[29,149727,149728],{"class":31,"line":43},[29,149729,149666],{"class":305},[29,149731,149732],{"class":31,"line":51},[29,149733,2575],{"emptyLinePlaceholder":233},[29,149735,149736],{"class":31,"line":59},[29,149737,2575],{"emptyLinePlaceholder":233},[29,149739,149740,149742,149744],{"class":31,"line":67},[29,149741,149610],{"class":309},[29,149743,355],{"class":305},[29,149745,149615],{"class":309},[29,149747,149748,149750,149752],{"class":31,"line":75},[29,149749,149620],{"class":309},[29,149751,355],{"class":305},[29,149753,149482],{"class":103},[29,149755,149756,149758,149760],{"class":31,"line":83},[29,149757,149629],{"class":309},[29,149759,355],{"class":305},[29,149761,146680],{"class":39},[29,149763,149764],{"class":31,"line":158},[29,149765,2575],{"emptyLinePlaceholder":233},[29,149767,149768,149770],{"class":31,"line":166},[29,149769,30544],{"class":39},[29,149771,149772],{"class":309},"(student.name)\n",[29,149774,149775,149777],{"class":31,"line":1505},[29,149776,30544],{"class":39},[29,149778,149779],{"class":309},"(student.age)\n",[171,149781,149782],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149784,149786],{"id":149785},"_114-方法","11.4 方法",[171,149788,149789],{},"类中的函数叫方法。",[19,149791,149792],{"className":30507,"code":149550,"language":30509,"meta":24,"style":24},[26,149793,149794,149802,149810,149838,149842,149846,149854,149862,149870],{"__ignoreMap":24},[29,149795,149796,149798,149800],{"class":31,"line":32},[29,149797,14869],{"class":305},[29,149799,8073],{"class":35},[29,149801,3914],{"class":309},[29,149803,149804,149806,149808],{"class":31,"line":43},[29,149805,30930],{"class":305},[29,149807,149501],{"class":35},[29,149809,30936],{"class":309},[29,149811,149812,149814,149816,149818,149820,149822,149824,149826,149828,149830,149832,149834,149836],{"class":31,"line":51},[29,149813,32580],{"class":39},[29,149815,310],{"class":309},[29,149817,361],{"class":305},[29,149819,149515],{"class":103},[29,149821,149581],{"class":39},[29,149823,80430],{"class":309},[29,149825,1254],{"class":39},[29,149827,149524],{"class":103},[29,149829,149581],{"class":39},[29,149831,80442],{"class":309},[29,149833,1254],{"class":39},[29,149835,149533],{"class":103},[29,149837,316],{"class":309},[29,149839,149840],{"class":31,"line":59},[29,149841,2575],{"emptyLinePlaceholder":233},[29,149843,149844],{"class":31,"line":67},[29,149845,2575],{"emptyLinePlaceholder":233},[29,149847,149848,149850,149852],{"class":31,"line":75},[29,149849,149610],{"class":309},[29,149851,355],{"class":305},[29,149853,149615],{"class":309},[29,149855,149856,149858,149860],{"class":31,"line":83},[29,149857,149620],{"class":309},[29,149859,355],{"class":305},[29,149861,149482],{"class":103},[29,149863,149864,149866,149868],{"class":31,"line":158},[29,149865,149629],{"class":309},[29,149867,355],{"class":305},[29,149869,146680],{"class":39},[29,149871,149872],{"class":31,"line":166},[29,149873,149638],{"class":309},[171,149875,149876,149878,149879,149881],{},[26,149877,30952],{}," 表示当前对象。调用方法时不需要手动传入 ",[26,149880,30952],{},"，Python 会自动传。",[14,149883,149885],{"id":149884},"_115-构造方法__init__","11.5 构造方法__init__",[171,149887,149888,149890],{},[26,149889,30958],{}," 在对象创建时自动执行，用于初始化属性。",[19,149892,149894],{"className":30507,"code":149893,"language":30509,"meta":24,"style":24},"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",[26,149895,149896,149904,149913,149925,149937,149948,149952,149960,149998,150002,150006,150028],{"__ignoreMap":24},[29,149897,149898,149900,149902],{"class":31,"line":32},[29,149899,14869],{"class":305},[29,149901,8073],{"class":35},[29,149903,3914],{"class":309},[29,149905,149906,149908,149910],{"class":31,"line":43},[29,149907,30930],{"class":305},[29,149909,30933],{"class":39},[29,149911,149912],{"class":309},"(self, name, age, score):\n",[29,149914,149915,149917,149920,149922],{"class":31,"line":51},[29,149916,30974],{"class":39},[29,149918,149919],{"class":309},".name ",[29,149921,355],{"class":305},[29,149923,149924],{"class":309}," name\n",[29,149926,149927,149929,149932,149934],{"class":31,"line":59},[29,149928,30974],{"class":39},[29,149930,149931],{"class":309},".age ",[29,149933,355],{"class":305},[29,149935,149936],{"class":309}," age\n",[29,149938,149939,149941,149944,149946],{"class":31,"line":67},[29,149940,30974],{"class":39},[29,149942,149943],{"class":309},".score ",[29,149945,355],{"class":305},[29,149947,1755],{"class":309},[29,149949,149950],{"class":31,"line":75},[29,149951,2575],{"emptyLinePlaceholder":233},[29,149953,149954,149956,149958],{"class":31,"line":83},[29,149955,30930],{"class":305},[29,149957,149501],{"class":35},[29,149959,30936],{"class":309},[29,149961,149962,149964,149966,149968,149970,149972,149974,149976,149978,149980,149982,149984,149987,149989,149992,149994,149996],{"class":31,"line":158},[29,149963,32580],{"class":39},[29,149965,310],{"class":309},[29,149967,361],{"class":305},[29,149969,149515],{"class":103},[29,149971,149581],{"class":39},[29,149973,80430],{"class":309},[29,149975,1254],{"class":39},[29,149977,149524],{"class":103},[29,149979,149581],{"class":39},[29,149981,80442],{"class":309},[29,149983,1254],{"class":39},[29,149985,149986],{"class":103},"岁，成绩",[29,149988,149581],{"class":39},[29,149990,149991],{"class":309},".score",[29,149993,1254],{"class":39},[29,149995,559],{"class":103},[29,149997,316],{"class":309},[29,149999,150000],{"class":31,"line":166},[29,150001,2575],{"emptyLinePlaceholder":233},[29,150003,150004],{"class":31,"line":1505},[29,150005,2575],{"emptyLinePlaceholder":233},[29,150007,150008,150010,150012,150015,150018,150020,150022,150024,150026],{"class":31,"line":1788},[29,150009,149610],{"class":309},[29,150011,355],{"class":305},[29,150013,150014],{"class":309}," Student(",[29,150016,150017],{"class":103},"\"小明\"",[29,150019,12610],{"class":309},[29,150021,958],{"class":39},[29,150023,12610],{"class":309},[29,150025,1297],{"class":39},[29,150027,316],{"class":309},[29,150029,150030],{"class":31,"line":1793},[29,150031,149638],{"class":309},[171,150033,150034],{},"构造方法的好处：",[259,150036,150037,150040,150043],{},[178,150038,150039],{},"创建对象时必须提供必要数据。",[178,150041,150042],{},"属性初始化集中，不容易漏。",[178,150044,150045],{},"对象状态更完整。",[14,150047,150049,150050],{"id":150048},"_116-str","11.6 ",[457,150051,1477],{},[171,150053,150054,150055,28514],{},"直接打印对象时，默认输出不直观。可以定义 ",[26,150056,150057],{},"__str__",[19,150059,150061],{"className":30507,"code":150060,"language":30509,"meta":24,"style":24},"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",[26,150062,150063,150071,150080,150090,150100,150104,150113,150141,150145,150149,150165],{"__ignoreMap":24},[29,150064,150065,150067,150069],{"class":31,"line":32},[29,150066,14869],{"class":305},[29,150068,8073],{"class":35},[29,150070,3914],{"class":309},[29,150072,150073,150075,150077],{"class":31,"line":43},[29,150074,30930],{"class":305},[29,150076,30933],{"class":39},[29,150078,150079],{"class":309},"(self, name, age):\n",[29,150081,150082,150084,150086,150088],{"class":31,"line":51},[29,150083,30974],{"class":39},[29,150085,149919],{"class":309},[29,150087,355],{"class":305},[29,150089,149924],{"class":309},[29,150091,150092,150094,150096,150098],{"class":31,"line":59},[29,150093,30974],{"class":39},[29,150095,149931],{"class":309},[29,150097,355],{"class":305},[29,150099,149936],{"class":309},[29,150101,150102],{"class":31,"line":67},[29,150103,2575],{"emptyLinePlaceholder":233},[29,150105,150106,150108,150111],{"class":31,"line":75},[29,150107,30930],{"class":305},[29,150109,150110],{"class":39}," __str__",[29,150112,30936],{"class":309},[29,150114,150115,150117,150120,150123,150125,150127,150129,150132,150134,150136,150138],{"class":31,"line":83},[29,150116,14927],{"class":305},[29,150118,150119],{"class":305}," f",[29,150121,150122],{"class":103},"\"Student(name=",[29,150124,149581],{"class":39},[29,150126,80430],{"class":309},[29,150128,1254],{"class":39},[29,150130,150131],{"class":103},", age=",[29,150133,149581],{"class":39},[29,150135,80442],{"class":309},[29,150137,1254],{"class":39},[29,150139,150140],{"class":103},")\"\n",[29,150142,150143],{"class":31,"line":158},[29,150144,2575],{"emptyLinePlaceholder":233},[29,150146,150147],{"class":31,"line":166},[29,150148,2575],{"emptyLinePlaceholder":233},[29,150150,150151,150153,150155,150157,150159,150161,150163],{"class":31,"line":1505},[29,150152,149610],{"class":309},[29,150154,355],{"class":305},[29,150156,150014],{"class":309},[29,150158,150017],{"class":103},[29,150160,12610],{"class":309},[29,150162,958],{"class":39},[29,150164,316],{"class":309},[29,150166,150167,150169],{"class":31,"line":1788},[29,150168,30544],{"class":39},[29,150170,150171],{"class":309},"(student)\n",[14,150173,150175],{"id":150174},"_117-封装","11.7 封装",[171,150177,150178],{},"封装就是把数据和方法放到类中，并控制访问方式。",[171,150180,150181],{},"Python 中以双下划线开头的属性通常视为私有属性。",[19,150183,150185],{"className":30507,"code":150184,"language":30509,"meta":24,"style":24},"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",[26,150186,150187,150196,150205,150217,150229,150233,150242,150251,150255,150265,150278,150289,150294,150305,150309,150318,150330,150341,150345,150358,150369,150373,150384,150388,150392,150410,150419,150428],{"__ignoreMap":24},[29,150188,150189,150191,150194],{"class":31,"line":32},[29,150190,14869],{"class":305},[29,150192,150193],{"class":35}," Account",[29,150195,3914],{"class":309},[29,150197,150198,150200,150202],{"class":31,"line":43},[29,150199,30930],{"class":305},[29,150201,30933],{"class":39},[29,150203,150204],{"class":309},"(self, owner, balance):\n",[29,150206,150207,150209,150212,150214],{"class":31,"line":51},[29,150208,30974],{"class":39},[29,150210,150211],{"class":309},".owner ",[29,150213,355],{"class":305},[29,150215,150216],{"class":309}," owner\n",[29,150218,150219,150221,150224,150226],{"class":31,"line":59},[29,150220,30974],{"class":39},[29,150222,150223],{"class":309},".__balance ",[29,150225,355],{"class":305},[29,150227,150228],{"class":309}," balance\n",[29,150230,150231],{"class":31,"line":67},[29,150232,2575],{"emptyLinePlaceholder":233},[29,150234,150235,150237,150240],{"class":31,"line":75},[29,150236,30930],{"class":305},[29,150238,150239],{"class":35}," get_balance",[29,150241,30936],{"class":309},[29,150243,150244,150246,150248],{"class":31,"line":83},[29,150245,14927],{"class":305},[29,150247,39002],{"class":39},[29,150249,150250],{"class":309},".__balance\n",[29,150252,150253],{"class":31,"line":158},[29,150254,2575],{"emptyLinePlaceholder":233},[29,150256,150257,150259,150262],{"class":31,"line":166},[29,150258,30930],{"class":305},[29,150260,150261],{"class":35}," deposit",[29,150263,150264],{"class":309},"(self, money):\n",[29,150266,150267,150269,150272,150274,150276],{"class":31,"line":1505},[29,150268,2672],{"class":305},[29,150270,150271],{"class":309}," money ",[29,150273,1764],{"class":305},[29,150275,4268],{"class":39},[29,150277,3914],{"class":309},[29,150279,150280,150282,150284,150287],{"class":31,"line":1788},[29,150281,34779],{"class":39},[29,150283,310],{"class":309},[29,150285,150286],{"class":103},"\"存款金额必须大于0\"",[29,150288,316],{"class":309},[29,150290,150291],{"class":31,"line":1793},[29,150292,150293],{"class":305},"            return\n",[29,150295,150296,150298,150300,150302],{"class":31,"line":1799},[29,150297,30974],{"class":39},[29,150299,150223],{"class":309},[29,150301,9652],{"class":305},[29,150303,150304],{"class":309}," money\n",[29,150306,150307],{"class":31,"line":1804},[29,150308,2575],{"emptyLinePlaceholder":233},[29,150310,150311,150313,150316],{"class":31,"line":1818},[29,150312,30930],{"class":305},[29,150314,150315],{"class":35}," withdraw",[29,150317,150264],{"class":309},[29,150319,150320,150322,150324,150326,150328],{"class":31,"line":1823},[29,150321,2672],{"class":305},[29,150323,150271],{"class":309},[29,150325,1764],{"class":305},[29,150327,4268],{"class":39},[29,150329,3914],{"class":309},[29,150331,150332,150334,150336,150339],{"class":31,"line":1829},[29,150333,34779],{"class":39},[29,150335,310],{"class":309},[29,150337,150338],{"class":103},"\"取款金额必须大于0\"",[29,150340,316],{"class":309},[29,150342,150343],{"class":31,"line":1850},[29,150344,150293],{"class":305},[29,150346,150347,150349,150351,150353,150355],{"class":31,"line":1855},[29,150348,2672],{"class":305},[29,150350,150271],{"class":309},[29,150352,1268],{"class":305},[29,150354,39002],{"class":39},[29,150356,150357],{"class":309},".__balance:\n",[29,150359,150360,150362,150364,150367],{"class":31,"line":1869},[29,150361,34779],{"class":39},[29,150363,310],{"class":309},[29,150365,150366],{"class":103},"\"余额不足\"",[29,150368,316],{"class":309},[29,150370,150371],{"class":31,"line":1874},[29,150372,150293],{"class":305},[29,150374,150375,150377,150379,150382],{"class":31,"line":1903},[29,150376,30974],{"class":39},[29,150378,150223],{"class":309},[29,150380,150381],{"class":305},"-=",[29,150383,150304],{"class":309},[29,150385,150386],{"class":31,"line":1908},[29,150387,2575],{"emptyLinePlaceholder":233},[29,150389,150390],{"class":31,"line":1925},[29,150391,2575],{"emptyLinePlaceholder":233},[29,150393,150394,150397,150399,150402,150404,150406,150408],{"class":31,"line":1930},[29,150395,150396],{"class":309},"account ",[29,150398,355],{"class":305},[29,150400,150401],{"class":309}," Account(",[29,150403,150017],{"class":103},[29,150405,12610],{"class":309},[29,150407,6585],{"class":39},[29,150409,316],{"class":309},[29,150411,150412,150415,150417],{"class":31,"line":1935},[29,150413,150414],{"class":309},"account.deposit(",[29,150416,1898],{"class":39},[29,150418,316],{"class":309},[29,150420,150421,150424,150426],{"class":31,"line":1940},[29,150422,150423],{"class":309},"account.withdraw(",[29,150425,619],{"class":39},[29,150427,316],{"class":309},[29,150429,150430,150432],{"class":31,"line":1954},[29,150431,30544],{"class":39},[29,150433,150434],{"class":309},"(account.get_balance())\n",[171,150436,150437],{},"封装的意义是避免外部随意修改内部状态。",[14,150439,150441],{"id":150440},"_118-继承","11.8 继承",[171,150443,150444],{},"继承可以让子类复用父类的属性和方法。",[19,150446,150448],{"className":30507,"code":150447,"language":30509,"meta":24,"style":24},"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",[26,150449,150450,150459,150468,150479,150483,150487,150501,150510,150521,150525,150529,150539,150544],{"__ignoreMap":24},[29,150451,150452,150454,150457],{"class":31,"line":32},[29,150453,14869],{"class":305},[29,150455,150456],{"class":35}," Animal",[29,150458,3914],{"class":309},[29,150460,150461,150463,150466],{"class":31,"line":43},[29,150462,30930],{"class":305},[29,150464,150465],{"class":35}," eat",[29,150467,30936],{"class":309},[29,150469,150470,150472,150474,150477],{"class":31,"line":51},[29,150471,32580],{"class":39},[29,150473,310],{"class":309},[29,150475,150476],{"class":103},"\"吃东西\"",[29,150478,316],{"class":309},[29,150480,150481],{"class":31,"line":59},[29,150482,2575],{"emptyLinePlaceholder":233},[29,150484,150485],{"class":31,"line":67},[29,150486,2575],{"emptyLinePlaceholder":233},[29,150488,150489,150491,150494,150496,150499],{"class":31,"line":75},[29,150490,14869],{"class":305},[29,150492,150493],{"class":35}," Dog",[29,150495,310],{"class":309},[29,150497,150498],{"class":35},"Animal",[29,150500,30915],{"class":309},[29,150502,150503,150505,150508],{"class":31,"line":83},[29,150504,30930],{"class":305},[29,150506,150507],{"class":35}," bark",[29,150509,30936],{"class":309},[29,150511,150512,150514,150516,150519],{"class":31,"line":158},[29,150513,32580],{"class":39},[29,150515,310],{"class":309},[29,150517,150518],{"class":103},"\"汪汪\"",[29,150520,316],{"class":309},[29,150522,150523],{"class":31,"line":166},[29,150524,2575],{"emptyLinePlaceholder":233},[29,150526,150527],{"class":31,"line":1505},[29,150528,2575],{"emptyLinePlaceholder":233},[29,150530,150531,150534,150536],{"class":31,"line":1788},[29,150532,150533],{"class":309},"dog ",[29,150535,355],{"class":305},[29,150537,150538],{"class":309}," Dog()\n",[29,150540,150541],{"class":31,"line":1793},[29,150542,150543],{"class":309},"dog.eat()\n",[29,150545,150546],{"class":31,"line":1799},[29,150547,150548],{"class":309},"dog.bark()\n",[171,150550,150551],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150553,150555],{"id":150554},"_119-方法重写","11.9 方法重写",[19,150557,150559],{"className":30507,"code":150558,"language":30509,"meta":24,"style":24},"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",[26,150560,150561,150569,150578,150589,150593,150597,150609,150617,150627,150631,150635,150648,150656,150667,150671,150675,150683,150693,150697,150702],{"__ignoreMap":24},[29,150562,150563,150565,150567],{"class":31,"line":32},[29,150564,14869],{"class":305},[29,150566,150456],{"class":35},[29,150568,3914],{"class":309},[29,150570,150571,150573,150576],{"class":31,"line":43},[29,150572,30930],{"class":305},[29,150574,150575],{"class":35}," speak",[29,150577,30936],{"class":309},[29,150579,150580,150582,150584,150587],{"class":31,"line":51},[29,150581,32580],{"class":39},[29,150583,310],{"class":309},[29,150585,150586],{"class":103},"\"动物叫\"",[29,150588,316],{"class":309},[29,150590,150591],{"class":31,"line":59},[29,150592,2575],{"emptyLinePlaceholder":233},[29,150594,150595],{"class":31,"line":67},[29,150596,2575],{"emptyLinePlaceholder":233},[29,150598,150599,150601,150603,150605,150607],{"class":31,"line":75},[29,150600,14869],{"class":305},[29,150602,150493],{"class":35},[29,150604,310],{"class":309},[29,150606,150498],{"class":35},[29,150608,30915],{"class":309},[29,150610,150611,150613,150615],{"class":31,"line":83},[29,150612,30930],{"class":305},[29,150614,150575],{"class":35},[29,150616,30936],{"class":309},[29,150618,150619,150621,150623,150625],{"class":31,"line":158},[29,150620,32580],{"class":39},[29,150622,310],{"class":309},[29,150624,150518],{"class":103},[29,150626,316],{"class":309},[29,150628,150629],{"class":31,"line":166},[29,150630,2575],{"emptyLinePlaceholder":233},[29,150632,150633],{"class":31,"line":1505},[29,150634,2575],{"emptyLinePlaceholder":233},[29,150636,150637,150639,150642,150644,150646],{"class":31,"line":1788},[29,150638,14869],{"class":305},[29,150640,150641],{"class":35}," Cat",[29,150643,310],{"class":309},[29,150645,150498],{"class":35},[29,150647,30915],{"class":309},[29,150649,150650,150652,150654],{"class":31,"line":1793},[29,150651,30930],{"class":305},[29,150653,150575],{"class":35},[29,150655,30936],{"class":309},[29,150657,150658,150660,150662,150665],{"class":31,"line":1799},[29,150659,32580],{"class":39},[29,150661,310],{"class":309},[29,150663,150664],{"class":103},"\"喵喵\"",[29,150666,316],{"class":309},[29,150668,150669],{"class":31,"line":1804},[29,150670,2575],{"emptyLinePlaceholder":233},[29,150672,150673],{"class":31,"line":1818},[29,150674,2575],{"emptyLinePlaceholder":233},[29,150676,150677,150679,150681],{"class":31,"line":1823},[29,150678,150533],{"class":309},[29,150680,355],{"class":305},[29,150682,150538],{"class":309},[29,150684,150685,150688,150690],{"class":31,"line":1829},[29,150686,150687],{"class":309},"cat ",[29,150689,355],{"class":305},[29,150691,150692],{"class":309}," Cat()\n",[29,150694,150695],{"class":31,"line":1850},[29,150696,2575],{"emptyLinePlaceholder":233},[29,150698,150699],{"class":31,"line":1855},[29,150700,150701],{"class":309},"dog.speak()\n",[29,150703,150704],{"class":31,"line":1869},[29,150705,150706],{"class":309},"cat.speak()\n",[14,150708,150710],{"id":150709},"_1110-super","11.10 super",[171,150712,150713,150714,150717],{},"子类可以通过 ",[26,150715,150716],{},"super()"," 调用父类方法。",[19,150719,150721],{"className":30507,"code":150720,"language":30509,"meta":24,"style":24},"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",[26,150722,150723,150731,150740,150750,150754,150758,150770,150779,150790,150800,150804,150808,150824],{"__ignoreMap":24},[29,150724,150725,150727,150729],{"class":31,"line":32},[29,150726,14869],{"class":305},[29,150728,15744],{"class":35},[29,150730,3914],{"class":309},[29,150732,150733,150735,150737],{"class":31,"line":43},[29,150734,30930],{"class":305},[29,150736,30933],{"class":39},[29,150738,150739],{"class":309},"(self, name):\n",[29,150741,150742,150744,150746,150748],{"class":31,"line":51},[29,150743,30974],{"class":39},[29,150745,149919],{"class":309},[29,150747,355],{"class":305},[29,150749,149924],{"class":309},[29,150751,150752],{"class":31,"line":59},[29,150753,2575],{"emptyLinePlaceholder":233},[29,150755,150756],{"class":31,"line":67},[29,150757,2575],{"emptyLinePlaceholder":233},[29,150759,150760,150762,150764,150766,150768],{"class":31,"line":75},[29,150761,14869],{"class":305},[29,150763,8073],{"class":35},[29,150765,310],{"class":309},[29,150767,19221],{"class":35},[29,150769,30915],{"class":309},[29,150771,150772,150774,150776],{"class":31,"line":83},[29,150773,30930],{"class":305},[29,150775,30933],{"class":39},[29,150777,150778],{"class":309},"(self, name, score):\n",[29,150780,150781,150783,150785,150787],{"class":31,"line":158},[29,150782,30946],{"class":39},[29,150784,17436],{"class":309},[29,150786,30958],{"class":39},[29,150788,150789],{"class":309},"(name)\n",[29,150791,150792,150794,150796,150798],{"class":31,"line":166},[29,150793,30974],{"class":39},[29,150795,149943],{"class":309},[29,150797,355],{"class":305},[29,150799,1755],{"class":309},[29,150801,150802],{"class":31,"line":1505},[29,150803,2575],{"emptyLinePlaceholder":233},[29,150805,150806],{"class":31,"line":1788},[29,150807,2575],{"emptyLinePlaceholder":233},[29,150809,150810,150812,150814,150816,150818,150820,150822],{"class":31,"line":1793},[29,150811,149610],{"class":309},[29,150813,355],{"class":305},[29,150815,150014],{"class":309},[29,150817,150017],{"class":103},[29,150819,12610],{"class":309},[29,150821,1297],{"class":39},[29,150823,316],{"class":309},[29,150825,150826,150828],{"class":31,"line":1799},[29,150827,30544],{"class":39},[29,150829,150830],{"class":309},"(student.name, student.score)\n",[14,150832,150834],{"id":150833},"_1111-多态","11.11 多态",[171,150836,150837],{},"多态指不同对象响应同一个方法，表现出不同结果。",[19,150839,150841],{"className":30507,"code":150840,"language":30509,"meta":24,"style":24},"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",[26,150842,150843,150851,150859,150869,150873,150877,150885,150893,150903,150907,150911,150921,150926,150930,150934,150939],{"__ignoreMap":24},[29,150844,150845,150847,150849],{"class":31,"line":32},[29,150846,14869],{"class":305},[29,150848,150493],{"class":35},[29,150850,3914],{"class":309},[29,150852,150853,150855,150857],{"class":31,"line":43},[29,150854,30930],{"class":305},[29,150856,150575],{"class":35},[29,150858,30936],{"class":309},[29,150860,150861,150863,150865,150867],{"class":31,"line":51},[29,150862,32580],{"class":39},[29,150864,310],{"class":309},[29,150866,150518],{"class":103},[29,150868,316],{"class":309},[29,150870,150871],{"class":31,"line":59},[29,150872,2575],{"emptyLinePlaceholder":233},[29,150874,150875],{"class":31,"line":67},[29,150876,2575],{"emptyLinePlaceholder":233},[29,150878,150879,150881,150883],{"class":31,"line":75},[29,150880,14869],{"class":305},[29,150882,150641],{"class":35},[29,150884,3914],{"class":309},[29,150886,150887,150889,150891],{"class":31,"line":83},[29,150888,30930],{"class":305},[29,150890,150575],{"class":35},[29,150892,30936],{"class":309},[29,150894,150895,150897,150899,150901],{"class":31,"line":158},[29,150896,32580],{"class":39},[29,150898,310],{"class":309},[29,150900,150664],{"class":103},[29,150902,316],{"class":309},[29,150904,150905],{"class":31,"line":166},[29,150906,2575],{"emptyLinePlaceholder":233},[29,150908,150909],{"class":31,"line":1505},[29,150910,2575],{"emptyLinePlaceholder":233},[29,150912,150913,150915,150918],{"class":31,"line":1788},[29,150914,32076],{"class":305},[29,150916,150917],{"class":35}," make_sound",[29,150919,150920],{"class":309},"(animal):\n",[29,150922,150923],{"class":31,"line":1793},[29,150924,150925],{"class":309},"    animal.speak()\n",[29,150927,150928],{"class":31,"line":1799},[29,150929,2575],{"emptyLinePlaceholder":233},[29,150931,150932],{"class":31,"line":1804},[29,150933,2575],{"emptyLinePlaceholder":233},[29,150935,150936],{"class":31,"line":1818},[29,150937,150938],{"class":309},"make_sound(Dog())\n",[29,150940,150941],{"class":31,"line":1823},[29,150942,150943],{"class":309},"make_sound(Cat())\n",[171,150945,150946],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150948,150950],{"id":150949},"_1112-类属性和实例属性","11.12 类属性和实例属性",[171,150952,150953],{},"实例属性属于对象：",[19,150955,150957],{"className":30507,"code":150956,"language":30509,"meta":24,"style":24},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[26,150958,150959,150967,150975],{"__ignoreMap":24},[29,150960,150961,150963,150965],{"class":31,"line":32},[29,150962,14869],{"class":305},[29,150964,8073],{"class":35},[29,150966,3914],{"class":309},[29,150968,150969,150971,150973],{"class":31,"line":43},[29,150970,30930],{"class":305},[29,150972,30933],{"class":39},[29,150974,150739],{"class":309},[29,150976,150977,150979,150981,150983],{"class":31,"line":51},[29,150978,30974],{"class":39},[29,150980,149919],{"class":309},[29,150982,355],{"class":305},[29,150984,149924],{"class":309},[171,150986,150987],{},"类属性属于类，所有对象共享：",[19,150989,150991],{"className":30507,"code":150990,"language":30509,"meta":24,"style":24},"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",[26,150992,150993,151001,151011,151015,151023,151033,151037,151041,151054,151068,151072,151079,151086],{"__ignoreMap":24},[29,150994,150995,150997,150999],{"class":31,"line":32},[29,150996,14869],{"class":305},[29,150998,8073],{"class":35},[29,151000,3914],{"class":309},[29,151002,151003,151006,151008],{"class":31,"line":43},[29,151004,151005],{"class":309},"    school ",[29,151007,355],{"class":305},[29,151009,151010],{"class":103}," \"黑马学校\"\n",[29,151012,151013],{"class":31,"line":51},[29,151014,2575],{"emptyLinePlaceholder":233},[29,151016,151017,151019,151021],{"class":31,"line":59},[29,151018,30930],{"class":305},[29,151020,30933],{"class":39},[29,151022,150739],{"class":309},[29,151024,151025,151027,151029,151031],{"class":31,"line":67},[29,151026,30974],{"class":39},[29,151028,149919],{"class":309},[29,151030,355],{"class":305},[29,151032,149924],{"class":309},[29,151034,151035],{"class":31,"line":75},[29,151036,2575],{"emptyLinePlaceholder":233},[29,151038,151039],{"class":31,"line":83},[29,151040,2575],{"emptyLinePlaceholder":233},[29,151042,151043,151046,151048,151050,151052],{"class":31,"line":158},[29,151044,151045],{"class":309},"s1 ",[29,151047,355],{"class":305},[29,151049,150014],{"class":309},[29,151051,150017],{"class":103},[29,151053,316],{"class":309},[29,151055,151056,151059,151061,151063,151066],{"class":31,"line":166},[29,151057,151058],{"class":309},"s2 ",[29,151060,355],{"class":305},[29,151062,150014],{"class":309},[29,151064,151065],{"class":103},"\"小红\"",[29,151067,316],{"class":309},[29,151069,151070],{"class":31,"line":1505},[29,151071,2575],{"emptyLinePlaceholder":233},[29,151073,151074,151076],{"class":31,"line":1788},[29,151075,30544],{"class":39},[29,151077,151078],{"class":309},"(s1.school)\n",[29,151080,151081,151083],{"class":31,"line":1793},[29,151082,30544],{"class":39},[29,151084,151085],{"class":309},"(s2.school)\n",[29,151087,151088,151090],{"class":31,"line":1799},[29,151089,30544],{"class":39},[29,151091,151092],{"class":309},"(Student.school)\n",[171,151094,151095],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151097,151099],{"id":151098},"_1113-类方法和静态方法","11.13 类方法和静态方法",[275,151101,151103],{"id":151102},"_11131-类方法","11.13.1 类方法",[171,151105,151106,151107,151110,151111,28514],{},"类方法使用 ",[26,151108,151109],{},"@classmethod","，第一个参数通常是 ",[26,151112,151113],{},"cls",[19,151115,151117],{"className":30507,"code":151116,"language":30509,"meta":24,"style":24},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[26,151118,151119,151127,151135,151139,151147,151157,151167,151171,151175],{"__ignoreMap":24},[29,151120,151121,151123,151125],{"class":31,"line":32},[29,151122,14869],{"class":305},[29,151124,8073],{"class":35},[29,151126,3914],{"class":309},[29,151128,151129,151131,151133],{"class":31,"line":43},[29,151130,151005],{"class":309},[29,151132,355],{"class":305},[29,151134,151010],{"class":103},[29,151136,151137],{"class":31,"line":51},[29,151138,2575],{"emptyLinePlaceholder":233},[29,151140,151141,151144],{"class":31,"line":59},[29,151142,151143],{"class":35},"    @",[29,151145,151146],{"class":39},"classmethod\n",[29,151148,151149,151151,151154],{"class":31,"line":67},[29,151150,30930],{"class":305},[29,151152,151153],{"class":35}," get_school",[29,151155,151156],{"class":309},"(cls):\n",[29,151158,151159,151161,151164],{"class":31,"line":75},[29,151160,14927],{"class":305},[29,151162,151163],{"class":39}," cls",[29,151165,151166],{"class":309},".school\n",[29,151168,151169],{"class":31,"line":83},[29,151170,2575],{"emptyLinePlaceholder":233},[29,151172,151173],{"class":31,"line":158},[29,151174,2575],{"emptyLinePlaceholder":233},[29,151176,151177,151179],{"class":31,"line":166},[29,151178,30544],{"class":39},[29,151180,151181],{"class":309},"(Student.get_school())\n",[275,151183,151185],{"id":151184},"_11132-静态方法","11.13.2 静态方法",[171,151187,151188,151189,151192],{},"静态方法使用 ",[26,151190,151191],{},"@staticmethod","，不需要访问实例和类。",[19,151194,151196],{"className":30507,"code":151195,"language":30509,"meta":24,"style":24},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[26,151197,151198,151207,151214,151223,151234,151238,151242],{"__ignoreMap":24},[29,151199,151200,151202,151205],{"class":31,"line":32},[29,151201,14869],{"class":305},[29,151203,151204],{"class":35}," MathUtils",[29,151206,3914],{"class":309},[29,151208,151209,151211],{"class":31,"line":43},[29,151210,151143],{"class":35},[29,151212,151213],{"class":39},"staticmethod\n",[29,151215,151216,151218,151220],{"class":31,"line":51},[29,151217,30930],{"class":305},[29,151219,5384],{"class":35},[29,151221,151222],{"class":309},"(a, b):\n",[29,151224,151225,151227,151229,151231],{"class":31,"line":59},[29,151226,14927],{"class":305},[29,151228,11044],{"class":309},[29,151230,789],{"class":305},[29,151232,151233],{"class":309}," b\n",[29,151235,151236],{"class":31,"line":67},[29,151237,2575],{"emptyLinePlaceholder":233},[29,151239,151240],{"class":31,"line":75},[29,151241,2575],{"emptyLinePlaceholder":233},[29,151243,151244,151246,151249,151251,151253,151255],{"class":31,"line":83},[29,151245,30544],{"class":39},[29,151247,151248],{"class":309},"(MathUtils.add(",[29,151250,525],{"class":39},[29,151252,12610],{"class":309},[29,151254,386],{"class":39},[29,151256,30626],{"class":309},[171,151258,151259],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151261,151263],{"id":151262},"_1114-dataclass","11.14 dataclass",[171,151265,151266,151269],{},[26,151267,151268],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[19,151271,151273],{"className":30507,"code":151272,"language":30509,"meta":24,"style":24},"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",[26,151274,151275,151287,151291,151295,151300,151308,151316,151324,151332,151336,151340,151360],{"__ignoreMap":24},[29,151276,151277,151279,151282,151284],{"class":31,"line":32},[29,151278,30866],{"class":305},[29,151280,151281],{"class":309}," dataclasses ",[29,151283,30521],{"class":305},[29,151285,151286],{"class":309}," dataclass\n",[29,151288,151289],{"class":31,"line":43},[29,151290,2575],{"emptyLinePlaceholder":233},[29,151292,151293],{"class":31,"line":51},[29,151294,2575],{"emptyLinePlaceholder":233},[29,151296,151297],{"class":31,"line":59},[29,151298,151299],{"class":35},"@dataclass\n",[29,151301,151302,151304,151306],{"class":31,"line":67},[29,151303,14869],{"class":305},[29,151305,8073],{"class":35},[29,151307,3914],{"class":309},[29,151309,151310,151313],{"class":31,"line":75},[29,151311,151312],{"class":309},"    name: ",[29,151314,151315],{"class":39},"str\n",[29,151317,151318,151321],{"class":31,"line":83},[29,151319,151320],{"class":309},"    age: ",[29,151322,151323],{"class":39},"int\n",[29,151325,151326,151329],{"class":31,"line":158},[29,151327,151328],{"class":309},"    score: ",[29,151330,151331],{"class":39},"float\n",[29,151333,151334],{"class":31,"line":166},[29,151335,2575],{"emptyLinePlaceholder":233},[29,151337,151338],{"class":31,"line":1505},[29,151339,2575],{"emptyLinePlaceholder":233},[29,151341,151342,151344,151346,151348,151350,151352,151354,151356,151358],{"class":31,"line":1788},[29,151343,149610],{"class":309},[29,151345,355],{"class":305},[29,151347,150014],{"class":309},[29,151349,150017],{"class":103},[29,151351,12610],{"class":309},[29,151353,958],{"class":39},[29,151355,12610],{"class":309},[29,151357,1297],{"class":39},[29,151359,316],{"class":309},[29,151361,151362,151364],{"class":31,"line":1793},[29,151363,30544],{"class":39},[29,151365,150171],{"class":309},[171,151367,151368,151369,520,151371,151374],{},"它会自动生成 ",[26,151370,30958],{},[26,151372,151373],{},"__repr__"," 等方法。适合数据模型类。",[14,151376,151378],{"id":151377},"_1115-小案例学生类","11.15 小案例：学生类",[19,151380,151382],{"className":30507,"code":151381,"language":30509,"meta":24,"style":24},"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",[26,151383,151384,151392,151401,151413,151423,151433,151443,151447,151456,151469,151473,151482,151488,151500,151512,151524,151536,151540,151544,151550,151560,151569,151579,151587,151595,151604,151608,151612,151620,151656,151660,151664,151689,151696],{"__ignoreMap":24},[29,151385,151386,151388,151390],{"class":31,"line":32},[29,151387,14869],{"class":305},[29,151389,8073],{"class":35},[29,151391,3914],{"class":309},[29,151393,151394,151396,151398],{"class":31,"line":43},[29,151395,30930],{"class":305},[29,151397,30933],{"class":39},[29,151399,151400],{"class":309},"(self, student_id, name, age, score):\n",[29,151402,151403,151405,151408,151410],{"class":31,"line":51},[29,151404,30974],{"class":39},[29,151406,151407],{"class":309},".student_id ",[29,151409,355],{"class":305},[29,151411,151412],{"class":309}," student_id\n",[29,151414,151415,151417,151419,151421],{"class":31,"line":59},[29,151416,30974],{"class":39},[29,151418,149919],{"class":309},[29,151420,355],{"class":305},[29,151422,149924],{"class":309},[29,151424,151425,151427,151429,151431],{"class":31,"line":67},[29,151426,30974],{"class":39},[29,151428,149931],{"class":309},[29,151430,355],{"class":305},[29,151432,149936],{"class":309},[29,151434,151435,151437,151439,151441],{"class":31,"line":75},[29,151436,30974],{"class":39},[29,151438,149943],{"class":309},[29,151440,355],{"class":305},[29,151442,1755],{"class":309},[29,151444,151445],{"class":31,"line":83},[29,151446,2575],{"emptyLinePlaceholder":233},[29,151448,151449,151451,151454],{"class":31,"line":158},[29,151450,30930],{"class":305},[29,151452,151453],{"class":35}," is_passed",[29,151455,30936],{"class":309},[29,151457,151458,151460,151462,151464,151466],{"class":31,"line":166},[29,151459,14927],{"class":305},[29,151461,39002],{"class":39},[29,151463,149943],{"class":309},[29,151465,1886],{"class":305},[29,151467,151468],{"class":39}," 60\n",[29,151470,151471],{"class":31,"line":1505},[29,151472,2575],{"emptyLinePlaceholder":233},[29,151474,151475,151477,151480],{"class":31,"line":1788},[29,151476,30930],{"class":305},[29,151478,151479],{"class":35}," to_dict",[29,151481,30936],{"class":309},[29,151483,151484,151486],{"class":31,"line":1793},[29,151485,14927],{"class":305},[29,151487,15747],{"class":309},[29,151489,151490,151493,151495,151497],{"class":31,"line":1799},[29,151491,151492],{"class":103},"            \"student_id\"",[29,151494,51566],{"class":309},[29,151496,30952],{"class":39},[29,151498,151499],{"class":309},".student_id,\n",[29,151501,151502,151505,151507,151509],{"class":31,"line":1804},[29,151503,151504],{"class":103},"            \"name\"",[29,151506,51566],{"class":309},[29,151508,30952],{"class":39},[29,151510,151511],{"class":309},".name,\n",[29,151513,151514,151517,151519,151521],{"class":31,"line":1818},[29,151515,151516],{"class":103},"            \"age\"",[29,151518,51566],{"class":309},[29,151520,30952],{"class":39},[29,151522,151523],{"class":309},".age,\n",[29,151525,151526,151529,151531,151533],{"class":31,"line":1823},[29,151527,151528],{"class":103},"            \"score\"",[29,151530,51566],{"class":309},[29,151532,30952],{"class":39},[29,151534,151535],{"class":309},".score,\n",[29,151537,151538],{"class":31,"line":1829},[29,151539,2704],{"class":309},[29,151541,151542],{"class":31,"line":1850},[29,151543,2575],{"emptyLinePlaceholder":233},[29,151545,151546,151548],{"class":31,"line":1855},[29,151547,151143],{"class":35},[29,151549,151146],{"class":39},[29,151551,151552,151554,151557],{"class":31,"line":1869},[29,151553,30930],{"class":305},[29,151555,151556],{"class":35}," from_dict",[29,151558,151559],{"class":309},"(cls, data):\n",[29,151561,151562,151564,151566],{"class":31,"line":1874},[29,151563,14927],{"class":305},[29,151565,151163],{"class":39},[29,151567,151568],{"class":309},"(\n",[29,151570,151571,151574,151577],{"class":31,"line":1903},[29,151572,151573],{"class":309},"            data[",[29,151575,151576],{"class":103},"\"student_id\"",[29,151578,87965],{"class":309},[29,151580,151581,151583,151585],{"class":31,"line":1908},[29,151582,151573],{"class":309},[29,151584,62808],{"class":103},[29,151586,87965],{"class":309},[29,151588,151589,151591,151593],{"class":31,"line":1925},[29,151590,151573],{"class":309},[29,151592,69253],{"class":103},[29,151594,87965],{"class":309},[29,151596,151597,151599,151602],{"class":31,"line":1930},[29,151598,151573],{"class":309},[29,151600,151601],{"class":103},"\"score\"",[29,151603,87965],{"class":309},[29,151605,151606],{"class":31,"line":1935},[29,151607,38255],{"class":309},[29,151609,151610],{"class":31,"line":1940},[29,151611,2575],{"emptyLinePlaceholder":233},[29,151613,151614,151616,151618],{"class":31,"line":1954},[29,151615,30930],{"class":305},[29,151617,150110],{"class":39},[29,151619,30936],{"class":309},[29,151621,151622,151624,151626,151628,151630,151633,151635,151638,151640,151642,151644,151646,151648,151650,151652,151654],{"class":31,"line":1959},[29,151623,14927],{"class":305},[29,151625,150119],{"class":305},[29,151627,559],{"class":103},[29,151629,149581],{"class":39},[29,151631,151632],{"class":309},".student_id",[29,151634,1254],{"class":39},[29,151636,151637],{"class":39}," {self",[29,151639,80430],{"class":309},[29,151641,1254],{"class":39},[29,151643,151637],{"class":39},[29,151645,80442],{"class":309},[29,151647,1254],{"class":39},[29,151649,151637],{"class":39},[29,151651,149991],{"class":309},[29,151653,1254],{"class":39},[29,151655,25262],{"class":103},[29,151657,151658],{"class":31,"line":2752},[29,151659,2575],{"emptyLinePlaceholder":233},[29,151661,151662],{"class":31,"line":2766},[29,151663,2575],{"emptyLinePlaceholder":233},[29,151665,151666,151668,151670,151672,151675,151677,151679,151681,151683,151685,151687],{"class":31,"line":2774},[29,151667,149610],{"class":309},[29,151669,355],{"class":305},[29,151671,150014],{"class":309},[29,151673,151674],{"class":103},"\"001\"",[29,151676,12610],{"class":309},[29,151678,150017],{"class":103},[29,151680,12610],{"class":309},[29,151682,958],{"class":39},[29,151684,12610],{"class":309},[29,151686,1297],{"class":39},[29,151688,316],{"class":309},[29,151690,151691,151693],{"class":31,"line":2779},[29,151692,30544],{"class":39},[29,151694,151695],{"class":309},"(student.is_passed())\n",[29,151697,151698,151700],{"class":31,"line":2785},[29,151699,30544],{"class":39},[29,151701,151702],{"class":309},"(student.to_dict())\n",[171,151704,151705,101147,151708,151711],{},[26,151706,151707],{},"to_dict()",[26,151709,151710],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151713,151715],{"id":151714},"_1116-易错点","11.16 易错点",[259,151717,151718,151724,151730,151735,151738,151741],{},[178,151719,151720,151721,28514],{},"类名推荐使用大驼峰，如 ",[26,151722,151723],{},"StudentManager",[178,151725,151726,151727,151729],{},"方法第一个参数必须写 ",[26,151728,30952],{},"，调用时不用传。",[178,151731,151732,151734],{},[26,151733,30958],{}," 不是普通方法，它在创建对象时自动执行。",[178,151736,151737],{},"私有属性不是绝对安全，只是约定和名称改写。",[178,151739,151740],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[178,151742,151743],{},"类中方法太多时，说明职责可能过重。",[14,151745,151747],{"id":151746},"_1117-本章练习","11.17 本章练习",[259,151749,151750,151756,151762,151767,151780],{},[178,151751,151752,151753,151755],{},"定义 ",[26,151754,149697],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[178,151757,151752,151758,151761],{},[26,151759,151760],{},"Account"," 类，实现存款、取款、查询余额。",[178,151763,151752,151764,151766],{},[26,151765,17401],{}," 类，计算圆的周长和面积。",[178,151768,151752,151769,520,151772,151775,151776,151779],{},[26,151770,151771],{},"Dog",[26,151773,151774],{},"Cat"," 类，并用同一个函数调用它们的 ",[26,151777,151778],{},"speak()"," 方法。",[178,151781,104495,151782,151784,151785,28514],{},[26,151783,151268],{}," 定义一个商品类 ",[26,151786,151787],{},"Product",[223,151789,151790],{},"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":24,"searchDepth":43,"depth":43,"links":151792},[151793,151794,151795,151796,151797,151798,151800,151801,151802,151803,151804,151805,151806,151810,151811,151812,151813],{"id":149461,"depth":43,"text":149462},{"id":149644,"depth":43,"text":149645},{"id":149708,"depth":43,"text":149709},{"id":149785,"depth":43,"text":149786},{"id":149884,"depth":43,"text":149885},{"id":150048,"depth":43,"text":151799},"11.6 str",{"id":150174,"depth":43,"text":150175},{"id":150440,"depth":43,"text":150441},{"id":150554,"depth":43,"text":150555},{"id":150709,"depth":43,"text":150710},{"id":150833,"depth":43,"text":150834},{"id":150949,"depth":43,"text":150950},{"id":151098,"depth":43,"text":151099,"children":151807},[151808,151809],{"id":151102,"depth":51,"text":151103},{"id":151184,"depth":51,"text":151185},{"id":151262,"depth":43,"text":151263},{"id":151377,"depth":43,"text":151378},{"id":151714,"depth":43,"text":151715},{"id":151746,"depth":43,"text":151747},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149453,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151820,"title":151821,"body":151822,"description":230,"extension":231,"meta":155135,"navigation":233,"path":155136,"seo":155137,"stem":155138,"__hash__":155139},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151823,"toc":155111},[151824,151827,151831,151834,151837,151866,151869,151877,151881,151885,151888,151911,151914,151920,151924,153370,153373,153394,153398,153401,153413,153416,153600,153603,153729,153732,153736,153740,153876,153880,153966,153970,154052,154056,154093,154097,154286,154290,154293,154523,154527,154530,154711,154714,154718,154721,154727,154730,154756,154760,154763,154777,154780,154805,154808,154822,154825,154842,154845,154862,154865,154882,154886,154912,154916,154939,154943,154946,154948,154954,154956,154977,154980,154986,154992,154996,154999,155075,155078,155082,155108],[10,151825,151821],{"id":151826},"_12-综合案例与复习路线",[14,151828,151830],{"id":151829},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[171,151832,151833],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[171,151835,151836],{},"一个合格的入门综合项目最好覆盖：",[259,151838,151839,151842,151845,151848,151851,151854,151857,151860,151863],{},[178,151840,151841],{},"输入输出。",[178,151843,151844],{},"判断和循环。",[178,151846,151847],{},"函数拆分。",[178,151849,151850],{},"列表、字典等容器。",[178,151852,151853],{},"文件持久化。",[178,151855,151856],{},"异常处理。",[178,151858,151859],{},"模块拆分。",[178,151861,151862],{},"可选：面向对象。",[178,151864,151865],{},"可选：数据可视化。",[171,151867,151868],{},"本章整理两个方向：",[259,151870,151871,151874],{},[178,151872,151873],{},"学生管理系统。",[178,151875,151876],{},"销售数据统计和可视化。",[14,151878,151880],{"id":151879},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[275,151882,151884],{"id":151883},"_1221-需求","12.2.1 需求",[171,151886,151887],{},"实现一个命令行学生管理系统：",[259,151889,151890,151893,151896,151899,151902,151905,151908],{},[178,151891,151892],{},"添加学生。",[178,151894,151895],{},"删除学生。",[178,151897,151898],{},"修改学生。",[178,151900,151901],{},"查询学生。",[178,151903,151904],{},"显示所有学生。",[178,151906,151907],{},"保存到 JSON 文件。",[178,151909,151910],{},"程序启动时自动读取 JSON 文件。",[171,151912,151913],{},"学生字段：",[19,151915,151918],{"className":151916,"code":151917,"language":5362,"meta":24},[5360],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[26,151919,151917],{"__ignoreMap":24},[14,151921,151923],{"id":151922},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[19,151925,151927],{"className":30507,"code":151926,"language":30509,"meta":24,"style":24},"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",[26,151928,151929,151935,151945,151949,151963,151967,151971,151980,151992,151998,152002,152008,152039,152049,152056,152067,152073,152077,152081,152091,152122,152148,152152,152156,152165,152176,152187,152198,152209,152220,152231,152242,152246,152250,152260,152272,152288,152295,152302,152306,152310,152320,152328,152335,152348,152358,152369,152373,152377,152386,152394,152400,152412,152420,152431,152435,152439,152448,152464,152468,152475,152486,152491,152495,152511,152526,152541,152545,152550,152558,152566,152574,152582,152586,152591,152602,152606,152610,152619,152634,152644,152648,152660,152671,152675,152679,152684,152688,152699,152703,152707,152716,152731,152739,152743,152755,152765,152769,152773,152788,152801,152814,152818,152831,152843,152855,152859,152863,152874,152878,152882,152891,152906,152914,152918,152930,152940,152944,152948,152953,152957,152961,152971,152977,152999,153018,153037,153056,153061,153065,153069,153078,153086,153097,153101,153105,153131,153141,153146,153150,153154,153162,153172,153176,153184,153189,153205,153209,153223,153228,153242,153247,153260,153265,153278,153283,153296,153301,153314,153325,153329,153335,153346,153350,153354,153366],{"__ignoreMap":24},[29,151930,151931,151933],{"class":31,"line":32},[29,151932,30521],{"class":305},[29,151934,147220],{"class":309},[29,151936,151937,151939,151941,151943],{"class":31,"line":43},[29,151938,30866],{"class":305},[29,151940,108440],{"class":309},[29,151942,30521],{"class":305},[29,151944,108445],{"class":309},[29,151946,151947],{"class":31,"line":51},[29,151948,2575],{"emptyLinePlaceholder":233},[29,151950,151951,151954,151956,151958,151961],{"class":31,"line":59},[29,151952,151953],{"class":39},"DATA_FILE",[29,151955,13739],{"class":305},[29,151957,108674],{"class":309},[29,151959,151960],{"class":103},"\"students.json\"",[29,151962,316],{"class":309},[29,151964,151965],{"class":31,"line":67},[29,151966,2575],{"emptyLinePlaceholder":233},[29,151968,151969],{"class":31,"line":75},[29,151970,2575],{"emptyLinePlaceholder":233},[29,151972,151973,151975,151978],{"class":31,"line":83},[29,151974,32076],{"class":305},[29,151976,151977],{"class":35}," load_students",[29,151979,32082],{"class":309},[29,151981,151982,151984,151986,151989],{"class":31,"line":158},[29,151983,3276],{"class":305},[29,151985,39059],{"class":305},[29,151987,151988],{"class":39}," DATA_FILE",[29,151990,151991],{"class":309},".exists():\n",[29,151993,151994,151996],{"class":31,"line":166},[29,151995,14927],{"class":305},[29,151997,51967],{"class":309},[29,151999,152000],{"class":31,"line":1505},[29,152001,2575],{"emptyLinePlaceholder":233},[29,152003,152004,152006],{"class":31,"line":1788},[29,152005,125913],{"class":305},[29,152007,3914],{"class":309},[29,152009,152010,152013,152015,152017,152019,152021,152023,152025,152027,152029,152031,152033,152035,152037],{"class":31,"line":1793},[29,152011,152012],{"class":305},"        with",[29,152014,146920],{"class":39},[29,152016,310],{"class":309},[29,152018,151953],{"class":39},[29,152020,12610],{"class":309},[29,152022,146930],{"class":103},[29,152024,12610],{"class":309},[29,152026,146935],{"class":5391},[29,152028,355],{"class":305},[29,152030,146940],{"class":103},[29,152032,13889],{"class":309},[29,152034,31512],{"class":305},[29,152036,148282],{"class":5391},[29,152038,3914],{"class":309},[29,152040,152041,152043,152045,152047],{"class":31,"line":1799},[29,152042,15907],{"class":305},[29,152044,148293],{"class":309},[29,152046,45483],{"class":5391},[29,152048,316],{"class":309},[29,152050,152051,152053],{"class":31,"line":1804},[29,152052,125941],{"class":305},[29,152054,152055],{"class":309}," json.JSONDecodeError:\n",[29,152057,152058,152060,152062,152065],{"class":31,"line":1818},[29,152059,32580],{"class":39},[29,152061,310],{"class":309},[29,152063,152064],{"class":103},"\"数据文件格式错误，已使用空数据启动\"",[29,152066,316],{"class":309},[29,152068,152069,152071],{"class":31,"line":1823},[29,152070,14927],{"class":305},[29,152072,51967],{"class":309},[29,152074,152075],{"class":31,"line":1829},[29,152076,2575],{"emptyLinePlaceholder":233},[29,152078,152079],{"class":31,"line":1850},[29,152080,2575],{"emptyLinePlaceholder":233},[29,152082,152083,152085,152088],{"class":31,"line":1855},[29,152084,32076],{"class":305},[29,152086,152087],{"class":35}," save_students",[29,152089,152090],{"class":309},"(students):\n",[29,152092,152093,152095,152097,152099,152101,152103,152106,152108,152110,152112,152114,152116,152118,152120],{"class":31,"line":1869},[29,152094,34307],{"class":305},[29,152096,146920],{"class":39},[29,152098,310],{"class":309},[29,152100,151953],{"class":39},[29,152102,12610],{"class":309},[29,152104,152105],{"class":103},"\"w\"",[29,152107,12610],{"class":309},[29,152109,146935],{"class":5391},[29,152111,355],{"class":305},[29,152113,146940],{"class":103},[29,152115,13889],{"class":309},[29,152117,31512],{"class":305},[29,152119,148282],{"class":5391},[29,152121,3914],{"class":309},[29,152123,152124,152127,152129,152131,152133,152135,152137,152139,152142,152144,152146],{"class":31,"line":1874},[29,152125,152126],{"class":309},"        json.dump(students, ",[29,152128,45483],{"class":5391},[29,152130,12610],{"class":309},[29,152132,147266],{"class":5391},[29,152134,355],{"class":305},[29,152136,34116],{"class":39},[29,152138,12610],{"class":309},[29,152140,152141],{"class":5391},"indent",[29,152143,355],{"class":305},[29,152145,386],{"class":39},[29,152147,316],{"class":309},[29,152149,152150],{"class":31,"line":1903},[29,152151,2575],{"emptyLinePlaceholder":233},[29,152153,152154],{"class":31,"line":1908},[29,152155,2575],{"emptyLinePlaceholder":233},[29,152157,152158,152160,152163],{"class":31,"line":1925},[29,152159,32076],{"class":305},[29,152161,152162],{"class":35}," show_menu",[29,152164,32082],{"class":309},[29,152166,152167,152169,152171,152174],{"class":31,"line":1930},[29,152168,31428],{"class":39},[29,152170,310],{"class":309},[29,152172,152173],{"class":103},"\"====== 学生管理系统 ======\"",[29,152175,316],{"class":309},[29,152177,152178,152180,152182,152185],{"class":31,"line":1935},[29,152179,31428],{"class":39},[29,152181,310],{"class":309},[29,152183,152184],{"class":103},"\"1. 添加学生\"",[29,152186,316],{"class":309},[29,152188,152189,152191,152193,152196],{"class":31,"line":1940},[29,152190,31428],{"class":39},[29,152192,310],{"class":309},[29,152194,152195],{"class":103},"\"2. 删除学生\"",[29,152197,316],{"class":309},[29,152199,152200,152202,152204,152207],{"class":31,"line":1954},[29,152201,31428],{"class":39},[29,152203,310],{"class":309},[29,152205,152206],{"class":103},"\"3. 修改学生\"",[29,152208,316],{"class":309},[29,152210,152211,152213,152215,152218],{"class":31,"line":1959},[29,152212,31428],{"class":39},[29,152214,310],{"class":309},[29,152216,152217],{"class":103},"\"4. 查询学生\"",[29,152219,316],{"class":309},[29,152221,152222,152224,152226,152229],{"class":31,"line":2752},[29,152223,31428],{"class":39},[29,152225,310],{"class":309},[29,152227,152228],{"class":103},"\"5. 显示所有学生\"",[29,152230,316],{"class":309},[29,152232,152233,152235,152237,152240],{"class":31,"line":2766},[29,152234,31428],{"class":39},[29,152236,310],{"class":309},[29,152238,152239],{"class":103},"\"0. 退出系统\"",[29,152241,316],{"class":309},[29,152243,152244],{"class":31,"line":2774},[29,152245,2575],{"emptyLinePlaceholder":233},[29,152247,152248],{"class":31,"line":2779},[29,152249,2575],{"emptyLinePlaceholder":233},[29,152251,152252,152254,152257],{"class":31,"line":2785},[29,152253,32076],{"class":305},[29,152255,152256],{"class":35}," find_student",[29,152258,152259],{"class":309},"(students, student_id):\n",[29,152261,152262,152264,152267,152269],{"class":31,"line":2791},[29,152263,3376],{"class":305},[29,152265,152266],{"class":309}," student ",[29,152268,26172],{"class":305},[29,152270,152271],{"class":309}," students:\n",[29,152273,152274,152276,152279,152281,152283,152285],{"class":31,"line":2796},[29,152275,2672],{"class":305},[29,152277,152278],{"class":309}," student[",[29,152280,151576],{"class":103},[29,152282,4618],{"class":309},[29,152284,3124],{"class":305},[29,152286,152287],{"class":309}," student_id:\n",[29,152289,152290,152292],{"class":31,"line":8123},[29,152291,15907],{"class":305},[29,152293,152294],{"class":309}," student\n",[29,152296,152297,152299],{"class":31,"line":8147},[29,152298,4265],{"class":305},[29,152300,152301],{"class":39}," None\n",[29,152303,152304],{"class":31,"line":8152},[29,152305,2575],{"emptyLinePlaceholder":233},[29,152307,152308],{"class":31,"line":8158},[29,152309,2575],{"emptyLinePlaceholder":233},[29,152311,152312,152314,152317],{"class":31,"line":8185},[29,152313,32076],{"class":305},[29,152315,152316],{"class":35}," input_int",[29,152318,152319],{"class":309},"(prompt):\n",[29,152321,152322,152324,152326],{"class":31,"line":8190},[29,152323,2426],{"class":305},[29,152325,95421],{"class":39},[29,152327,3914],{"class":309},[29,152329,152330,152333],{"class":31,"line":8196},[29,152331,152332],{"class":305},"        try",[29,152334,3914],{"class":309},[29,152336,152337,152339,152341,152343,152345],{"class":31,"line":8208},[29,152338,15907],{"class":305},[29,152340,2557],{"class":39},[29,152342,310],{"class":309},[29,152344,53950],{"class":39},[29,152346,152347],{"class":309},"(prompt))\n",[29,152349,152350,152353,152356],{"class":31,"line":8220},[29,152351,152352],{"class":305},"        except",[29,152354,152355],{"class":39}," ValueError",[29,152357,3914],{"class":309},[29,152359,152360,152362,152364,152367],{"class":31,"line":8232},[29,152361,34779],{"class":39},[29,152363,310],{"class":309},[29,152365,152366],{"class":103},"\"请输入整数\"",[29,152368,316],{"class":309},[29,152370,152371],{"class":31,"line":9891},[29,152372,2575],{"emptyLinePlaceholder":233},[29,152374,152375],{"class":31,"line":9916},[29,152376,2575],{"emptyLinePlaceholder":233},[29,152378,152379,152381,152384],{"class":31,"line":9939},[29,152380,32076],{"class":305},[29,152382,152383],{"class":35}," input_float",[29,152385,152319],{"class":309},[29,152387,152388,152390,152392],{"class":31,"line":9963},[29,152389,2426],{"class":305},[29,152391,95421],{"class":39},[29,152393,3914],{"class":309},[29,152395,152396,152398],{"class":31,"line":9968},[29,152397,152332],{"class":305},[29,152399,3914],{"class":309},[29,152401,152402,152404,152406,152408,152410],{"class":31,"line":9973},[29,152403,15907],{"class":305},[29,152405,109926],{"class":39},[29,152407,310],{"class":309},[29,152409,53950],{"class":39},[29,152411,152347],{"class":309},[29,152413,152414,152416,152418],{"class":31,"line":9978},[29,152415,152352],{"class":305},[29,152417,152355],{"class":39},[29,152419,3914],{"class":309},[29,152421,152422,152424,152426,152429],{"class":31,"line":9987},[29,152423,34779],{"class":39},[29,152425,310],{"class":309},[29,152427,152428],{"class":103},"\"请输入数字\"",[29,152430,316],{"class":309},[29,152432,152433],{"class":31,"line":9992},[29,152434,2575],{"emptyLinePlaceholder":233},[29,152436,152437],{"class":31,"line":9998},[29,152438,2575],{"emptyLinePlaceholder":233},[29,152440,152441,152443,152446],{"class":31,"line":10019},[29,152442,32076],{"class":305},[29,152444,152445],{"class":35}," add_student",[29,152447,152090],{"class":309},[29,152449,152450,152453,152455,152457,152459,152462],{"class":31,"line":10025},[29,152451,152452],{"class":309},"    student_id ",[29,152454,355],{"class":305},[29,152456,60734],{"class":39},[29,152458,310],{"class":309},[29,152460,152461],{"class":103},"\"请输入学号:\"",[29,152463,316],{"class":309},[29,152465,152466],{"class":31,"line":10039},[29,152467,2575],{"emptyLinePlaceholder":233},[29,152469,152470,152472],{"class":31,"line":10045},[29,152471,3276],{"class":305},[29,152473,152474],{"class":309}," find_student(students, student_id):\n",[29,152476,152477,152479,152481,152484],{"class":31,"line":10072},[29,152478,32580],{"class":39},[29,152480,310],{"class":309},[29,152482,152483],{"class":103},"\"学号已存在\"",[29,152485,316],{"class":309},[29,152487,152488],{"class":31,"line":10081},[29,152489,152490],{"class":305},"        return\n",[29,152492,152493],{"class":31,"line":10087},[29,152494,2575],{"emptyLinePlaceholder":233},[29,152496,152497,152500,152502,152504,152506,152509],{"class":31,"line":10095},[29,152498,152499],{"class":309},"    name ",[29,152501,355],{"class":305},[29,152503,60734],{"class":39},[29,152505,310],{"class":309},[29,152507,152508],{"class":103},"\"请输入姓名:\"",[29,152510,316],{"class":309},[29,152512,152513,152516,152518,152521,152524],{"class":31,"line":10100},[29,152514,152515],{"class":309},"    age ",[29,152517,355],{"class":305},[29,152519,152520],{"class":309}," input_int(",[29,152522,152523],{"class":103},"\"请输入年龄:\"",[29,152525,316],{"class":309},[29,152527,152528,152531,152533,152536,152539],{"class":31,"line":16779},[29,152529,152530],{"class":309},"    score ",[29,152532,355],{"class":305},[29,152534,152535],{"class":309}," input_float(",[29,152537,152538],{"class":103},"\"请输入成绩:\"",[29,152540,316],{"class":309},[29,152542,152543],{"class":31,"line":16785},[29,152544,2575],{"emptyLinePlaceholder":233},[29,152546,152547],{"class":31,"line":16808},[29,152548,152549],{"class":309},"    students.append({\n",[29,152551,152552,152555],{"class":31,"line":16814},[29,152553,152554],{"class":103},"        \"student_id\"",[29,152556,152557],{"class":309},": student_id,\n",[29,152559,152560,152563],{"class":31,"line":16837},[29,152561,152562],{"class":103},"        \"name\"",[29,152564,152565],{"class":309},": name,\n",[29,152567,152568,152571],{"class":31,"line":16851},[29,152569,152570],{"class":103},"        \"age\"",[29,152572,152573],{"class":309},": age,\n",[29,152575,152576,152579],{"class":31,"line":16871},[29,152577,152578],{"class":103},"        \"score\"",[29,152580,152581],{"class":309},": score,\n",[29,152583,152584],{"class":31,"line":16877},[29,152585,33590],{"class":309},[29,152587,152588],{"class":31,"line":16888},[29,152589,152590],{"class":309},"    save_students(students)\n",[29,152592,152593,152595,152597,152600],{"class":31,"line":16911},[29,152594,31428],{"class":39},[29,152596,310],{"class":309},[29,152598,152599],{"class":103},"\"添加成功\"",[29,152601,316],{"class":309},[29,152603,152604],{"class":31,"line":16933},[29,152605,2575],{"emptyLinePlaceholder":233},[29,152607,152608],{"class":31,"line":16938},[29,152609,2575],{"emptyLinePlaceholder":233},[29,152611,152612,152614,152617],{"class":31,"line":16944},[29,152613,32076],{"class":305},[29,152615,152616],{"class":35}," delete_student",[29,152618,152090],{"class":309},[29,152620,152621,152623,152625,152627,152629,152632],{"class":31,"line":16958},[29,152622,152452],{"class":309},[29,152624,355],{"class":305},[29,152626,60734],{"class":39},[29,152628,310],{"class":309},[29,152630,152631],{"class":103},"\"请输入要删除的学号:\"",[29,152633,316],{"class":309},[29,152635,152636,152639,152641],{"class":31,"line":16971},[29,152637,152638],{"class":309},"    student ",[29,152640,355],{"class":305},[29,152642,152643],{"class":309}," find_student(students, student_id)\n",[29,152645,152646],{"class":31,"line":16976},[29,152647,2575],{"emptyLinePlaceholder":233},[29,152649,152650,152652,152654,152656,152658],{"class":31,"line":16990},[29,152651,3276],{"class":305},[29,152653,152266],{"class":309},[29,152655,39056],{"class":305},[29,152657,39062],{"class":39},[29,152659,3914],{"class":309},[29,152661,152662,152664,152666,152669],{"class":31,"line":16995},[29,152663,32580],{"class":39},[29,152665,310],{"class":309},[29,152667,152668],{"class":103},"\"学生不存在\"",[29,152670,316],{"class":309},[29,152672,152673],{"class":31,"line":17001},[29,152674,152490],{"class":305},[29,152676,152677],{"class":31,"line":17006},[29,152678,2575],{"emptyLinePlaceholder":233},[29,152680,152681],{"class":31,"line":17020},[29,152682,152683],{"class":309},"    students.remove(student)\n",[29,152685,152686],{"class":31,"line":17025},[29,152687,152590],{"class":309},[29,152689,152690,152692,152694,152697],{"class":31,"line":17030},[29,152691,31428],{"class":39},[29,152693,310],{"class":309},[29,152695,152696],{"class":103},"\"删除成功\"",[29,152698,316],{"class":309},[29,152700,152701],{"class":31,"line":17044},[29,152702,2575],{"emptyLinePlaceholder":233},[29,152704,152705],{"class":31,"line":17056},[29,152706,2575],{"emptyLinePlaceholder":233},[29,152708,152709,152711,152714],{"class":31,"line":17061},[29,152710,32076],{"class":305},[29,152712,152713],{"class":35}," update_student",[29,152715,152090],{"class":309},[29,152717,152718,152720,152722,152724,152726,152729],{"class":31,"line":17074},[29,152719,152452],{"class":309},[29,152721,355],{"class":305},[29,152723,60734],{"class":39},[29,152725,310],{"class":309},[29,152727,152728],{"class":103},"\"请输入要修改的学号:\"",[29,152730,316],{"class":309},[29,152732,152733,152735,152737],{"class":31,"line":17079},[29,152734,152638],{"class":309},[29,152736,355],{"class":305},[29,152738,152643],{"class":309},[29,152740,152741],{"class":31,"line":17084},[29,152742,2575],{"emptyLinePlaceholder":233},[29,152744,152745,152747,152749,152751,152753],{"class":31,"line":17089},[29,152746,3276],{"class":305},[29,152748,152266],{"class":309},[29,152750,39056],{"class":305},[29,152752,39062],{"class":39},[29,152754,3914],{"class":309},[29,152756,152757,152759,152761,152763],{"class":31,"line":17102},[29,152758,32580],{"class":39},[29,152760,310],{"class":309},[29,152762,152668],{"class":103},[29,152764,316],{"class":309},[29,152766,152767],{"class":31,"line":17107},[29,152768,152490],{"class":305},[29,152770,152771],{"class":31,"line":32762},[29,152772,2575],{"emptyLinePlaceholder":233},[29,152774,152775,152777,152779,152781,152783,152786],{"class":31,"line":32768},[29,152776,152499],{"class":309},[29,152778,355],{"class":305},[29,152780,60734],{"class":39},[29,152782,310],{"class":309},[29,152784,152785],{"class":103},"\"请输入新姓名:\"",[29,152787,316],{"class":309},[29,152789,152790,152792,152794,152796,152799],{"class":31,"line":32774},[29,152791,152515],{"class":309},[29,152793,355],{"class":305},[29,152795,152520],{"class":309},[29,152797,152798],{"class":103},"\"请输入新年龄:\"",[29,152800,316],{"class":309},[29,152802,152803,152805,152807,152809,152812],{"class":31,"line":32780},[29,152804,152530],{"class":309},[29,152806,355],{"class":305},[29,152808,152535],{"class":309},[29,152810,152811],{"class":103},"\"请输入新成绩:\"",[29,152813,316],{"class":309},[29,152815,152816],{"class":31,"line":32786},[29,152817,2575],{"emptyLinePlaceholder":233},[29,152819,152820,152823,152825,152827,152829],{"class":31,"line":32797},[29,152821,152822],{"class":309},"    student[",[29,152824,62808],{"class":103},[29,152826,4618],{"class":309},[29,152828,355],{"class":305},[29,152830,149924],{"class":309},[29,152832,152833,152835,152837,152839,152841],{"class":31,"line":32803},[29,152834,152822],{"class":309},[29,152836,69253],{"class":103},[29,152838,4618],{"class":309},[29,152840,355],{"class":305},[29,152842,149936],{"class":309},[29,152844,152845,152847,152849,152851,152853],{"class":31,"line":32823},[29,152846,152822],{"class":309},[29,152848,151601],{"class":103},[29,152850,4618],{"class":309},[29,152852,355],{"class":305},[29,152854,1755],{"class":309},[29,152856,152857],{"class":31,"line":32829},[29,152858,2575],{"emptyLinePlaceholder":233},[29,152860,152861],{"class":31,"line":32840},[29,152862,152590],{"class":309},[29,152864,152865,152867,152869,152872],{"class":31,"line":32846},[29,152866,31428],{"class":39},[29,152868,310],{"class":309},[29,152870,152871],{"class":103},"\"修改成功\"",[29,152873,316],{"class":309},[29,152875,152876],{"class":31,"line":32852},[29,152877,2575],{"emptyLinePlaceholder":233},[29,152879,152880],{"class":31,"line":32858},[29,152881,2575],{"emptyLinePlaceholder":233},[29,152883,152884,152886,152889],{"class":31,"line":32864},[29,152885,32076],{"class":305},[29,152887,152888],{"class":35}," query_student",[29,152890,152090],{"class":309},[29,152892,152893,152895,152897,152899,152901,152904],{"class":31,"line":32870},[29,152894,152452],{"class":309},[29,152896,355],{"class":305},[29,152898,60734],{"class":39},[29,152900,310],{"class":309},[29,152902,152903],{"class":103},"\"请输入要查询的学号:\"",[29,152905,316],{"class":309},[29,152907,152908,152910,152912],{"class":31,"line":32876},[29,152909,152638],{"class":309},[29,152911,355],{"class":305},[29,152913,152643],{"class":309},[29,152915,152916],{"class":31,"line":32882},[29,152917,2575],{"emptyLinePlaceholder":233},[29,152919,152920,152922,152924,152926,152928],{"class":31,"line":32902},[29,152921,3276],{"class":305},[29,152923,152266],{"class":309},[29,152925,39056],{"class":305},[29,152927,39062],{"class":39},[29,152929,3914],{"class":309},[29,152931,152932,152934,152936,152938],{"class":31,"line":32908},[29,152933,32580],{"class":39},[29,152935,310],{"class":309},[29,152937,152668],{"class":103},[29,152939,316],{"class":309},[29,152941,152942],{"class":31,"line":32924},[29,152943,152490],{"class":305},[29,152945,152946],{"class":31,"line":32930},[29,152947,2575],{"emptyLinePlaceholder":233},[29,152949,152950],{"class":31,"line":32944},[29,152951,152952],{"class":309},"    print_student(student)\n",[29,152954,152955],{"class":31,"line":32950},[29,152956,2575],{"emptyLinePlaceholder":233},[29,152958,152959],{"class":31,"line":32965},[29,152960,2575],{"emptyLinePlaceholder":233},[29,152962,152963,152965,152968],{"class":31,"line":32971},[29,152964,32076],{"class":305},[29,152966,152967],{"class":35}," print_student",[29,152969,152970],{"class":309},"(student):\n",[29,152972,152973,152975],{"class":31,"line":32980},[29,152974,31428],{"class":39},[29,152976,151568],{"class":309},[29,152978,152979,152982,152984,152986,152989,152992,152994,152997],{"class":31,"line":32986},[29,152980,152981],{"class":305},"        f",[29,152983,559],{"class":103},[29,152985,1204],{"class":39},[29,152987,152988],{"class":309},"student[",[29,152990,152991],{"class":103},"'student_id'",[29,152993,1248],{"class":309},[29,152995,152996],{"class":39},"}\\t",[29,152998,25262],{"class":103},[29,153000,153001,153003,153005,153007,153009,153012,153014,153016],{"class":31,"line":32995},[29,153002,152981],{"class":305},[29,153004,559],{"class":103},[29,153006,1204],{"class":39},[29,153008,152988],{"class":309},[29,153010,153011],{"class":103},"'name'",[29,153013,1248],{"class":309},[29,153015,152996],{"class":39},[29,153017,25262],{"class":103},[29,153019,153020,153022,153024,153026,153028,153031,153033,153035],{"class":31,"line":33001},[29,153021,152981],{"class":305},[29,153023,559],{"class":103},[29,153025,1204],{"class":39},[29,153027,152988],{"class":309},[29,153029,153030],{"class":103},"'age'",[29,153032,1248],{"class":309},[29,153034,152996],{"class":39},[29,153036,25262],{"class":103},[29,153038,153039,153041,153043,153045,153047,153050,153052,153054],{"class":31,"line":33007},[29,153040,152981],{"class":305},[29,153042,559],{"class":103},[29,153044,1204],{"class":39},[29,153046,152988],{"class":309},[29,153048,153049],{"class":103},"'score'",[29,153051,1248],{"class":309},[29,153053,1254],{"class":39},[29,153055,25262],{"class":103},[29,153057,153058],{"class":31,"line":33016},[29,153059,153060],{"class":309},"    )\n",[29,153062,153063],{"class":31,"line":33022},[29,153064,2575],{"emptyLinePlaceholder":233},[29,153066,153067],{"class":31,"line":33033},[29,153068,2575],{"emptyLinePlaceholder":233},[29,153070,153071,153073,153076],{"class":31,"line":33039},[29,153072,32076],{"class":305},[29,153074,153075],{"class":35}," show_all_students",[29,153077,152090],{"class":309},[29,153079,153080,153082,153084],{"class":31,"line":33058},[29,153081,3276],{"class":305},[29,153083,39059],{"class":305},[29,153085,152271],{"class":309},[29,153087,153088,153090,153092,153095],{"class":31,"line":33064},[29,153089,32580],{"class":39},[29,153091,310],{"class":309},[29,153093,153094],{"class":103},"\"暂无学生\"",[29,153096,316],{"class":309},[29,153098,153099],{"class":31,"line":33075},[29,153100,152490],{"class":305},[29,153102,153103],{"class":31,"line":33081},[29,153104,2575],{"emptyLinePlaceholder":233},[29,153106,153107,153109,153111,153114,153116,153119,153121,153124,153126,153129],{"class":31,"line":33101},[29,153108,31428],{"class":39},[29,153110,310],{"class":309},[29,153112,153113],{"class":103},"\"学号",[29,153115,1408],{"class":39},[29,153117,153118],{"class":103},"姓名",[29,153120,1408],{"class":39},[29,153122,153123],{"class":103},"年龄",[29,153125,1408],{"class":39},[29,153127,153128],{"class":103},"成绩\"",[29,153130,316],{"class":309},[29,153132,153133,153135,153137,153139],{"class":31,"line":33117},[29,153134,3376],{"class":305},[29,153136,152266],{"class":309},[29,153138,26172],{"class":305},[29,153140,152271],{"class":309},[29,153142,153143],{"class":31,"line":33123},[29,153144,153145],{"class":309},"        print_student(student)\n",[29,153147,153148],{"class":31,"line":33137},[29,153149,2575],{"emptyLinePlaceholder":233},[29,153151,153152],{"class":31,"line":33143},[29,153153,2575],{"emptyLinePlaceholder":233},[29,153155,153156,153158,153160],{"class":31,"line":33149},[29,153157,32076],{"class":305},[29,153159,2148],{"class":35},[29,153161,32082],{"class":309},[29,153163,153164,153167,153169],{"class":31,"line":33160},[29,153165,153166],{"class":309},"    students ",[29,153168,355],{"class":305},[29,153170,153171],{"class":309}," load_students()\n",[29,153173,153174],{"class":31,"line":33166},[29,153175,2575],{"emptyLinePlaceholder":233},[29,153177,153178,153180,153182],{"class":31,"line":33172},[29,153179,2426],{"class":305},[29,153181,95421],{"class":39},[29,153183,3914],{"class":309},[29,153185,153186],{"class":31,"line":33182},[29,153187,153188],{"class":309},"        show_menu()\n",[29,153190,153191,153194,153196,153198,153200,153203],{"class":31,"line":33188},[29,153192,153193],{"class":309},"        choice ",[29,153195,355],{"class":305},[29,153197,60734],{"class":39},[29,153199,310],{"class":309},[29,153201,153202],{"class":103},"\"请输入操作:\"",[29,153204,316],{"class":309},[29,153206,153207],{"class":31,"line":33199},[29,153208,2575],{"emptyLinePlaceholder":233},[29,153210,153211,153213,153216,153218,153221],{"class":31,"line":33205},[29,153212,2672],{"class":305},[29,153214,153215],{"class":309}," choice ",[29,153217,3124],{"class":305},[29,153219,153220],{"class":103}," \"1\"",[29,153222,3914],{"class":309},[29,153224,153225],{"class":31,"line":33215},[29,153226,153227],{"class":309},"            add_student(students)\n",[29,153229,153230,153233,153235,153237,153240],{"class":31,"line":33220},[29,153231,153232],{"class":305},"        elif",[29,153234,153215],{"class":309},[29,153236,3124],{"class":305},[29,153238,153239],{"class":103}," \"2\"",[29,153241,3914],{"class":309},[29,153243,153244],{"class":31,"line":33226},[29,153245,153246],{"class":309},"            delete_student(students)\n",[29,153248,153249,153251,153253,153255,153258],{"class":31,"line":33275},[29,153250,153232],{"class":305},[29,153252,153215],{"class":309},[29,153254,3124],{"class":305},[29,153256,153257],{"class":103}," \"3\"",[29,153259,3914],{"class":309},[29,153261,153262],{"class":31,"line":33322},[29,153263,153264],{"class":309},"            update_student(students)\n",[29,153266,153267,153269,153271,153273,153276],{"class":31,"line":33327},[29,153268,153232],{"class":305},[29,153270,153215],{"class":309},[29,153272,3124],{"class":305},[29,153274,153275],{"class":103}," \"4\"",[29,153277,3914],{"class":309},[29,153279,153280],{"class":31,"line":33333},[29,153281,153282],{"class":309},"            query_student(students)\n",[29,153284,153285,153287,153289,153291,153294],{"class":31,"line":33352},[29,153286,153232],{"class":305},[29,153288,153215],{"class":309},[29,153290,3124],{"class":305},[29,153292,153293],{"class":103}," \"5\"",[29,153295,3914],{"class":309},[29,153297,153298],{"class":31,"line":33358},[29,153299,153300],{"class":309},"            show_all_students(students)\n",[29,153302,153303,153305,153307,153309,153312],{"class":31,"line":33378},[29,153304,153232],{"class":305},[29,153306,153215],{"class":309},[29,153308,3124],{"class":305},[29,153310,153311],{"class":103}," \"0\"",[29,153313,3914],{"class":309},[29,153315,153316,153318,153320,153323],{"class":31,"line":33384},[29,153317,34779],{"class":39},[29,153319,310],{"class":309},[29,153321,153322],{"class":103},"\"退出系统\"",[29,153324,316],{"class":309},[29,153326,153327],{"class":31,"line":33390},[29,153328,115227],{"class":305},[29,153330,153331,153333],{"class":31,"line":33400},[29,153332,2709],{"class":305},[29,153334,3914],{"class":309},[29,153336,153337,153339,153341,153344],{"class":31,"line":33405},[29,153338,34779],{"class":39},[29,153340,310],{"class":309},[29,153342,153343],{"class":103},"\"输入错误\"",[29,153345,316],{"class":309},[29,153347,153348],{"class":31,"line":33411},[29,153349,2575],{"emptyLinePlaceholder":233},[29,153351,153352],{"class":31,"line":33427},[29,153353,2575],{"emptyLinePlaceholder":233},[29,153355,153356,153358,153360,153362,153364],{"class":31,"line":33472},[29,153357,1707],{"class":305},[29,153359,31349],{"class":39},[29,153361,101688],{"class":305},[29,153363,101691],{"class":103},[29,153365,3914],{"class":309},[29,153367,153368],{"class":31,"line":33478},[29,153369,101698],{"class":309},[171,153371,153372],{},"这个项目串联了：",[259,153374,153375,153378,153381,153384,153387,153389],{},[178,153376,153377],{},"菜单循环。",[178,153379,153380],{},"函数封装。",[178,153382,153383],{},"列表字典。",[178,153385,153386],{},"JSON 读写。",[178,153388,151856],{},[178,153390,153391,28514],{},[26,153392,153393],{},"if __name__ == \"__main__\"",[14,153395,153397],{"id":153396},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[171,153399,153400],{},"可以进一步拆成两个类：",[259,153402,153403,153408],{},[178,153404,153405,153407],{},[26,153406,149697],{},"：表示单个学生。",[178,153409,153410,153412],{},[26,153411,151723],{},"：负责学生增删改查和文件保存。",[171,153414,153415],{},"示意代码：",[19,153417,153419],{"className":30507,"code":153418,"language":30509,"meta":24,"style":24},"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",[26,153420,153421,153431,153435,153439,153443,153451,153458,153464,153470,153476,153480,153488,153494,153504,153514,153524,153534,153538,153542,153548,153556,153564,153572,153580,153588,153596],{"__ignoreMap":24},[29,153422,153423,153425,153427,153429],{"class":31,"line":32},[29,153424,30866],{"class":305},[29,153426,151281],{"class":309},[29,153428,30521],{"class":305},[29,153430,151286],{"class":309},[29,153432,153433],{"class":31,"line":43},[29,153434,2575],{"emptyLinePlaceholder":233},[29,153436,153437],{"class":31,"line":51},[29,153438,2575],{"emptyLinePlaceholder":233},[29,153440,153441],{"class":31,"line":59},[29,153442,151299],{"class":35},[29,153444,153445,153447,153449],{"class":31,"line":67},[29,153446,14869],{"class":305},[29,153448,8073],{"class":35},[29,153450,3914],{"class":309},[29,153452,153453,153456],{"class":31,"line":75},[29,153454,153455],{"class":309},"    student_id: ",[29,153457,151315],{"class":39},[29,153459,153460,153462],{"class":31,"line":83},[29,153461,151312],{"class":309},[29,153463,151315],{"class":39},[29,153465,153466,153468],{"class":31,"line":158},[29,153467,151320],{"class":309},[29,153469,151323],{"class":39},[29,153471,153472,153474],{"class":31,"line":166},[29,153473,151328],{"class":309},[29,153475,151331],{"class":39},[29,153477,153478],{"class":31,"line":1505},[29,153479,2575],{"emptyLinePlaceholder":233},[29,153481,153482,153484,153486],{"class":31,"line":1788},[29,153483,30930],{"class":305},[29,153485,151479],{"class":35},[29,153487,30936],{"class":309},[29,153489,153490,153492],{"class":31,"line":1793},[29,153491,14927],{"class":305},[29,153493,15747],{"class":309},[29,153495,153496,153498,153500,153502],{"class":31,"line":1799},[29,153497,151492],{"class":103},[29,153499,51566],{"class":309},[29,153501,30952],{"class":39},[29,153503,151499],{"class":309},[29,153505,153506,153508,153510,153512],{"class":31,"line":1804},[29,153507,151504],{"class":103},[29,153509,51566],{"class":309},[29,153511,30952],{"class":39},[29,153513,151511],{"class":309},[29,153515,153516,153518,153520,153522],{"class":31,"line":1818},[29,153517,151516],{"class":103},[29,153519,51566],{"class":309},[29,153521,30952],{"class":39},[29,153523,151523],{"class":309},[29,153525,153526,153528,153530,153532],{"class":31,"line":1823},[29,153527,151528],{"class":103},[29,153529,51566],{"class":309},[29,153531,30952],{"class":39},[29,153533,151535],{"class":309},[29,153535,153536],{"class":31,"line":1829},[29,153537,2704],{"class":309},[29,153539,153540],{"class":31,"line":1850},[29,153541,2575],{"emptyLinePlaceholder":233},[29,153543,153544,153546],{"class":31,"line":1855},[29,153545,151143],{"class":35},[29,153547,151146],{"class":39},[29,153549,153550,153552,153554],{"class":31,"line":1869},[29,153551,30930],{"class":305},[29,153553,151556],{"class":35},[29,153555,151559],{"class":309},[29,153557,153558,153560,153562],{"class":31,"line":1874},[29,153559,14927],{"class":305},[29,153561,151163],{"class":39},[29,153563,151568],{"class":309},[29,153565,153566,153568,153570],{"class":31,"line":1903},[29,153567,151573],{"class":309},[29,153569,151576],{"class":103},[29,153571,87965],{"class":309},[29,153573,153574,153576,153578],{"class":31,"line":1908},[29,153575,151573],{"class":309},[29,153577,62808],{"class":103},[29,153579,87965],{"class":309},[29,153581,153582,153584,153586],{"class":31,"line":1925},[29,153583,151573],{"class":309},[29,153585,69253],{"class":103},[29,153587,87965],{"class":309},[29,153589,153590,153592,153594],{"class":31,"line":1930},[29,153591,151573],{"class":309},[29,153593,151601],{"class":103},[29,153595,87965],{"class":309},[29,153597,153598],{"class":31,"line":1935},[29,153599,38255],{"class":309},[171,153601,153602],{},"管理器示意：",[19,153604,153606],{"className":30507,"code":153605,"language":30509,"meta":24,"style":24},"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",[26,153607,153608,153617,153625,153636,153640,153650,153663,153674,153681,153687,153691,153700,153709,153715,153722],{"__ignoreMap":24},[29,153609,153610,153612,153615],{"class":31,"line":32},[29,153611,14869],{"class":305},[29,153613,153614],{"class":35}," StudentManager",[29,153616,3914],{"class":309},[29,153618,153619,153621,153623],{"class":31,"line":43},[29,153620,30930],{"class":305},[29,153622,30933],{"class":39},[29,153624,30936],{"class":309},[29,153626,153627,153629,153632,153634],{"class":31,"line":51},[29,153628,30974],{"class":39},[29,153630,153631],{"class":309},".students ",[29,153633,355],{"class":305},[29,153635,51967],{"class":309},[29,153637,153638],{"class":31,"line":59},[29,153639,2575],{"emptyLinePlaceholder":233},[29,153641,153642,153644,153647],{"class":31,"line":67},[29,153643,30930],{"class":305},[29,153645,153646],{"class":35}," find_by_id",[29,153648,153649],{"class":309},"(self, student_id):\n",[29,153651,153652,153654,153656,153658,153660],{"class":31,"line":75},[29,153653,3578],{"class":305},[29,153655,152266],{"class":309},[29,153657,26172],{"class":305},[29,153659,39002],{"class":39},[29,153661,153662],{"class":309},".students:\n",[29,153664,153665,153667,153670,153672],{"class":31,"line":83},[29,153666,4817],{"class":305},[29,153668,153669],{"class":309}," student.student_id ",[29,153671,3124],{"class":305},[29,153673,152287],{"class":309},[29,153675,153676,153679],{"class":31,"line":158},[29,153677,153678],{"class":305},"                return",[29,153680,152294],{"class":309},[29,153682,153683,153685],{"class":31,"line":166},[29,153684,14927],{"class":305},[29,153686,152301],{"class":39},[29,153688,153689],{"class":31,"line":1505},[29,153690,2575],{"emptyLinePlaceholder":233},[29,153692,153693,153695,153697],{"class":31,"line":1788},[29,153694,30930],{"class":305},[29,153696,5384],{"class":35},[29,153698,153699],{"class":309},"(self, student):\n",[29,153701,153702,153704,153706],{"class":31,"line":1793},[29,153703,2672],{"class":305},[29,153705,39002],{"class":39},[29,153707,153708],{"class":309},".find_by_id(student.student_id):\n",[29,153710,153711,153713],{"class":31,"line":1799},[29,153712,15907],{"class":305},[29,153714,125936],{"class":39},[29,153716,153717,153719],{"class":31,"line":1804},[29,153718,30974],{"class":39},[29,153720,153721],{"class":309},".students.append(student)\n",[29,153723,153724,153726],{"class":31,"line":1818},[29,153725,14927],{"class":305},[29,153727,153728],{"class":39}," True\n",[171,153730,153731],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153733,153735],{"id":153734},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[275,153737,153739],{"id":153738},"_1251-数据结构","12.5.1 数据结构",[19,153741,153743],{"className":30507,"code":153742,"language":30509,"meta":24,"style":24},"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",[26,153744,153745,153753,153784,153814,153843,153872],{"__ignoreMap":24},[29,153746,153747,153749,153751],{"class":31,"line":32},[29,153748,148594],{"class":309},[29,153750,355],{"class":305},[29,153752,55576],{"class":309},[29,153754,153755,153757,153759,153761,153763,153765,153768,153770,153773,153775,153777,153779,153782],{"class":31,"line":43},[29,153756,148514],{"class":309},[29,153758,148126],{"class":103},[29,153760,51566],{"class":309},[29,153762,148737],{"class":103},[29,153764,12610],{"class":309},[29,153766,153767],{"class":103},"\"category\"",[29,153769,51566],{"class":309},[29,153771,153772],{"class":103},"\"手机\"",[29,153774,12610],{"class":309},[29,153776,84213],{"class":103},[29,153778,51566],{"class":309},[29,153780,153781],{"class":39},"12000",[29,153783,5105],{"class":309},[29,153785,153786,153788,153790,153792,153794,153796,153798,153800,153803,153805,153807,153809,153812],{"class":31,"line":51},[29,153787,148514],{"class":309},[29,153789,148126],{"class":103},[29,153791,51566],{"class":309},[29,153793,148737],{"class":103},[29,153795,12610],{"class":309},[29,153797,153767],{"class":103},[29,153799,51566],{"class":309},[29,153801,153802],{"class":103},"\"电脑\"",[29,153804,12610],{"class":309},[29,153806,84213],{"class":103},[29,153808,51566],{"class":309},[29,153810,153811],{"class":39},"18000",[29,153813,5105],{"class":309},[29,153815,153816,153818,153820,153822,153824,153826,153828,153830,153832,153834,153836,153838,153841],{"class":31,"line":59},[29,153817,148514],{"class":309},[29,153819,148126],{"class":103},[29,153821,51566],{"class":309},[29,153823,148758],{"class":103},[29,153825,12610],{"class":309},[29,153827,153767],{"class":103},[29,153829,51566],{"class":309},[29,153831,153772],{"class":103},[29,153833,12610],{"class":309},[29,153835,84213],{"class":103},[29,153837,51566],{"class":309},[29,153839,153840],{"class":39},"15000",[29,153842,5105],{"class":309},[29,153844,153845,153847,153849,153851,153853,153855,153857,153859,153861,153863,153865,153867,153870],{"class":31,"line":67},[29,153846,148514],{"class":309},[29,153848,148126],{"class":103},[29,153850,51566],{"class":309},[29,153852,148758],{"class":103},[29,153854,12610],{"class":309},[29,153856,153767],{"class":103},[29,153858,51566],{"class":309},[29,153860,153802],{"class":103},[29,153862,12610],{"class":309},[29,153864,84213],{"class":103},[29,153866,51566],{"class":309},[29,153868,153869],{"class":39},"16000",[29,153871,5105],{"class":309},[29,153873,153874],{"class":31,"line":75},[29,153875,33375],{"class":309},[275,153877,153879],{"id":153878},"_1252-按日期统计","12.5.2 按日期统计",[19,153881,153883],{"className":30507,"code":153882,"language":30509,"meta":24,"style":24},"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",[26,153884,153885,153894,153898,153909,153923,153936,153955,153959],{"__ignoreMap":24},[29,153886,153887,153890,153892],{"class":31,"line":32},[29,153888,153889],{"class":309},"daily_total ",[29,153891,355],{"class":305},[29,153893,87997],{"class":309},[29,153895,153896],{"class":31,"line":43},[29,153897,2575],{"emptyLinePlaceholder":233},[29,153899,153900,153902,153904,153906],{"class":31,"line":51},[29,153901,3200],{"class":305},[29,153903,148338],{"class":309},[29,153905,26172],{"class":305},[29,153907,153908],{"class":309}," sales:\n",[29,153910,153911,153914,153916,153919,153921],{"class":31,"line":59},[29,153912,153913],{"class":309},"    date ",[29,153915,355],{"class":305},[29,153917,153918],{"class":309}," item[",[29,153920,148126],{"class":103},[29,153922,33375],{"class":309},[29,153924,153925,153928,153930,153932,153934],{"class":31,"line":67},[29,153926,153927],{"class":309},"    amount ",[29,153929,355],{"class":305},[29,153931,153918],{"class":309},[29,153933,84213],{"class":103},[29,153935,33375],{"class":309},[29,153937,153938,153941,153943,153946,153948,153950,153952],{"class":31,"line":75},[29,153939,153940],{"class":309},"    daily_total[date] ",[29,153942,355],{"class":305},[29,153944,153945],{"class":309}," daily_total.get(date, ",[29,153947,499],{"class":39},[29,153949,13889],{"class":309},[29,153951,789],{"class":305},[29,153953,153954],{"class":309}," amount\n",[29,153956,153957],{"class":31,"line":83},[29,153958,2575],{"emptyLinePlaceholder":233},[29,153960,153961,153963],{"class":31,"line":158},[29,153962,30544],{"class":39},[29,153964,153965],{"class":309},"(daily_total)\n",[275,153967,153969],{"id":153968},"_1253-按类别统计","12.5.3 按类别统计",[19,153971,153973],{"className":30507,"code":153972,"language":30509,"meta":24,"style":24},"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",[26,153974,153975,153984,153988,153998,154011,154023,154041,154045],{"__ignoreMap":24},[29,153976,153977,153980,153982],{"class":31,"line":32},[29,153978,153979],{"class":309},"category_total ",[29,153981,355],{"class":305},[29,153983,87997],{"class":309},[29,153985,153986],{"class":31,"line":43},[29,153987,2575],{"emptyLinePlaceholder":233},[29,153989,153990,153992,153994,153996],{"class":31,"line":51},[29,153991,3200],{"class":305},[29,153993,148338],{"class":309},[29,153995,26172],{"class":305},[29,153997,153908],{"class":309},[29,153999,154000,154003,154005,154007,154009],{"class":31,"line":59},[29,154001,154002],{"class":309},"    category ",[29,154004,355],{"class":305},[29,154006,153918],{"class":309},[29,154008,153767],{"class":103},[29,154010,33375],{"class":309},[29,154012,154013,154015,154017,154019,154021],{"class":31,"line":67},[29,154014,153927],{"class":309},[29,154016,355],{"class":305},[29,154018,153918],{"class":309},[29,154020,84213],{"class":103},[29,154022,33375],{"class":309},[29,154024,154025,154028,154030,154033,154035,154037,154039],{"class":31,"line":75},[29,154026,154027],{"class":309},"    category_total[category] ",[29,154029,355],{"class":305},[29,154031,154032],{"class":309}," category_total.get(category, ",[29,154034,499],{"class":39},[29,154036,13889],{"class":309},[29,154038,789],{"class":305},[29,154040,153954],{"class":309},[29,154042,154043],{"class":31,"line":83},[29,154044,2575],{"emptyLinePlaceholder":233},[29,154046,154047,154049],{"class":31,"line":158},[29,154048,30544],{"class":39},[29,154050,154051],{"class":309},"(category_total)\n",[275,154053,154055],{"id":154054},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[19,154057,154059],{"className":30507,"code":154058,"language":30509,"meta":24,"style":24},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[26,154060,154061,154086],{"__ignoreMap":24},[29,154062,154063,154066,154068,154070,154073,154076,154079,154082,154084],{"class":31,"line":32},[29,154064,154065],{"class":309},"top_date, top_amount ",[29,154067,355],{"class":305},[29,154069,6126],{"class":39},[29,154071,154072],{"class":309},"(daily_total.items(), ",[29,154074,154075],{"class":5391},"key",[29,154077,154078],{"class":305},"=lambda",[29,154080,154081],{"class":309}," item: item[",[29,154083,525],{"class":39},[29,154085,4832],{"class":309},[29,154087,154088,154090],{"class":31,"line":43},[29,154089,30544],{"class":39},[29,154091,154092],{"class":309},"(top_date, top_amount)\n",[14,154094,154096],{"id":154095},"_126-绘制柱状图","12.6 绘制柱状图",[19,154098,154100],{"className":30507,"code":154099,"language":30509,"meta":24,"style":24},"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",[26,154101,154102,154116,154127,154131,154139,154151,154163,154174,154178,154182,154192,154203,154217,154222,154239,154256,154272,154276],{"__ignoreMap":24},[29,154103,154104,154106,154108,154110,154112,154114],{"class":31,"line":32},[29,154105,30866],{"class":305},[29,154107,147508],{"class":309},[29,154109,30521],{"class":305},[29,154111,147513],{"class":309},[29,154113,31512],{"class":305},[29,154115,147518],{"class":309},[29,154117,154118,154120,154122,154124],{"class":31,"line":43},[29,154119,30866],{"class":305},[29,154121,147367],{"class":309},[29,154123,30521],{"class":305},[29,154125,154126],{"class":309}," Bar\n",[29,154128,154129],{"class":31,"line":51},[29,154130,2575],{"emptyLinePlaceholder":233},[29,154132,154133,154135,154137],{"class":31,"line":59},[29,154134,153979],{"class":309},[29,154136,355],{"class":305},[29,154138,15747],{"class":309},[29,154140,154141,154144,154146,154149],{"class":31,"line":67},[29,154142,154143],{"class":103},"    \"手机\"",[29,154145,51566],{"class":309},[29,154147,154148],{"class":39},"27000",[29,154150,31595],{"class":309},[29,154152,154153,154156,154158,154161],{"class":31,"line":75},[29,154154,154155],{"class":103},"    \"电脑\"",[29,154157,51566],{"class":309},[29,154159,154160],{"class":39},"34000",[29,154162,31595],{"class":309},[29,154164,154165,154168,154170,154172],{"class":31,"line":83},[29,154166,154167],{"class":103},"    \"耳机\"",[29,154169,51566],{"class":309},[29,154171,124528],{"class":39},[29,154173,31595],{"class":309},[29,154175,154176],{"class":31,"line":158},[29,154177,1741],{"class":309},[29,154179,154180],{"class":31,"line":166},[29,154181,2575],{"emptyLinePlaceholder":233},[29,154183,154184,154187,154189],{"class":31,"line":1505},[29,154185,154186],{"class":309},"bar ",[29,154188,355],{"class":305},[29,154190,154191],{"class":309}," Bar()\n",[29,154193,154194,154197,154200],{"class":31,"line":1788},[29,154195,154196],{"class":309},"bar.add_xaxis(",[29,154198,154199],{"class":39},"list",[29,154201,154202],{"class":309},"(category_total.keys()))\n",[29,154204,154205,154208,154210,154212,154214],{"class":31,"line":1793},[29,154206,154207],{"class":309},"bar.add_yaxis(",[29,154209,147424],{"class":103},[29,154211,12610],{"class":309},[29,154213,154199],{"class":39},[29,154215,154216],{"class":309},"(category_total.values()))\n",[29,154218,154219],{"class":31,"line":1799},[29,154220,154221],{"class":309},"bar.set_global_opts(\n",[29,154223,154224,154226,154228,154230,154232,154234,154237],{"class":31,"line":1804},[29,154225,147602],{"class":5391},[29,154227,355],{"class":305},[29,154229,147607],{"class":309},[29,154231,51536],{"class":5391},[29,154233,355],{"class":305},[29,154235,154236],{"class":103},"\"品类销售额\"",[29,154238,38176],{"class":309},[29,154240,154241,154243,154245,154247,154249,154251,154254],{"class":31,"line":1818},[29,154242,147621],{"class":5391},[29,154244,355],{"class":305},[29,154246,147626],{"class":309},[29,154248,79939],{"class":5391},[29,154250,355],{"class":305},[29,154252,154253],{"class":103},"\"品类\"",[29,154255,38176],{"class":309},[29,154257,154258,154260,154262,154264,154266,154268,154270],{"class":31,"line":1823},[29,154259,147640],{"class":5391},[29,154261,355],{"class":305},[29,154263,147626],{"class":309},[29,154265,79939],{"class":5391},[29,154267,355],{"class":305},[29,154269,147424],{"class":103},[29,154271,38176],{"class":309},[29,154273,154274],{"class":31,"line":1829},[29,154275,316],{"class":309},[29,154277,154278,154281,154284],{"class":31,"line":1850},[29,154279,154280],{"class":309},"bar.render(",[29,154282,154283],{"class":103},"\"category_sales.html\"",[29,154285,316],{"class":309},[14,154287,154289],{"id":154288},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[171,154291,154292],{},"时间线适合展示不同日期、月份、年份的数据变化。",[19,154294,154296],{"className":30507,"code":154295,"language":30509,"meta":24,"style":24},"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",[26,154297,154298,154312,154323,154327,154335,154359,154382,154407,154411,154415,154425,154429,154440,154449,154459,154473,154504,154509,154513],{"__ignoreMap":24},[29,154299,154300,154302,154304,154306,154308,154310],{"class":31,"line":32},[29,154301,30866],{"class":305},[29,154303,147508],{"class":309},[29,154305,30521],{"class":305},[29,154307,147513],{"class":309},[29,154309,31512],{"class":305},[29,154311,147518],{"class":309},[29,154313,154314,154316,154318,154320],{"class":31,"line":43},[29,154315,30866],{"class":305},[29,154317,147367],{"class":309},[29,154319,30521],{"class":305},[29,154321,154322],{"class":309}," Bar, Timeline\n",[29,154324,154325],{"class":31,"line":51},[29,154326,2575],{"emptyLinePlaceholder":233},[29,154328,154329,154331,154333],{"class":31,"line":59},[29,154330,101787],{"class":309},[29,154332,355],{"class":305},[29,154334,15747],{"class":309},[29,154336,154337,154340,154343,154345,154347,154349,154351,154353,154355,154357],{"class":31,"line":67},[29,154338,154339],{"class":103},"    \"2024-10-01\"",[29,154341,154342],{"class":309},": {",[29,154344,153772],{"class":103},[29,154346,51566],{"class":309},[29,154348,153781],{"class":39},[29,154350,12610],{"class":309},[29,154352,153802],{"class":103},[29,154354,51566],{"class":309},[29,154356,153811],{"class":39},[29,154358,5105],{"class":309},[29,154360,154361,154364,154366,154368,154370,154372,154374,154376,154378,154380],{"class":31,"line":75},[29,154362,154363],{"class":103},"    \"2024-10-02\"",[29,154365,154342],{"class":309},[29,154367,153772],{"class":103},[29,154369,51566],{"class":309},[29,154371,153840],{"class":39},[29,154373,12610],{"class":309},[29,154375,153802],{"class":103},[29,154377,51566],{"class":309},[29,154379,153869],{"class":39},[29,154381,5105],{"class":309},[29,154383,154384,154387,154389,154391,154393,154396,154398,154400,154402,154405],{"class":31,"line":83},[29,154385,154386],{"class":103},"    \"2024-10-03\"",[29,154388,154342],{"class":309},[29,154390,153772],{"class":103},[29,154392,51566],{"class":309},[29,154394,154395],{"class":39},"17000",[29,154397,12610],{"class":309},[29,154399,153802],{"class":103},[29,154401,51566],{"class":309},[29,154403,154404],{"class":39},"19000",[29,154406,5105],{"class":309},[29,154408,154409],{"class":31,"line":158},[29,154410,1741],{"class":309},[29,154412,154413],{"class":31,"line":166},[29,154414,2575],{"emptyLinePlaceholder":233},[29,154416,154417,154420,154422],{"class":31,"line":1505},[29,154418,154419],{"class":309},"timeline ",[29,154421,355],{"class":305},[29,154423,154424],{"class":309}," Timeline()\n",[29,154426,154427],{"class":31,"line":1788},[29,154428,2575],{"emptyLinePlaceholder":233},[29,154430,154431,154433,154436,154438],{"class":31,"line":1793},[29,154432,3200],{"class":305},[29,154434,154435],{"class":309}," date, category_data ",[29,154437,26172],{"class":305},[29,154439,149277],{"class":309},[29,154441,154442,154445,154447],{"class":31,"line":1799},[29,154443,154444],{"class":309},"    bar ",[29,154446,355],{"class":305},[29,154448,154191],{"class":309},[29,154450,154451,154454,154456],{"class":31,"line":1804},[29,154452,154453],{"class":309},"    bar.add_xaxis(",[29,154455,154199],{"class":39},[29,154457,154458],{"class":309},"(category_data.keys()))\n",[29,154460,154461,154464,154466,154468,154470],{"class":31,"line":1818},[29,154462,154463],{"class":309},"    bar.add_yaxis(",[29,154465,147424],{"class":103},[29,154467,12610],{"class":309},[29,154469,154199],{"class":39},[29,154471,154472],{"class":309},"(category_data.values()))\n",[29,154474,154475,154478,154481,154483,154485,154487,154489,154491,154493,154495,154497,154499,154502],{"class":31,"line":1823},[29,154476,154477],{"class":309},"    bar.set_global_opts(",[29,154479,154480],{"class":5391},"title_opts",[29,154482,355],{"class":305},[29,154484,147607],{"class":309},[29,154486,51536],{"class":5391},[29,154488,355],{"class":305},[29,154490,361],{"class":305},[29,154492,559],{"class":103},[29,154494,1204],{"class":39},[29,154496,74055],{"class":309},[29,154498,1254],{"class":39},[29,154500,154501],{"class":103},"销售额\"",[29,154503,30626],{"class":309},[29,154505,154506],{"class":31,"line":1829},[29,154507,154508],{"class":309},"    timeline.add(bar, date)\n",[29,154510,154511],{"class":31,"line":1850},[29,154512,2575],{"emptyLinePlaceholder":233},[29,154514,154515,154518,154521],{"class":31,"line":1855},[29,154516,154517],{"class":309},"timeline.render(",[29,154519,154520],{"class":103},"\"timeline_sales.html\"",[29,154522,316],{"class":309},[14,154524,154526],{"id":154525},"_128-绘制地图","12.8 绘制地图",[171,154528,154529],{},"地图适合展示地区数据。",[19,154531,154533],{"className":30507,"code":154532,"language":30509,"meta":24,"style":24},"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",[26,154534,154535,154549,154560,154564,154572,154585,154597,154610,154623,154627,154631,154641,154656,154661,154678,154697,154701],{"__ignoreMap":24},[29,154536,154537,154539,154541,154543,154545,154547],{"class":31,"line":32},[29,154538,30866],{"class":305},[29,154540,147508],{"class":309},[29,154542,30521],{"class":305},[29,154544,147513],{"class":309},[29,154546,31512],{"class":305},[29,154548,147518],{"class":309},[29,154550,154551,154553,154555,154557],{"class":31,"line":43},[29,154552,30866],{"class":305},[29,154554,147367],{"class":309},[29,154556,30521],{"class":305},[29,154558,154559],{"class":309}," Map\n",[29,154561,154562],{"class":31,"line":51},[29,154563,2575],{"emptyLinePlaceholder":233},[29,154565,154566,154568,154570],{"class":31,"line":59},[29,154567,101787],{"class":309},[29,154569,355],{"class":305},[29,154571,55576],{"class":309},[29,154573,154574,154577,154579,154581,154583],{"class":31,"line":67},[29,154575,154576],{"class":309},"    (",[29,154578,69398],{"class":103},[29,154580,12610],{"class":309},[29,154582,1125],{"class":39},[29,154584,38176],{"class":309},[29,154586,154587,154589,154591,154593,154595],{"class":31,"line":75},[29,154588,154576],{"class":309},[29,154590,69418],{"class":103},[29,154592,12610],{"class":309},[29,154594,147441],{"class":39},[29,154596,38176],{"class":309},[29,154598,154599,154601,154604,154606,154608],{"class":31,"line":83},[29,154600,154576],{"class":309},[29,154602,154603],{"class":103},"\"广东\"",[29,154605,12610],{"class":309},[29,154607,1898],{"class":39},[29,154609,38176],{"class":309},[29,154611,154612,154614,154617,154619,154621],{"class":31,"line":158},[29,154613,154576],{"class":309},[29,154615,154616],{"class":103},"\"浙江\"",[29,154618,12610],{"class":309},[29,154620,147446],{"class":39},[29,154622,38176],{"class":309},[29,154624,154625],{"class":31,"line":166},[29,154626,33375],{"class":309},[29,154628,154629],{"class":31,"line":1505},[29,154630,2575],{"emptyLinePlaceholder":233},[29,154632,154633,154636,154638],{"class":31,"line":1788},[29,154634,154635],{"class":309},"map_chart ",[29,154637,355],{"class":305},[29,154639,154640],{"class":309}," Map()\n",[29,154642,154643,154646,154648,154651,154654],{"class":31,"line":1793},[29,154644,154645],{"class":309},"map_chart.add(",[29,154647,147424],{"class":103},[29,154649,154650],{"class":309},", data, ",[29,154652,154653],{"class":103},"\"china\"",[29,154655,316],{"class":309},[29,154657,154658],{"class":31,"line":1799},[29,154659,154660],{"class":309},"map_chart.set_global_opts(\n",[29,154662,154663,154665,154667,154669,154671,154673,154676],{"class":31,"line":1804},[29,154664,147602],{"class":5391},[29,154666,355],{"class":305},[29,154668,147607],{"class":309},[29,154670,51536],{"class":5391},[29,154672,355],{"class":305},[29,154674,154675],{"class":103},"\"地区销售额\"",[29,154677,38176],{"class":309},[29,154679,154680,154683,154685,154688,154691,154693,154695],{"class":31,"line":1818},[29,154681,154682],{"class":5391},"    visualmap_opts",[29,154684,355],{"class":305},[29,154686,154687],{"class":309},"opts.VisualMapOpts(",[29,154689,154690],{"class":5391},"max_",[29,154692,355],{"class":305},[29,154694,1898],{"class":39},[29,154696,38176],{"class":309},[29,154698,154699],{"class":31,"line":1823},[29,154700,316],{"class":309},[29,154702,154703,154706,154709],{"class":31,"line":1829},[29,154704,154705],{"class":309},"map_chart.render(",[29,154707,154708],{"class":103},"\"map_sales.html\"",[29,154710,316],{"class":309},[171,154712,154713],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154715,154717],{"id":154716},"_129-项目拆分建议","12.9 项目拆分建议",[171,154719,154720],{},"当代码超过一个文件时，可以这样组织：",[19,154722,154725],{"className":154723,"code":154724,"language":5362,"meta":24},[5360],"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",[26,154726,154724],{"__ignoreMap":24},[171,154728,154729],{},"职责：",[259,154731,154732,154738,154744,154750],{},[178,154733,154734,154737],{},[26,154735,154736],{},"main.py","：程序入口。",[178,154739,154740,154743],{},[26,154741,154742],{},"file_utils.py","：读写 JSON。",[178,154745,154746,154749],{},[26,154747,154748],{},"sales_service.py","：统计销售数据。",[178,154751,154752,154755],{},[26,154753,154754],{},"chart_builder.py","：生成图表。",[14,154757,154759],{"id":154758},"_1210-python基础复习清单","12.10 Python基础复习清单",[171,154761,154762],{},"语法基础：",[259,154764,154765,154768,154771,154774],{},[178,154766,154767],{},"会写变量、注释、输入输出。",[178,154769,154770],{},"会使用 int、float、str、bool。",[178,154772,154773],{},"会做类型转换。",[178,154775,154776],{},"会使用 f-string 格式化输出。",[171,154778,154779],{},"流程控制：",[259,154781,154782,154788,154794,154802],{},[178,154783,154784,154785,28514],{},"会写 ",[26,154786,154787],{},"if elif else",[178,154789,154784,154790,101147,154792,28514],{},[26,154791,108792],{},[26,154793,3200],{},[178,154795,154796,154797,101147,154799,28514],{},"理解 ",[26,154798,2228],{},[26,154800,154801],{},"continue",[178,154803,154804],{},"能写嵌套循环。",[171,154806,154807],{},"函数：",[259,154809,154810,154813,154816,154819],{},[178,154811,154812],{},"会定义和调用函数。",[178,154814,154815],{},"理解参数和返回值。",[178,154817,154818],{},"知道局部变量和全局变量。",[178,154820,154821],{},"会使用默认参数、关键字参数、不定长参数。",[171,154823,154824],{},"容器：",[259,154826,154827,154830,154833,154836,154839],{},[178,154828,154829],{},"会使用列表增删改查。",[178,154831,154832],{},"会遍历列表、字典。",[178,154834,154835],{},"会使用切片。",[178,154837,154838],{},"会用集合去重。",[178,154840,154841],{},"会处理列表嵌套字典。",[171,154843,154844],{},"文件和模块：",[259,154846,154847,154850,154853,154856,154859],{},[178,154848,154849],{},"会读写文本文件。",[178,154851,154852],{},"会读写 JSON。",[178,154854,154855],{},"会捕获常见异常。",[178,154857,154858],{},"会导入模块和第三方包。",[178,154860,154861],{},"会创建简单包结构。",[171,154863,154864],{},"项目能力：",[259,154866,154867,154870,154873,154876,154879],{},[178,154868,154869],{},"能把代码拆成函数。",[178,154871,154872],{},"能把数据保存到文件。",[178,154874,154875],{},"能处理用户输入错误。",[178,154877,154878],{},"能写一个完整菜单程序。",[178,154880,154881],{},"能用 pyecharts 生成图表。",[14,154883,154885],{"id":154884},"_1211-推荐练习顺序","12.11 推荐练习顺序",[259,154887,154888,154891,154894,154897,154900,154903,154906,154909],{},[178,154889,154890],{},"猜数字游戏。",[178,154892,154893],{},"ATM 菜单程序。",[178,154895,154896],{},"学生成绩统计。",[178,154898,154899],{},"学生管理系统函数版。",[178,154901,154902],{},"学生管理系统文件持久化版。",[178,154904,154905],{},"学生管理系统面向对象版。",[178,154907,154908],{},"销售数据统计。",[178,154910,154911],{},"销售数据可视化。",[14,154913,154915],{"id":154914},"_1212-常见学习误区","12.12 常见学习误区",[259,154917,154918,154921,154924,154927,154930,154933,154936],{},[178,154919,154920],{},"只看视频不敲代码。",[178,154922,154923],{},"一报错就复制错误去搜，不先读报错位置。",[178,154925,154926],{},"变量名随便写，后续自己看不懂。",[178,154928,154929],{},"所有代码都写在一个文件一个函数里。",[178,154931,154932],{},"不保存练习代码，复习时没有材料。",[178,154934,154935],{},"还没掌握列表字典就急着学框架。",[178,154937,154938],{},"不会读官方文档，只依赖教程。",[14,154940,154942],{"id":154941},"_1213-如何读报错","12.13 如何读报错",[171,154944,154945],{},"报错通常从下往上看最后几行。",[171,154947,15310],{},[19,154949,154952],{"className":154950,"code":154951,"language":5362,"meta":24},[5360],"ValueError: invalid literal for int() with base 10: 'abc'\n",[26,154953,154951],{"__ignoreMap":24},[171,154955,24772],{},[259,154957,154958,154964,154974],{},[178,154959,154960,154961,28514],{},"异常类型是 ",[26,154962,154963],{},"ValueError",[178,154965,107474,154966,154969,154970,154973],{},[26,154967,154968],{},"int()"," 无法把 ",[26,154971,154972],{},"'abc'"," 转成整数。",[178,154975,154976],{},"应该检查输入内容或增加异常处理。",[171,154978,154979],{},"再看文件名和行号：",[19,154981,154984],{"className":154982,"code":154983,"language":5362,"meta":24},[5360],"File \"main.py\", line 10, in \u003Cmodule>\n",[26,154985,154983],{"__ignoreMap":24},[171,154987,154988,154989,154991],{},"表示错误发生在 ",[26,154990,154736],{}," 第 10 行。",[14,154993,154995],{"id":154994},"_1214-后续学习方向","12.14 后续学习方向",[171,154997,154998],{},"Python 基础完成后，可以按兴趣选择方向：",[259,155000,155001,155013,155022,155034,155045,155054,155064],{},[178,155002,155003,155004,520,155007,520,155010,28514],{},"自动化办公：",[26,155005,155006],{},"openpyxl",[26,155008,155009],{},"python-docx",[26,155011,155012],{},"pdfplumber",[178,155014,155015,155016,520,155018,520,155020,28514],{},"数据分析：",[26,155017,100755],{},[26,155019,146314],{},[26,155021,146322],{},[178,155023,155024,155025,520,155028,520,155031,28514],{},"Web 后端：",[26,155026,155027],{},"Flask",[26,155029,155030],{},"FastAPI",[26,155032,155033],{},"Django",[178,155035,155036,155037,520,155039,520,155042,28514],{},"爬虫：",[26,155038,146299],{},[26,155040,155041],{},"BeautifulSoup",[26,155043,155044],{},"Scrapy",[178,155046,155047,155048,520,155050,155053],{},"测试开发：",[26,155049,146346],{},[26,155051,155052],{},"selenium","、接口测试。",[178,155055,155056,155057,520,155059,520,155061,28514],{},"人工智能：",[26,155058,100755],{},[26,155060,146314],{},[26,155062,155063],{},"pytorch",[178,155065,155066,155067,520,155069,520,155072,28514],{},"运维脚本：",[26,155068,145915],{},[26,155070,155071],{},"subprocess",[26,155073,155074],{},"paramiko",[171,155076,155077],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155079,155081],{"id":155080},"_1215-结课练习","12.15 结课练习",[259,155083,155084,155087,155090,155093,155096,155099,155102,155105],{},[178,155085,155086],{},"完成函数版学生管理系统。",[178,155088,155089],{},"给学生管理系统增加 JSON 持久化。",[178,155091,155092],{},"给学生管理系统增加异常处理。",[178,155094,155095],{},"把学生管理系统改成面向对象版。",[178,155097,155098],{},"使用 pyecharts 绘制学生成绩柱状图。",[178,155100,155101],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[178,155103,155104],{},"按品类统计销售额并绘制柱状图。",[178,155106,155107],{},"写一份自己的 Python 学习路线图。",[223,155109,155110],{},"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":24,"searchDepth":43,"depth":43,"links":155112},[155113,155114,155117,155118,155119,155125,155126,155127,155128,155129,155130,155131,155132,155133,155134],{"id":151829,"depth":43,"text":151830},{"id":151879,"depth":43,"text":151880,"children":155115},[155116],{"id":151883,"depth":51,"text":151884},{"id":151922,"depth":43,"text":151923},{"id":153396,"depth":43,"text":153397},{"id":153734,"depth":43,"text":153735,"children":155120},[155121,155122,155123,155124],{"id":153738,"depth":51,"text":153739},{"id":153878,"depth":51,"text":153879},{"id":153968,"depth":51,"text":153969},{"id":154054,"depth":51,"text":154055},{"id":154095,"depth":43,"text":154096},{"id":154288,"depth":43,"text":154289},{"id":154525,"depth":43,"text":154526},{"id":154716,"depth":43,"text":154717},{"id":154758,"depth":43,"text":154759},{"id":154884,"depth":43,"text":154885},{"id":154914,"depth":43,"text":154915},{"id":154941,"depth":43,"text":154942},{"id":154994,"depth":43,"text":154995},{"id":155080,"depth":43,"text":155081},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151821,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155141,"title":155142,"body":155143,"description":230,"extension":231,"meta":157612,"navigation":233,"path":157613,"seo":157614,"stem":157615,"__hash__":157616},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155144,"toc":157587},[155145,155148,155152,155155,155158,155178,155181,155204,155207,155210,155232,155235,155257,155261,155264,155304,155307,155428,155432,155435,155475,155478,155502,155505,155509,155512,155526,155559,155562,155597,155600,155623,155626,155659,155662,155664,155670,155745,155748,155754,155771,155811,155815,155818,155864,155866,155904,155907,155942,155945,155980,155983,156015,156018,156037,156041,156045,156158,156160,156235,156239,156285,156288,156314,156323,156327,156330,156393,156401,156429,156433,156473,156538,156542,156545,156584,156587,156632,156635,156696,156700,156727,156730,156758,156761,156765,156769,156834,156837,156875,156878,156910,156914,157013,157017,157020,157093,157096,157144,157148,157154,157194,157197,157244,157247,157296,157300,157302,157316,157318,157499,157503,157530,157550,157557,157561,157578,157584],[10,155146,155142],{"id":155147},"_2-基础语法变量与字符串",[14,155149,155151],{"id":155150},"_21-注释","2.1 注释",[171,155153,155154],{},"注释是给人看的说明文字，不会被 Python 执行。",[171,155156,155157],{},"单行注释：",[19,155159,155161],{"className":30507,"code":155160,"language":30509,"meta":24,"style":24},"# 这是单行注释\nprint(\"hello\")\n",[26,155162,155163,155168],{"__ignoreMap":24},[29,155164,155165],{"class":31,"line":32},[29,155166,155167],{"class":367},"# 这是单行注释\n",[29,155169,155170,155172,155174,155176],{"class":31,"line":43},[29,155171,30544],{"class":39},[29,155173,310],{"class":309},[29,155175,6019],{"class":103},[29,155177,316],{"class":309},[171,155179,155180],{},"多行说明常用三引号：",[19,155182,155184],{"className":30507,"code":155183,"language":30509,"meta":24,"style":24},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[26,155185,155186,155190,155195,155200],{"__ignoreMap":24},[29,155187,155188],{"class":31,"line":32},[29,155189,95827],{"class":103},[29,155191,155192],{"class":31,"line":43},[29,155193,155194],{"class":103},"这是多行说明。\n",[29,155196,155197],{"class":31,"line":51},[29,155198,155199],{"class":103},"常用于文件顶部说明、函数说明等。\n",[29,155201,155202],{"class":31,"line":59},[29,155203,95827],{"class":103},[171,155205,155206],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[171,155208,155209],{},"不好：",[19,155211,155213],{"className":30507,"code":155212,"language":30509,"meta":24,"style":24},"# age 加 1\nage = age + 1\n",[26,155214,155215,155220],{"__ignoreMap":24},[29,155216,155217],{"class":31,"line":32},[29,155218,155219],{"class":367},"# age 加 1\n",[29,155221,155222,155224,155226,155228,155230],{"class":31,"line":43},[29,155223,146675],{"class":309},[29,155225,355],{"class":305},[29,155227,15882],{"class":309},[29,155229,789],{"class":305},[29,155231,55828],{"class":39},[171,155233,155234],{},"较好：",[19,155236,155238],{"className":30507,"code":155237,"language":30509,"meta":24,"style":24},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[26,155239,155240,155245],{"__ignoreMap":24},[29,155241,155242],{"class":31,"line":32},[29,155243,155244],{"class":367},"# 用户过完生日后，年龄增加一岁\n",[29,155246,155247,155249,155251,155253,155255],{"class":31,"line":43},[29,155248,146675],{"class":309},[29,155250,355],{"class":305},[29,155252,15882],{"class":309},[29,155254,789],{"class":305},[29,155256,55828],{"class":39},[14,155258,155260],{"id":155259},"_22-字面量","2.2 字面量",[171,155262,155263],{},"字面量就是代码中直接写出来的数据。",[19,155265,155267],{"className":30507,"code":155266,"language":30509,"meta":24,"style":24},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[26,155268,155269,155276,155283,155290,155297],{"__ignoreMap":24},[29,155270,155271,155273],{"class":31,"line":32},[29,155272,619],{"class":39},[29,155274,155275],{"class":367},"          # 整数\n",[29,155277,155278,155280],{"class":31,"line":43},[29,155279,358],{"class":39},[29,155281,155282],{"class":367},"         # 小数\n",[29,155284,155285,155287],{"class":31,"line":51},[29,155286,6019],{"class":103},[29,155288,155289],{"class":367},"      # 字符串\n",[29,155291,155292,155294],{"class":31,"line":59},[29,155293,31605],{"class":39},[29,155295,155296],{"class":367},"         # 布尔值\n",[29,155298,155299,155301],{"class":31,"line":67},[29,155300,95815],{"class":39},[29,155302,155303],{"class":367},"         # 空值\n",[171,155305,155306],{},"常见字面量类型：",[445,155308,155309,155319],{},[448,155310,155311],{},[451,155312,155313,155315,155317],{},[454,155314,23912],{},[454,155316,27621],{},[454,155318,25998],{},[492,155320,155321,155332,155343,155354,155366,155378,155390,155403,155415],{},[451,155322,155323,155325,155329],{},[497,155324,313],{},[497,155326,155327],{},[26,155328,619],{},[497,155330,155331],{},"整数",[451,155333,155334,155336,155340],{},[497,155335,349],{},[497,155337,155338],{},[26,155339,358],{},[497,155341,155342],{},"浮点数",[451,155344,155345,155347,155351],{},[497,155346,1477],{},[497,155348,155349],{},[26,155350,6019],{},[497,155352,155353],{},"字符串",[451,155355,155356,155358,155364],{},[497,155357,1530],{},[497,155359,155360,520,155362],{},[26,155361,31605],{},[26,155363,34116],{},[497,155365,66144],{},[451,155367,155368,155371,155375],{},[497,155369,155370],{},"NoneType",[497,155372,155373],{},[26,155374,95815],{},[497,155376,155377],{},"空值",[451,155379,155380,155382,155387],{},[497,155381,154199],{},[497,155383,155384],{},[26,155385,155386],{},"[1, 2, 3]",[497,155388,155389],{},"列表",[451,155391,155392,155395,155400],{},[497,155393,155394],{},"tuple",[497,155396,155397],{},[26,155398,155399],{},"(1, 2, 3)",[497,155401,155402],{},"元组",[451,155404,155405,155407,155412],{},[497,155406,114675],{},[497,155408,155409],{},[26,155410,155411],{},"{\"name\": \"张三\"}",[497,155413,155414],{},"字典",[451,155416,155417,155420,155425],{},[497,155418,155419],{},"set",[497,155421,155422],{},[26,155423,155424],{},"{1, 2, 3}",[497,155426,155427],{},"集合",[14,155429,155431],{"id":155430},"_23-变量","2.3 变量",[171,155433,155434],{},"变量是保存数据的名字。",[19,155436,155438],{"className":30507,"code":155437,"language":30509,"meta":24,"style":24},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[26,155439,155440,155448,155456,155466],{"__ignoreMap":24},[29,155441,155442,155444,155446],{"class":31,"line":32},[29,155443,146665],{"class":309},[29,155445,355],{"class":305},[29,155447,149482],{"class":103},[29,155449,155450,155452,155454],{"class":31,"line":43},[29,155451,146675],{"class":309},[29,155453,355],{"class":305},[29,155455,146680],{"class":39},[29,155457,155458,155461,155463],{"class":31,"line":51},[29,155459,155460],{"class":309},"height ",[29,155462,355],{"class":305},[29,155464,155465],{"class":39}," 1.75\n",[29,155467,155468,155471,155473],{"class":31,"line":59},[29,155469,155470],{"class":309},"is_student ",[29,155472,355],{"class":305},[29,155474,153728],{"class":39},[171,155476,155477],{},"Python 的变量不需要提前声明类型：",[19,155479,155481],{"className":30507,"code":155480,"language":30509,"meta":24,"style":24},"score = 100\nscore = \"满分\"\n",[26,155482,155483,155493],{"__ignoreMap":24},[29,155484,155485,155488,155490],{"class":31,"line":32},[29,155486,155487],{"class":309},"score ",[29,155489,355],{"class":305},[29,155491,155492],{"class":39}," 100\n",[29,155494,155495,155497,155499],{"class":31,"line":43},[29,155496,155487],{"class":309},[29,155498,355],{"class":305},[29,155500,155501],{"class":103}," \"满分\"\n",[171,155503,155504],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155506,155508],{"id":155507},"_24-变量命名规则","2.4 变量命名规则",[171,155510,155511],{},"硬性规则：",[259,155513,155514,155517,155520,155523],{},[178,155515,155516],{},"只能由字母、数字、下划线组成。",[178,155518,155519],{},"不能以数字开头。",[178,155521,155522],{},"不能使用 Python 关键字。",[178,155524,155525],{},"区分大小写。",[19,155527,155529],{"className":30507,"code":155528,"language":30509,"meta":24,"style":24},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[26,155530,155531,155540,155549],{"__ignoreMap":24},[29,155532,155533,155536,155538],{"class":31,"line":32},[29,155534,155535],{"class":309},"user_name ",[29,155537,355],{"class":305},[29,155539,146670],{"class":103},[29,155541,155542,155545,155547],{"class":31,"line":43},[29,155543,155544],{"class":309},"age2 ",[29,155546,355],{"class":305},[29,155548,146680],{"class":39},[29,155550,155551,155554,155556],{"class":31,"line":51},[29,155552,155553],{"class":309},"_token ",[29,155555,355],{"class":305},[29,155557,155558],{"class":103}," \"abc\"\n",[171,155560,155561],{},"错误写法：",[19,155563,155565],{"className":30507,"code":155564,"language":30509,"meta":24,"style":24},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[26,155566,155567,155576,155588],{"__ignoreMap":24},[29,155568,155569,155572,155574],{"class":31,"line":32},[29,155570,155571],{"class":77532},"2age",[29,155573,13739],{"class":305},[29,155575,146680],{"class":39},[29,155577,155578,155580,155582,155584,155586],{"class":31,"line":43},[29,155579,131713],{"class":309},[29,155581,840],{"class":305},[29,155583,146665],{"class":309},[29,155585,355],{"class":305},[29,155587,146670],{"class":103},[29,155589,155590,155592,155594],{"class":31,"line":51},[29,155591,14869],{"class":305},[29,155593,13739],{"class":305},[29,155595,155596],{"class":103}," \"一班\"\n",[171,155598,155599],{},"查看关键字：",[19,155601,155603],{"className":30507,"code":155602,"language":30509,"meta":24,"style":24},"import keyword\n\nprint(keyword.kwlist)\n",[26,155604,155605,155612,155616],{"__ignoreMap":24},[29,155606,155607,155609],{"class":31,"line":32},[29,155608,30521],{"class":305},[29,155610,155611],{"class":309}," keyword\n",[29,155613,155614],{"class":31,"line":43},[29,155615,2575],{"emptyLinePlaceholder":233},[29,155617,155618,155620],{"class":31,"line":51},[29,155619,30544],{"class":39},[29,155621,155622],{"class":309},"(keyword.kwlist)\n",[171,155624,155625],{},"推荐命名风格：",[19,155627,155629],{"className":30507,"code":155628,"language":30509,"meta":24,"style":24},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[26,155630,155631,155640,155650],{"__ignoreMap":24},[29,155632,155633,155636,155638],{"class":31,"line":32},[29,155634,155635],{"class":309},"student_name ",[29,155637,355],{"class":305},[29,155639,149482],{"class":103},[29,155641,155642,155645,155647],{"class":31,"line":43},[29,155643,155644],{"class":309},"total_price ",[29,155646,355],{"class":305},[29,155648,155649],{"class":39}," 99.8\n",[29,155651,155652,155655,155657],{"class":31,"line":51},[29,155653,155654],{"class":309},"is_finished ",[29,155656,355],{"class":305},[29,155658,125936],{"class":39},[171,155660,155661],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155663,50861],{"id":50860},[171,155665,104495,155666,155669],{},[26,155667,155668],{},"type()"," 查看数据类型：",[19,155671,155673],{"className":30507,"code":155672,"language":30509,"meta":24,"style":24},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[26,155674,155675,155689,155703,155717,155731],{"__ignoreMap":24},[29,155676,155677,155679,155681,155683,155685,155687],{"class":31,"line":32},[29,155678,30544],{"class":39},[29,155680,310],{"class":309},[29,155682,103236],{"class":39},[29,155684,310],{"class":309},[29,155686,619],{"class":39},[29,155688,30626],{"class":309},[29,155690,155691,155693,155695,155697,155699,155701],{"class":31,"line":43},[29,155692,30544],{"class":39},[29,155694,310],{"class":309},[29,155696,103236],{"class":39},[29,155698,310],{"class":309},[29,155700,358],{"class":39},[29,155702,30626],{"class":309},[29,155704,155705,155707,155709,155711,155713,155715],{"class":31,"line":51},[29,155706,30544],{"class":39},[29,155708,310],{"class":309},[29,155710,103236],{"class":39},[29,155712,310],{"class":309},[29,155714,6019],{"class":103},[29,155716,30626],{"class":309},[29,155718,155719,155721,155723,155725,155727,155729],{"class":31,"line":59},[29,155720,30544],{"class":39},[29,155722,310],{"class":309},[29,155724,103236],{"class":39},[29,155726,310],{"class":309},[29,155728,31605],{"class":39},[29,155730,30626],{"class":309},[29,155732,155733,155735,155737,155739,155741,155743],{"class":31,"line":67},[29,155734,30544],{"class":39},[29,155736,310],{"class":309},[29,155738,103236],{"class":39},[29,155740,310],{"class":309},[29,155742,95815],{"class":39},[29,155744,30626],{"class":309},[171,155746,155747],{},"输出类似：",[19,155749,155752],{"className":155750,"code":155751,"language":5362,"meta":24},[5360],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[26,155753,155751],{"__ignoreMap":24},[171,155755,9200,155756,107412,155758,155760,155761,155763,155764,21675,155766,155763,155768,155770],{},[26,155757,1530],{},[26,155759,313],{}," 的子类，",[26,155762,31605],{}," 可以当作 ",[26,155765,525],{},[26,155767,34116],{},[26,155769,499],{},"，但业务代码中不要滥用。",[19,155772,155774],{"className":30507,"code":155773,"language":30509,"meta":24,"style":24},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[26,155775,155776,155794],{"__ignoreMap":24},[29,155777,155778,155780,155782,155784,155786,155788,155791],{"class":31,"line":32},[29,155779,30544],{"class":39},[29,155781,310],{"class":309},[29,155783,31605],{"class":39},[29,155785,45695],{"class":305},[29,155787,25247],{"class":39},[29,155789,155790],{"class":309},")   ",[29,155792,155793],{"class":367},"# 2\n",[29,155795,155796,155798,155800,155802,155804,155806,155808],{"class":31,"line":43},[29,155797,30544],{"class":39},[29,155799,310],{"class":309},[29,155801,34116],{"class":39},[29,155803,45695],{"class":305},[29,155805,25247],{"class":39},[29,155807,45937],{"class":309},[29,155809,155810],{"class":367},"# 1\n",[14,155812,155814],{"id":155813},"_26-类型转换","2.6 类型转换",[171,155816,155817],{},"常用转换函数：",[19,155819,155821],{"className":30507,"code":155820,"language":30509,"meta":24,"style":24},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[26,155822,155823,155833,155844,155854],{"__ignoreMap":24},[29,155824,155825,155827,155829,155831],{"class":31,"line":32},[29,155826,313],{"class":39},[29,155828,310],{"class":309},[29,155830,54445],{"class":103},[29,155832,316],{"class":309},[29,155834,155835,155837,155839,155842],{"class":31,"line":43},[29,155836,349],{"class":39},[29,155838,310],{"class":309},[29,155840,155841],{"class":103},"\"3.14\"",[29,155843,316],{"class":309},[29,155845,155846,155848,155850,155852],{"class":31,"line":51},[29,155847,1477],{"class":39},[29,155849,310],{"class":309},[29,155851,619],{"class":39},[29,155853,316],{"class":309},[29,155855,155856,155858,155860,155862],{"class":31,"line":59},[29,155857,1530],{"class":39},[29,155859,310],{"class":309},[29,155861,525],{"class":39},[29,155863,316],{"class":309},[171,155865,15310],{},[19,155867,155869],{"className":30507,"code":155868,"language":30509,"meta":24,"style":24},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[26,155870,155871,155880,155891],{"__ignoreMap":24},[29,155872,155873,155875,155877],{"class":31,"line":32},[29,155874,146675],{"class":309},[29,155876,355],{"class":305},[29,155878,155879],{"class":103}," \"18\"\n",[29,155881,155882,155884,155886,155888],{"class":31,"line":43},[29,155883,146675],{"class":309},[29,155885,355],{"class":305},[29,155887,2557],{"class":39},[29,155889,155890],{"class":309},"(age)\n",[29,155892,155893,155895,155898,155900,155902],{"class":31,"line":51},[29,155894,30544],{"class":39},[29,155896,155897],{"class":309},"(age ",[29,155899,789],{"class":305},[29,155901,25247],{"class":39},[29,155903,316],{"class":309},[171,155905,155906],{},"输入得到的内容永远是字符串：",[19,155908,155910],{"className":30507,"code":155909,"language":30509,"meta":24,"style":24},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[26,155911,155912,155928],{"__ignoreMap":24},[29,155913,155914,155917,155919,155921,155923,155926],{"class":31,"line":32},[29,155915,155916],{"class":309},"num ",[29,155918,355],{"class":305},[29,155920,60734],{"class":39},[29,155922,310],{"class":309},[29,155924,155925],{"class":103},"\"请输入数字:\"",[29,155927,316],{"class":309},[29,155929,155930,155932,155934,155936,155939],{"class":31,"line":43},[29,155931,30544],{"class":39},[29,155933,310],{"class":309},[29,155935,103236],{"class":39},[29,155937,155938],{"class":309},"(num))  ",[29,155940,155941],{"class":367},"# str\n",[171,155943,155944],{},"如果要做数学运算，必须转换：",[19,155946,155948],{"className":30507,"code":155947,"language":30509,"meta":24,"style":24},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[26,155949,155950,155968],{"__ignoreMap":24},[29,155951,155952,155954,155956,155958,155960,155962,155964,155966],{"class":31,"line":32},[29,155953,155916],{"class":309},[29,155955,355],{"class":305},[29,155957,2557],{"class":39},[29,155959,310],{"class":309},[29,155961,53950],{"class":39},[29,155963,310],{"class":309},[29,155965,155925],{"class":103},[29,155967,30626],{"class":309},[29,155969,155970,155972,155974,155976,155978],{"class":31,"line":43},[29,155971,30544],{"class":39},[29,155973,45748],{"class":309},[29,155975,789],{"class":305},[29,155977,2213],{"class":39},[29,155979,316],{"class":309},[171,155981,155982],{},"常见错误：",[19,155984,155986],{"className":30507,"code":155985,"language":30509,"meta":24,"style":24},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[26,155987,155988,156001],{"__ignoreMap":24},[29,155989,155990,155992,155994,155996,155998],{"class":31,"line":32},[29,155991,313],{"class":39},[29,155993,310],{"class":309},[29,155995,155841],{"class":103},[29,155997,155790],{"class":309},[29,155999,156000],{"class":367},"# 错误\n",[29,156002,156003,156005,156007,156010,156013],{"class":31,"line":43},[29,156004,313],{"class":39},[29,156006,310],{"class":309},[29,156008,156009],{"class":103},"\"abc\"",[29,156011,156012],{"class":309},")    ",[29,156014,156000],{"class":367},[171,156016,156017],{},"正确写法：",[19,156019,156021],{"className":30507,"code":156020,"language":30509,"meta":24,"style":24},"num = float(\"3.14\")\n",[26,156022,156023],{"__ignoreMap":24},[29,156024,156025,156027,156029,156031,156033,156035],{"class":31,"line":32},[29,156026,155916],{"class":309},[29,156028,355],{"class":305},[29,156030,109926],{"class":39},[29,156032,310],{"class":309},[29,156034,155841],{"class":103},[29,156036,316],{"class":309},[14,156038,156040],{"id":156039},"_27-运算符","2.7 运算符",[275,156042,156044],{"id":156043},"_271-算术运算符","2.7.1 算术运算符",[445,156046,156047,156058],{},[448,156048,156049],{},[451,156050,156051,156054,156056],{},[454,156052,156053],{},"运算符",[454,156055,25998],{},[454,156057,27621],{},[492,156059,156060,156074,156088,156102,156116,156130,156144],{},[451,156061,156062,156066,156069],{},[497,156063,156064],{},[26,156065,789],{},[497,156067,156068],{},"加法",[497,156070,156071],{},[26,156072,156073],{},"1 + 2",[451,156075,156076,156080,156083],{},[497,156077,156078],{},[26,156079,840],{},[497,156081,156082],{},"减法",[497,156084,156085],{},[26,156086,156087],{},"5 - 3",[451,156089,156090,156094,156097],{},[497,156091,156092],{},[26,156093,763],{},[497,156095,156096],{},"乘法",[497,156098,156099],{},[26,156100,156101],{},"2 * 3",[451,156103,156104,156108,156111],{},[497,156105,156106],{},[26,156107,892],{},[497,156109,156110],{},"除法，结果是浮点数",[497,156112,156113],{},[26,156114,156115],{},"5 \u002F 2",[451,156117,156118,156122,156125],{},[497,156119,156120],{},[26,156121,33458],{},[497,156123,156124],{},"整除",[497,156126,156127],{},[26,156128,156129],{},"5 \u002F\u002F 2",[451,156131,156132,156136,156139],{},[497,156133,156134],{},[26,156135,636],{},[497,156137,156138],{},"取余",[497,156140,156141],{},[26,156142,156143],{},"5 % 2",[451,156145,156146,156150,156153],{},[497,156147,156148],{},[26,156149,10836],{},[497,156151,156152],{},"幂运算",[497,156154,156155],{},[26,156156,156157],{},"2 ** 3",[171,156159,15310],{},[19,156161,156163],{"className":30507,"code":156162,"language":30509,"meta":24,"style":24},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[26,156164,156165,156183,156200,156217],{"__ignoreMap":24},[29,156166,156167,156169,156171,156173,156176,156178,156180],{"class":31,"line":32},[29,156168,30544],{"class":39},[29,156170,310],{"class":309},[29,156172,627],{"class":39},[29,156174,156175],{"class":305}," \u002F",[29,156177,14930],{"class":39},[29,156179,155790],{"class":309},[29,156181,156182],{"class":367},"# 2.5\n",[29,156184,156185,156187,156189,156191,156194,156196,156198],{"class":31,"line":43},[29,156186,30544],{"class":39},[29,156188,310],{"class":309},[29,156190,627],{"class":39},[29,156192,156193],{"class":305}," \u002F\u002F",[29,156195,14930],{"class":39},[29,156197,45937],{"class":309},[29,156199,155793],{"class":367},[29,156201,156202,156204,156206,156208,156211,156213,156215],{"class":31,"line":51},[29,156203,30544],{"class":39},[29,156205,310],{"class":309},[29,156207,627],{"class":39},[29,156209,156210],{"class":305}," %",[29,156212,14930],{"class":39},[29,156214,155790],{"class":309},[29,156216,155810],{"class":367},[29,156218,156219,156221,156223,156225,156228,156230,156232],{"class":31,"line":59},[29,156220,30544],{"class":39},[29,156222,310],{"class":309},[29,156224,386],{"class":39},[29,156226,156227],{"class":305}," **",[29,156229,78199],{"class":39},[29,156231,45937],{"class":309},[29,156233,156234],{"class":367},"# 8\n",[275,156236,156238],{"id":156237},"_272-赋值运算符","2.7.2 赋值运算符",[19,156240,156242],{"className":30507,"code":156241,"language":30509,"meta":24,"style":24},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[26,156243,156244,156252,156260,156268,156276],{"__ignoreMap":24},[29,156245,156246,156248,156250],{"class":31,"line":32},[29,156247,155916],{"class":309},[29,156249,355],{"class":305},[29,156251,58557],{"class":39},[29,156253,156254,156256,156258],{"class":31,"line":43},[29,156255,155916],{"class":309},[29,156257,9652],{"class":305},[29,156259,54556],{"class":39},[29,156261,156262,156264,156266],{"class":31,"line":51},[29,156263,155916],{"class":309},[29,156265,150381],{"class":305},[29,156267,47852],{"class":39},[29,156269,156270,156272,156274],{"class":31,"line":59},[29,156271,155916],{"class":309},[29,156273,137277],{"class":305},[29,156275,120165],{"class":39},[29,156277,156278,156280,156283],{"class":31,"line":67},[29,156279,155916],{"class":309},[29,156281,156282],{"class":305},"\u002F=",[29,156284,47852],{"class":39},[171,156286,156287],{},"等价关系：",[19,156289,156291],{"className":30507,"code":156290,"language":30509,"meta":24,"style":24},"num += 1\nnum = num + 1\n",[26,156292,156293,156301],{"__ignoreMap":24},[29,156294,156295,156297,156299],{"class":31,"line":32},[29,156296,155916],{"class":309},[29,156298,9652],{"class":305},[29,156300,55828],{"class":39},[29,156302,156303,156305,156307,156310,156312],{"class":31,"line":43},[29,156304,155916],{"class":309},[29,156306,355],{"class":305},[29,156308,156309],{"class":309}," num ",[29,156311,789],{"class":305},[29,156313,55828],{"class":39},[171,156315,156316,156317,101147,156320,28514],{},"Python 没有 ",[26,156318,156319],{},"num++",[26,156321,156322],{},"num--",[275,156324,156326],{"id":156325},"_273-比较运算符","2.7.3 比较运算符",[171,156328,156329],{},"比较运算结果是布尔值。",[19,156331,156333],{"className":30507,"code":156332,"language":30509,"meta":24,"style":24},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[26,156334,156335,156349,156364,156378],{"__ignoreMap":24},[29,156336,156337,156339,156341,156343,156345,156347],{"class":31,"line":32},[29,156338,30544],{"class":39},[29,156340,310],{"class":309},[29,156342,754],{"class":39},[29,156344,26351],{"class":305},[29,156346,2323],{"class":39},[29,156348,316],{"class":309},[29,156350,156351,156353,156355,156357,156360,156362],{"class":31,"line":43},[29,156352,30544],{"class":39},[29,156354,310],{"class":309},[29,156356,754],{"class":39},[29,156358,156359],{"class":305}," >=",[29,156361,2213],{"class":39},[29,156363,316],{"class":309},[29,156365,156366,156368,156370,156372,156374,156376],{"class":31,"line":51},[29,156367,30544],{"class":39},[29,156369,310],{"class":309},[29,156371,754],{"class":39},[29,156373,101688],{"class":305},[29,156375,2258],{"class":39},[29,156377,316],{"class":309},[29,156379,156380,156382,156384,156386,156389,156391],{"class":31,"line":59},[29,156381,30544],{"class":39},[29,156383,310],{"class":309},[29,156385,754],{"class":39},[29,156387,156388],{"class":305}," !=",[29,156390,2258],{"class":39},[29,156392,316],{"class":309},[171,156394,156395,156396,156398,156399,28514],{},"注意：判断相等用 ",[26,156397,3124],{},"，赋值用 ",[26,156400,355],{},[19,156402,156404],{"className":30507,"code":156403,"language":30509,"meta":24,"style":24},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[26,156405,156406,156418],{"__ignoreMap":24},[29,156407,156408,156410,156412,156415],{"class":31,"line":32},[29,156409,146675],{"class":309},[29,156411,355],{"class":305},[29,156413,156414],{"class":39}," 18",[29,156416,156417],{"class":367},"       # 赋值\n",[29,156419,156420,156422,156424,156426],{"class":31,"line":43},[29,156421,146675],{"class":309},[29,156423,3124],{"class":305},[29,156425,156414],{"class":39},[29,156427,156428],{"class":367},"      # 判断是否相等\n",[275,156430,156432],{"id":156431},"_274-逻辑运算符","2.7.4 逻辑运算符",[445,156434,156435,156443],{},[448,156436,156437],{},[451,156438,156439,156441],{},[454,156440,156053],{},[454,156442,25998],{},[492,156444,156445,156454,156463],{},[451,156446,156447,156451],{},[497,156448,156449],{},[26,156450,30591],{},[497,156452,156453],{},"并且",[451,156455,156456,156460],{},[497,156457,156458],{},[26,156459,115219],{},[497,156461,156462],{},"或者",[451,156464,156465,156470],{},[497,156466,156467],{},[26,156468,156469],{},"not",[497,156471,156472],{},"取反",[19,156474,156476],{"className":30507,"code":156475,"language":30509,"meta":24,"style":24},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[26,156477,156478,156486,156495,156499,156514,156528],{"__ignoreMap":24},[29,156479,156480,156482,156484],{"class":31,"line":32},[29,156481,146675],{"class":309},[29,156483,355],{"class":305},[29,156485,88194],{"class":39},[29,156487,156488,156491,156493],{"class":31,"line":43},[29,156489,156490],{"class":309},"has_ticket ",[29,156492,355],{"class":305},[29,156494,153728],{"class":39},[29,156496,156497],{"class":31,"line":51},[29,156498,2575],{"emptyLinePlaceholder":233},[29,156500,156501,156503,156505,156507,156509,156511],{"class":31,"line":59},[29,156502,30544],{"class":39},[29,156504,155897],{"class":309},[29,156506,1886],{"class":305},[29,156508,156414],{"class":39},[29,156510,120558],{"class":305},[29,156512,156513],{"class":309}," has_ticket)\n",[29,156515,156516,156518,156520,156522,156524,156526],{"class":31,"line":67},[29,156517,30544],{"class":39},[29,156519,155897],{"class":309},[29,156521,1218],{"class":305},[29,156523,156414],{"class":39},[29,156525,114330],{"class":305},[29,156527,156513],{"class":309},[29,156529,156530,156532,156534,156536],{"class":31,"line":75},[29,156531,30544],{"class":39},[29,156533,310],{"class":309},[29,156535,156469],{"class":305},[29,156537,156513],{"class":309},[14,156539,156541],{"id":156540},"_28-字符串定义","2.8 字符串定义",[171,156543,156544],{},"三种常见写法：",[19,156546,156548],{"className":30507,"code":156547,"language":30509,"meta":24,"style":24},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[26,156549,156550,156560,156569,156579],{"__ignoreMap":24},[29,156551,156552,156555,156557],{"class":31,"line":32},[29,156553,156554],{"class":309},"name1 ",[29,156556,355],{"class":305},[29,156558,156559],{"class":103}," '小明'\n",[29,156561,156562,156565,156567],{"class":31,"line":43},[29,156563,156564],{"class":309},"name2 ",[29,156566,355],{"class":305},[29,156568,149482],{"class":103},[29,156570,156571,156574,156576],{"class":31,"line":51},[29,156572,156573],{"class":309},"text ",[29,156575,355],{"class":305},[29,156577,156578],{"class":103}," \"\"\"这是多行字符串\n",[29,156580,156581],{"class":31,"line":59},[29,156582,156583],{"class":103},"可以换行\"\"\"\n",[171,156585,156586],{},"字符串中包含引号：",[19,156588,156590],{"className":30507,"code":156589,"language":30509,"meta":24,"style":24},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[26,156591,156592,156602,156612],{"__ignoreMap":24},[29,156593,156594,156597,156599],{"class":31,"line":32},[29,156595,156596],{"class":309},"msg ",[29,156598,355],{"class":305},[29,156600,156601],{"class":103}," \"他说:'你好'\"\n",[29,156603,156604,156607,156609],{"class":31,"line":43},[29,156605,156606],{"class":309},"msg2 ",[29,156608,355],{"class":305},[29,156610,156611],{"class":103}," '他说:\"你好\"'\n",[29,156613,156614,156617,156619,156622,156625,156628,156630],{"class":31,"line":51},[29,156615,156616],{"class":309},"msg3 ",[29,156618,355],{"class":305},[29,156620,156621],{"class":103}," \"他说:",[29,156623,156624],{"class":39},"\\\"",[29,156626,156627],{"class":103},"你好",[29,156629,156624],{"class":39},[29,156631,25262],{"class":103},[171,156633,156634],{},"常见转义字符：",[445,156636,156637,156646],{},[448,156638,156639],{},[451,156640,156641,156644],{},[454,156642,156643],{},"写法",[454,156645,100829],{},[492,156647,156648,156658,156667,156677,156686],{},[451,156649,156650,156655],{},[497,156651,156652],{},[26,156653,156654],{},"\\n",[497,156656,156657],{},"换行",[451,156659,156660,156664],{},[497,156661,156662],{},[26,156663,1408],{},[497,156665,156666],{},"制表符",[451,156668,156669,156674],{},[497,156670,156671],{},[26,156672,156673],{},"\\\\",[497,156675,156676],{},"反斜杠",[451,156678,156679,156683],{},[497,156680,156681],{},[26,156682,156624],{},[497,156684,156685],{},"双引号",[451,156687,156688,156693],{},[497,156689,156690],{},[26,156691,156692],{},"\\'",[497,156694,156695],{},"单引号",[14,156697,156699],{"id":156698},"_29-字符串拼接","2.9 字符串拼接",[19,156701,156703],{"className":30507,"code":156702,"language":30509,"meta":24,"style":24},"name = \"小明\"\nprint(\"你好，\" + name)\n",[26,156704,156705,156713],{"__ignoreMap":24},[29,156706,156707,156709,156711],{"class":31,"line":32},[29,156708,146665],{"class":309},[29,156710,355],{"class":305},[29,156712,149482],{"class":103},[29,156714,156715,156717,156719,156722,156724],{"class":31,"line":43},[29,156716,30544],{"class":39},[29,156718,310],{"class":309},[29,156720,156721],{"class":103},"\"你好，\"",[29,156723,45695],{"class":305},[29,156725,156726],{"class":309}," name)\n",[171,156728,156729],{},"字符串只能和字符串拼接：",[19,156731,156733],{"className":30507,"code":156732,"language":30509,"meta":24,"style":24},"age = 18\nprint(\"年龄:\" + str(age))\n",[26,156734,156735,156743],{"__ignoreMap":24},[29,156736,156737,156739,156741],{"class":31,"line":32},[29,156738,146675],{"class":309},[29,156740,355],{"class":305},[29,156742,146680],{"class":39},[29,156744,156745,156747,156749,156751,156753,156755],{"class":31,"line":43},[29,156746,30544],{"class":39},[29,156748,310],{"class":309},[29,156750,146646],{"class":103},[29,156752,45695],{"class":305},[29,156754,74048],{"class":39},[29,156756,156757],{"class":309},"(age))\n",[171,156759,156760],{},"更推荐使用格式化字符串。",[14,156762,156764],{"id":156763},"_210-字符串格式化","2.10 字符串格式化",[275,156766,156768],{"id":156767},"_2101-百分号格式化","2.10.1 百分号格式化",[19,156770,156772],{"className":30507,"code":156771,"language":30509,"meta":24,"style":24},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[26,156773,156774,156782,156790,156799,156803],{"__ignoreMap":24},[29,156775,156776,156778,156780],{"class":31,"line":32},[29,156777,146665],{"class":309},[29,156779,355],{"class":305},[29,156781,149482],{"class":103},[29,156783,156784,156786,156788],{"class":31,"line":43},[29,156785,146675],{"class":309},[29,156787,355],{"class":305},[29,156789,146680],{"class":39},[29,156791,156792,156794,156796],{"class":31,"line":51},[29,156793,155487],{"class":309},[29,156795,355],{"class":305},[29,156797,156798],{"class":39}," 95.5\n",[29,156800,156801],{"class":31,"line":59},[29,156802,2575],{"emptyLinePlaceholder":233},[29,156804,156805,156807,156809,156812,156815,156818,156821,156824,156827,156829,156831],{"class":31,"line":67},[29,156806,30544],{"class":39},[29,156808,310],{"class":309},[29,156810,156811],{"class":103},"\"姓名:",[29,156813,156814],{"class":39},"%s",[29,156816,156817],{"class":103}," 年龄:",[29,156819,156820],{"class":39},"%d",[29,156822,156823],{"class":103}," 分数:",[29,156825,156826],{"class":39},"%.1f",[29,156828,559],{"class":103},[29,156830,156210],{"class":305},[29,156832,156833],{"class":309}," (name, age, score))\n",[171,156835,156836],{},"常用占位符：",[445,156838,156839,156848],{},[448,156840,156841],{},[451,156842,156843,156846],{},[454,156844,156845],{},"占位符",[454,156847,25998],{},[492,156849,156850,156858,156866],{},[451,156851,156852,156856],{},[497,156853,156854],{},[26,156855,156814],{},[497,156857,155353],{},[451,156859,156860,156864],{},[497,156861,156862],{},[26,156863,156820],{},[497,156865,155331],{},[451,156867,156868,156873],{},[497,156869,156870],{},[26,156871,156872],{},"%f",[497,156874,155342],{},[171,156876,156877],{},"精度控制：",[19,156879,156881],{"className":30507,"code":156880,"language":30509,"meta":24,"style":24},"price = 12.3456\nprint(\"%.2f\" % price)\n",[26,156882,156883,156892],{"__ignoreMap":24},[29,156884,156885,156887,156889],{"class":31,"line":32},[29,156886,146810],{"class":309},[29,156888,355],{"class":305},[29,156890,156891],{"class":39}," 12.3456\n",[29,156893,156894,156896,156898,156900,156903,156905,156907],{"class":31,"line":43},[29,156895,30544],{"class":39},[29,156897,310],{"class":309},[29,156899,559],{"class":103},[29,156901,156902],{"class":39},"%.2f",[29,156904,559],{"class":103},[29,156906,156210],{"class":305},[29,156908,156909],{"class":309}," price)\n",[275,156911,156913],{"id":156912},"_2102-format方法","2.10.2 format方法",[19,156915,156917],{"className":30507,"code":156916,"language":30509,"meta":24,"style":24},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[26,156918,156919,156927,156935,156939,156958,156978],{"__ignoreMap":24},[29,156920,156921,156923,156925],{"class":31,"line":32},[29,156922,146665],{"class":309},[29,156924,355],{"class":305},[29,156926,149482],{"class":103},[29,156928,156929,156931,156933],{"class":31,"line":43},[29,156930,146675],{"class":309},[29,156932,355],{"class":305},[29,156934,146680],{"class":39},[29,156936,156937],{"class":31,"line":51},[29,156938,2575],{"emptyLinePlaceholder":233},[29,156940,156941,156943,156945,156947,156949,156951,156953,156955],{"class":31,"line":59},[29,156942,30544],{"class":39},[29,156944,310],{"class":309},[29,156946,156811],{"class":103},[29,156948,32588],{"class":39},[29,156950,156817],{"class":103},[29,156952,32588],{"class":39},[29,156954,559],{"class":103},[29,156956,156957],{"class":309},".format(name, age))\n",[29,156959,156960,156962,156964,156966,156969,156971,156974,156976],{"class":31,"line":67},[29,156961,30544],{"class":39},[29,156963,310],{"class":309},[29,156965,156811],{"class":103},[29,156967,156968],{"class":39},"{0}",[29,156970,156817],{"class":103},[29,156972,156973],{"class":39},"{1}",[29,156975,559],{"class":103},[29,156977,156957],{"class":309},[29,156979,156980,156982,156984,156986,156989,156991,156994,156996,156999,157001,157003,157006,157008,157010],{"class":31,"line":75},[29,156981,30544],{"class":39},[29,156983,310],{"class":309},[29,156985,156811],{"class":103},[29,156987,156988],{"class":39},"{name}",[29,156990,156817],{"class":103},[29,156992,156993],{"class":39},"{age}",[29,156995,559],{"class":103},[29,156997,156998],{"class":309},".format(",[29,157000,79939],{"class":5391},[29,157002,355],{"class":305},[29,157004,157005],{"class":309},"name, ",[29,157007,70350],{"class":5391},[29,157009,355],{"class":305},[29,157011,157012],{"class":309},"age))\n",[275,157014,157016],{"id":157015},"_2103-f-string","2.10.3 f-string",[171,157018,157019],{},"推荐写法：",[19,157021,157023],{"className":30507,"code":157022,"language":30509,"meta":24,"style":24},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[26,157024,157025,157033,157041,157049,157053],{"__ignoreMap":24},[29,157026,157027,157029,157031],{"class":31,"line":32},[29,157028,146665],{"class":309},[29,157030,355],{"class":305},[29,157032,149482],{"class":103},[29,157034,157035,157037,157039],{"class":31,"line":43},[29,157036,146675],{"class":309},[29,157038,355],{"class":305},[29,157040,146680],{"class":39},[29,157042,157043,157045,157047],{"class":31,"line":51},[29,157044,155487],{"class":309},[29,157046,355],{"class":305},[29,157048,156798],{"class":39},[29,157050,157051],{"class":31,"line":59},[29,157052,2575],{"emptyLinePlaceholder":233},[29,157054,157055,157057,157059,157061,157063,157065,157067,157069,157071,157073,157075,157077,157079,157081,157084,157087,157089,157091],{"class":31,"line":67},[29,157056,30544],{"class":39},[29,157058,310],{"class":309},[29,157060,361],{"class":305},[29,157062,156811],{"class":103},[29,157064,1204],{"class":39},[29,157066,79939],{"class":309},[29,157068,1254],{"class":39},[29,157070,156817],{"class":103},[29,157072,1204],{"class":39},[29,157074,70350],{"class":309},[29,157076,1254],{"class":39},[29,157078,156823],{"class":103},[29,157080,1204],{"class":39},[29,157082,157083],{"class":309},"score",[29,157085,157086],{"class":305},":.1f",[29,157088,1254],{"class":39},[29,157090,559],{"class":103},[29,157092,316],{"class":309},[171,157094,157095],{},"表达式也可以放进去：",[19,157097,157099],{"className":30507,"code":157098,"language":30509,"meta":24,"style":24},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[26,157100,157101,157109,157117],{"__ignoreMap":24},[29,157102,157103,157105,157107],{"class":31,"line":32},[29,157104,146810],{"class":309},[29,157106,355],{"class":305},[29,157108,146815],{"class":39},[29,157110,157111,157113,157115],{"class":31,"line":43},[29,157112,146820],{"class":309},[29,157114,355],{"class":305},[29,157116,54556],{"class":39},[29,157118,157119,157121,157123,157125,157128,157130,157132,157134,157137,157139,157142],{"class":31,"line":51},[29,157120,30544],{"class":39},[29,157122,310],{"class":309},[29,157124,361],{"class":305},[29,157126,157127],{"class":103},"\"总价:",[29,157129,1204],{"class":39},[29,157131,146810],{"class":309},[29,157133,763],{"class":305},[29,157135,157136],{"class":309}," count",[29,157138,1254],{"class":39},[29,157140,157141],{"class":103},"元\"",[29,157143,316],{"class":309},[14,157145,157147],{"id":157146},"_211-input输入","2.11 input输入",[171,157149,157150,157153],{},[26,157151,157152],{},"input()"," 会暂停程序，等待用户输入。",[19,157155,157157],{"className":30507,"code":157156,"language":30509,"meta":24,"style":24},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[26,157158,157159,157173],{"__ignoreMap":24},[29,157160,157161,157163,157165,157167,157169,157171],{"class":31,"line":32},[29,157162,146665],{"class":309},[29,157164,355],{"class":305},[29,157166,60734],{"class":39},[29,157168,310],{"class":309},[29,157170,152508],{"class":103},[29,157172,316],{"class":309},[29,157174,157175,157177,157179,157181,157184,157186,157188,157190,157192],{"class":31,"line":43},[29,157176,30544],{"class":39},[29,157178,310],{"class":309},[29,157180,361],{"class":305},[29,157182,157183],{"class":103},"\"你好，",[29,157185,1204],{"class":39},[29,157187,79939],{"class":309},[29,157189,1254],{"class":39},[29,157191,559],{"class":103},[29,157193,316],{"class":309},[171,157195,157196],{},"输入整数：",[19,157198,157200],{"className":30507,"code":157199,"language":30509,"meta":24,"style":24},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[26,157201,157202,157220],{"__ignoreMap":24},[29,157203,157204,157206,157208,157210,157212,157214,157216,157218],{"class":31,"line":32},[29,157205,146675],{"class":309},[29,157207,355],{"class":305},[29,157209,2557],{"class":39},[29,157211,310],{"class":309},[29,157213,53950],{"class":39},[29,157215,310],{"class":309},[29,157217,152523],{"class":103},[29,157219,30626],{"class":309},[29,157221,157222,157224,157226,157228,157231,157233,157235,157237,157240,157242],{"class":31,"line":43},[29,157223,30544],{"class":39},[29,157225,310],{"class":309},[29,157227,361],{"class":305},[29,157229,157230],{"class":103},"\"明年你",[29,157232,1204],{"class":39},[29,157234,146675],{"class":309},[29,157236,789],{"class":305},[29,157238,157239],{"class":39}," 1}",[29,157241,149533],{"class":103},[29,157243,316],{"class":309},[171,157245,157246],{},"输入小数：",[19,157248,157250],{"className":30507,"code":157249,"language":30509,"meta":24,"style":24},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[26,157251,157252,157271],{"__ignoreMap":24},[29,157253,157254,157256,157258,157260,157262,157264,157266,157269],{"class":31,"line":32},[29,157255,155460],{"class":309},[29,157257,355],{"class":305},[29,157259,109926],{"class":39},[29,157261,310],{"class":309},[29,157263,53950],{"class":39},[29,157265,310],{"class":309},[29,157267,157268],{"class":103},"\"请输入身高:\"",[29,157270,30626],{"class":309},[29,157272,157273,157275,157277,157279,157282,157284,157286,157289,157291,157294],{"class":31,"line":43},[29,157274,30544],{"class":39},[29,157276,310],{"class":309},[29,157278,361],{"class":305},[29,157280,157281],{"class":103},"\"身高:",[29,157283,1204],{"class":39},[29,157285,208],{"class":309},[29,157287,157288],{"class":305},":.2f",[29,157290,1254],{"class":39},[29,157292,157293],{"class":103},"米\"",[29,157295,316],{"class":309},[14,157297,157299],{"id":157298},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[171,157301,123421],{},[259,157303,157304,157307,157310,157313],{},[178,157305,157306],{},"输入商品单价。",[178,157308,157309],{},"输入购买数量。",[178,157311,157312],{},"输入折扣，例如 0.8 表示八折。",[178,157314,157315],{},"输出最终金额，保留两位小数。",[171,157317,10210],{},[19,157319,157321],{"className":30507,"code":157320,"language":30509,"meta":24,"style":24},"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",[26,157322,157323,157342,157361,157381,157385,157405,157409,157432,157453,157475],{"__ignoreMap":24},[29,157324,157325,157327,157329,157331,157333,157335,157337,157340],{"class":31,"line":32},[29,157326,146810],{"class":309},[29,157328,355],{"class":305},[29,157330,109926],{"class":39},[29,157332,310],{"class":309},[29,157334,53950],{"class":39},[29,157336,310],{"class":309},[29,157338,157339],{"class":103},"\"请输入商品单价:\"",[29,157341,30626],{"class":309},[29,157343,157344,157346,157348,157350,157352,157354,157356,157359],{"class":31,"line":43},[29,157345,146820],{"class":309},[29,157347,355],{"class":305},[29,157349,2557],{"class":39},[29,157351,310],{"class":309},[29,157353,53950],{"class":39},[29,157355,310],{"class":309},[29,157357,157358],{"class":103},"\"请输入购买数量:\"",[29,157360,30626],{"class":309},[29,157362,157363,157366,157368,157370,157372,157374,157376,157379],{"class":31,"line":51},[29,157364,157365],{"class":309},"discount ",[29,157367,355],{"class":305},[29,157369,109926],{"class":39},[29,157371,310],{"class":309},[29,157373,53950],{"class":39},[29,157375,310],{"class":309},[29,157377,157378],{"class":103},"\"请输入折扣:\"",[29,157380,30626],{"class":309},[29,157382,157383],{"class":31,"line":59},[29,157384,2575],{"emptyLinePlaceholder":233},[29,157386,157387,157390,157392,157395,157397,157400,157402],{"class":31,"line":67},[29,157388,157389],{"class":309},"total ",[29,157391,355],{"class":305},[29,157393,157394],{"class":309}," price ",[29,157396,763],{"class":305},[29,157398,157399],{"class":309}," count ",[29,157401,763],{"class":305},[29,157403,157404],{"class":309}," discount\n",[29,157406,157407],{"class":31,"line":75},[29,157408,2575],{"emptyLinePlaceholder":233},[29,157410,157411,157413,157415,157417,157420,157422,157424,157426,157428,157430],{"class":31,"line":83},[29,157412,30544],{"class":39},[29,157414,310],{"class":309},[29,157416,361],{"class":305},[29,157418,157419],{"class":103},"\"商品单价:",[29,157421,1204],{"class":39},[29,157423,79944],{"class":309},[29,157425,157288],{"class":305},[29,157427,1254],{"class":39},[29,157429,559],{"class":103},[29,157431,316],{"class":309},[29,157433,157434,157436,157438,157440,157443,157445,157447,157449,157451],{"class":31,"line":158},[29,157435,30544],{"class":39},[29,157437,310],{"class":309},[29,157439,361],{"class":305},[29,157441,157442],{"class":103},"\"购买数量:",[29,157444,1204],{"class":39},[29,157446,84563],{"class":309},[29,157448,1254],{"class":39},[29,157450,559],{"class":103},[29,157452,316],{"class":309},[29,157454,157455,157457,157459,157461,157464,157466,157469,157471,157473],{"class":31,"line":166},[29,157456,30544],{"class":39},[29,157458,310],{"class":309},[29,157460,361],{"class":305},[29,157462,157463],{"class":103},"\"折扣:",[29,157465,1204],{"class":39},[29,157467,157468],{"class":309},"discount",[29,157470,1254],{"class":39},[29,157472,559],{"class":103},[29,157474,316],{"class":309},[29,157476,157477,157479,157481,157483,157486,157488,157491,157493,157495,157497],{"class":31,"line":1505},[29,157478,30544],{"class":39},[29,157480,310],{"class":309},[29,157482,361],{"class":305},[29,157484,157485],{"class":103},"\"应付金额:",[29,157487,1204],{"class":39},[29,157489,157490],{"class":309},"total",[29,157492,157288],{"class":305},[29,157494,1254],{"class":39},[29,157496,157141],{"class":103},[29,157498,316],{"class":309},[14,157500,157502],{"id":157501},"_213-易错点","2.13 易错点",[259,157504,157505,157510,157516,157524,157527],{},[178,157506,157507,157509],{},[26,157508,157152],{}," 的结果是字符串，做运算前要转换。",[178,157511,157512,157513,28514],{},"字符串拼接时，数字要先 ",[26,157514,157515],{},"str()",[178,157517,157518,157520,157521,157523],{},[26,157519,355],{}," 是赋值，",[26,157522,3124],{}," 是比较。",[178,157525,157526],{},"Python 没有自增自减运算符。",[178,157528,157529],{},"浮点数计算可能有精度误差：",[19,157531,157533],{"className":30507,"code":157532,"language":30509,"meta":24,"style":24},"print(0.1 + 0.2)\n",[26,157534,157535],{"__ignoreMap":24},[29,157536,157537,157539,157541,157543,157545,157548],{"class":31,"line":32},[29,157538,30544],{"class":39},[29,157540,310],{"class":309},[29,157542,86339],{"class":39},[29,157544,45695],{"class":305},[29,157546,157547],{"class":39}," 0.2",[29,157549,316],{"class":309},[171,157551,157552,157553,157556],{},"金额计算如果要求严格，可以后续学习 ",[26,157554,157555],{},"decimal"," 模块。",[14,157558,157560],{"id":157559},"_214-本章练习","2.14 本章练习",[259,157562,157563,157566,157569,157572,157575],{},[178,157564,157565],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[178,157567,157568],{},"输入圆的半径，计算面积，保留两位小数。",[178,157570,157571],{},"输入工资和奖金，计算总收入。",[178,157573,157574],{},"输入摄氏温度，转换为华氏温度。",[178,157576,157577],{},"写一个 BMI 计算程序：",[19,157579,157582],{"className":157580,"code":157581,"language":5362,"meta":24},[5360],"BMI = 体重kg \u002F 身高m ** 2\n",[26,157583,157581],{"__ignoreMap":24},[223,157585,157586],{},"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":24,"searchDepth":43,"depth":43,"links":157588},[157589,157590,157591,157592,157593,157594,157595,157601,157602,157603,157608,157609,157610,157611],{"id":155150,"depth":43,"text":155151},{"id":155259,"depth":43,"text":155260},{"id":155430,"depth":43,"text":155431},{"id":155507,"depth":43,"text":155508},{"id":50860,"depth":43,"text":50861},{"id":155813,"depth":43,"text":155814},{"id":156039,"depth":43,"text":156040,"children":157596},[157597,157598,157599,157600],{"id":156043,"depth":51,"text":156044},{"id":156237,"depth":51,"text":156238},{"id":156325,"depth":51,"text":156326},{"id":156431,"depth":51,"text":156432},{"id":156540,"depth":43,"text":156541},{"id":156698,"depth":43,"text":156699},{"id":156763,"depth":43,"text":156764,"children":157604},[157605,157606,157607],{"id":156767,"depth":51,"text":156768},{"id":156912,"depth":51,"text":156913},{"id":157015,"depth":51,"text":157016},{"id":157146,"depth":43,"text":157147},{"id":157298,"depth":43,"text":157299},{"id":157501,"depth":43,"text":157502},{"id":157559,"depth":43,"text":157560},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155142,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157618,"title":157619,"body":157620,"description":230,"extension":231,"meta":159256,"navigation":233,"path":159257,"seo":159258,"stem":159259,"__hash__":159260},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157621,"toc":159237},[157622,157625,157629,157632,157647,157650,157678,157682,157732,157734,157750,157753,157779,157782,157786,157853,157856,157872,157876,157879,157997,158000,158007,158056,158062,158066,158069,158182,158185,158189,158193,158196,158246,158250,158253,158303,158307,158310,158348,158352,158355,158401,158404,158439,158443,158448,158451,158497,158499,158566,158570,158576,158687,158696,158700,158702,158713,158715,158881,158885,158887,158901,158903,159117,159121,159140,159157,159160,159206,159210,159234],[10,157623,157619],{"id":157624},"_3-判断语句",[14,157626,157628],{"id":157627},"_31-布尔值","3.1 布尔值",[171,157630,157631],{},"判断语句依赖布尔值：",[19,157633,157635],{"className":30507,"code":157634,"language":30509,"meta":24,"style":24},"True\nFalse\n",[26,157636,157637,157642],{"__ignoreMap":24},[29,157638,157639],{"class":31,"line":32},[29,157640,157641],{"class":39},"True\n",[29,157643,157644],{"class":31,"line":43},[29,157645,157646],{"class":39},"False\n",[171,157648,157649],{},"比较表达式会产生布尔值：",[19,157651,157653],{"className":30507,"code":157652,"language":30509,"meta":24,"style":24},"age = 18\nprint(age >= 18)  # True\n",[26,157654,157655,157663],{"__ignoreMap":24},[29,157656,157657,157659,157661],{"class":31,"line":32},[29,157658,146675],{"class":309},[29,157660,355],{"class":305},[29,157662,146680],{"class":39},[29,157664,157665,157667,157669,157671,157673,157675],{"class":31,"line":43},[29,157666,30544],{"class":39},[29,157668,155897],{"class":309},[29,157670,1886],{"class":305},[29,157672,156414],{"class":39},[29,157674,45937],{"class":309},[29,157676,157677],{"class":367},"# True\n",[14,157679,157681],{"id":157680},"_32-if基础语法","3.2 if基础语法",[19,157683,157685],{"className":30507,"code":157684,"language":30509,"meta":24,"style":24},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[26,157686,157687,157705,157709,157721],{"__ignoreMap":24},[29,157688,157689,157691,157693,157695,157697,157699,157701,157703],{"class":31,"line":32},[29,157690,146675],{"class":309},[29,157692,355],{"class":305},[29,157694,2557],{"class":39},[29,157696,310],{"class":309},[29,157698,53950],{"class":39},[29,157700,310],{"class":309},[29,157702,152523],{"class":103},[29,157704,30626],{"class":309},[29,157706,157707],{"class":31,"line":43},[29,157708,2575],{"emptyLinePlaceholder":233},[29,157710,157711,157713,157715,157717,157719],{"class":31,"line":51},[29,157712,1707],{"class":305},[29,157714,15882],{"class":309},[29,157716,1886],{"class":305},[29,157718,156414],{"class":39},[29,157720,3914],{"class":309},[29,157722,157723,157725,157727,157730],{"class":31,"line":59},[29,157724,31428],{"class":39},[29,157726,310],{"class":309},[29,157728,157729],{"class":103},"\"可以进入网吧\"",[29,157731,316],{"class":309},[171,157733,9200],{},[259,157735,157736,157741,157744,157747],{},[178,157737,157738,157740],{},[26,157739,1707],{}," 后面是条件表达式。",[178,157742,157743],{},"条件后面必须写冒号。",[178,157745,157746],{},"条件成立时执行缩进代码块。",[178,157748,157749],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[171,157751,157752],{},"错误示例：",[19,157754,157756],{"className":30507,"code":157755,"language":30509,"meta":24,"style":24},"if age >= 18\n    print(\"可以进入\")\n",[26,157757,157758,157768],{"__ignoreMap":24},[29,157759,157760,157762,157764,157766],{"class":31,"line":32},[29,157761,1707],{"class":305},[29,157763,15882],{"class":309},[29,157765,1886],{"class":305},[29,157767,146680],{"class":39},[29,157769,157770,157772,157774,157777],{"class":31,"line":43},[29,157771,31428],{"class":39},[29,157773,310],{"class":309},[29,157775,157776],{"class":103},"\"可以进入\"",[29,157778,316],{"class":309},[171,157780,157781],{},"缺少冒号。",[14,157783,157785],{"id":157784},"_33-if-else","3.3 if else",[19,157787,157789],{"className":30507,"code":157788,"language":30509,"meta":24,"style":24},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[26,157790,157791,157809,157813,157825,157836,157842],{"__ignoreMap":24},[29,157792,157793,157795,157797,157799,157801,157803,157805,157807],{"class":31,"line":32},[29,157794,146675],{"class":309},[29,157796,355],{"class":305},[29,157798,2557],{"class":39},[29,157800,310],{"class":309},[29,157802,53950],{"class":39},[29,157804,310],{"class":309},[29,157806,152523],{"class":103},[29,157808,30626],{"class":309},[29,157810,157811],{"class":31,"line":43},[29,157812,2575],{"emptyLinePlaceholder":233},[29,157814,157815,157817,157819,157821,157823],{"class":31,"line":51},[29,157816,1707],{"class":305},[29,157818,15882],{"class":309},[29,157820,1886],{"class":305},[29,157822,156414],{"class":39},[29,157824,3914],{"class":309},[29,157826,157827,157829,157831,157834],{"class":31,"line":59},[29,157828,31428],{"class":39},[29,157830,310],{"class":309},[29,157832,157833],{"class":103},"\"成年人\"",[29,157835,316],{"class":309},[29,157837,157838,157840],{"class":31,"line":67},[29,157839,1877],{"class":305},[29,157841,3914],{"class":309},[29,157843,157844,157846,157848,157851],{"class":31,"line":75},[29,157845,31428],{"class":39},[29,157847,310],{"class":309},[29,157849,157850],{"class":103},"\"未成年人\"",[29,157852,316],{"class":309},[171,157854,157855],{},"执行逻辑：",[259,157857,157858,157864,157869],{},[178,157859,157860,157861,157863],{},"条件成立，执行 ",[26,157862,1707],{}," 代码块。",[178,157865,157866,157867,157863],{},"条件不成立，执行 ",[26,157868,1877],{},[178,157870,157871],{},"两个代码块只会执行其中一个。",[14,157873,157875],{"id":157874},"_34-if-elif-else","3.4 if elif else",[171,157877,157878],{},"多条件判断：",[19,157880,157882],{"className":30507,"code":157881,"language":30509,"meta":24,"style":24},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[26,157883,157884,157902,157906,157920,157931,157945,157956,157969,157980,157986],{"__ignoreMap":24},[29,157885,157886,157888,157890,157892,157894,157896,157898,157900],{"class":31,"line":32},[29,157887,155487],{"class":309},[29,157889,355],{"class":305},[29,157891,2557],{"class":39},[29,157893,310],{"class":309},[29,157895,53950],{"class":39},[29,157897,310],{"class":309},[29,157899,152538],{"class":103},[29,157901,30626],{"class":309},[29,157903,157904],{"class":31,"line":43},[29,157905,2575],{"emptyLinePlaceholder":233},[29,157907,157908,157910,157913,157915,157918],{"class":31,"line":51},[29,157909,1707],{"class":305},[29,157911,157912],{"class":309}," score ",[29,157914,1886],{"class":305},[29,157916,157917],{"class":39}," 90",[29,157919,3914],{"class":309},[29,157921,157922,157924,157926,157929],{"class":31,"line":59},[29,157923,31428],{"class":39},[29,157925,310],{"class":309},[29,157927,157928],{"class":103},"\"优秀\"",[29,157930,316],{"class":309},[29,157932,157933,157936,157938,157940,157943],{"class":31,"line":67},[29,157934,157935],{"class":305},"elif",[29,157937,157912],{"class":309},[29,157939,1886],{"class":305},[29,157941,157942],{"class":39}," 80",[29,157944,3914],{"class":309},[29,157946,157947,157949,157951,157954],{"class":31,"line":75},[29,157948,31428],{"class":39},[29,157950,310],{"class":309},[29,157952,157953],{"class":103},"\"良好\"",[29,157955,316],{"class":309},[29,157957,157958,157960,157962,157964,157967],{"class":31,"line":83},[29,157959,157935],{"class":305},[29,157961,157912],{"class":309},[29,157963,1886],{"class":305},[29,157965,157966],{"class":39}," 60",[29,157968,3914],{"class":309},[29,157970,157971,157973,157975,157978],{"class":31,"line":158},[29,157972,31428],{"class":39},[29,157974,310],{"class":309},[29,157976,157977],{"class":103},"\"及格\"",[29,157979,316],{"class":309},[29,157981,157982,157984],{"class":31,"line":166},[29,157983,1877],{"class":305},[29,157985,3914],{"class":309},[29,157987,157988,157990,157992,157995],{"class":31,"line":1505},[29,157989,31428],{"class":39},[29,157991,310],{"class":309},[29,157993,157994],{"class":103},"\"不及格\"",[29,157996,316],{"class":309},[171,157998,157999],{},"注意判断顺序很重要。",[171,158001,158002,158003,158006],{},"如果把 ",[26,158004,158005],{},"score >= 60"," 放在最前面：",[19,158008,158010],{"className":30507,"code":158009,"language":30509,"meta":24,"style":24},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[26,158011,158012,158024,158034,158046],{"__ignoreMap":24},[29,158013,158014,158016,158018,158020,158022],{"class":31,"line":32},[29,158015,1707],{"class":305},[29,158017,157912],{"class":309},[29,158019,1886],{"class":305},[29,158021,157966],{"class":39},[29,158023,3914],{"class":309},[29,158025,158026,158028,158030,158032],{"class":31,"line":43},[29,158027,31428],{"class":39},[29,158029,310],{"class":309},[29,158031,157977],{"class":103},[29,158033,316],{"class":309},[29,158035,158036,158038,158040,158042,158044],{"class":31,"line":51},[29,158037,157935],{"class":305},[29,158039,157912],{"class":309},[29,158041,1886],{"class":305},[29,158043,157917],{"class":39},[29,158045,3914],{"class":309},[29,158047,158048,158050,158052,158054],{"class":31,"line":59},[29,158049,31428],{"class":39},[29,158051,310],{"class":309},[29,158053,157928],{"class":103},[29,158055,316],{"class":309},[171,158057,158058,158059,158061],{},"成绩 95 会先满足 ",[26,158060,158005],{},"，后面的优秀分支就不会执行。",[14,158063,158065],{"id":158064},"_35-判断语句嵌套","3.5 判断语句嵌套",[171,158067,158068],{},"嵌套判断就是在一个判断内部再写判断。",[19,158070,158072],{"className":30507,"code":158071,"language":30509,"meta":24,"style":24},"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",[26,158073,158074,158092,158107,158111,158123,158137,158147,158154,158165,158171],{"__ignoreMap":24},[29,158075,158076,158078,158080,158082,158084,158086,158088,158090],{"class":31,"line":32},[29,158077,146675],{"class":309},[29,158079,355],{"class":305},[29,158081,2557],{"class":39},[29,158083,310],{"class":309},[29,158085,53950],{"class":39},[29,158087,310],{"class":309},[29,158089,152523],{"class":103},[29,158091,30626],{"class":309},[29,158093,158094,158096,158098,158100,158102,158105],{"class":31,"line":43},[29,158095,156490],{"class":309},[29,158097,355],{"class":305},[29,158099,60734],{"class":39},[29,158101,310],{"class":309},[29,158103,158104],{"class":103},"\"是否有票(y\u002Fn):\"",[29,158106,316],{"class":309},[29,158108,158109],{"class":31,"line":51},[29,158110,2575],{"emptyLinePlaceholder":233},[29,158112,158113,158115,158117,158119,158121],{"class":31,"line":59},[29,158114,1707],{"class":305},[29,158116,15882],{"class":309},[29,158118,1886],{"class":305},[29,158120,156414],{"class":39},[29,158122,3914],{"class":309},[29,158124,158125,158127,158130,158132,158135],{"class":31,"line":67},[29,158126,3276],{"class":305},[29,158128,158129],{"class":309}," has_ticket ",[29,158131,3124],{"class":305},[29,158133,158134],{"class":103}," \"y\"",[29,158136,3914],{"class":309},[29,158138,158139,158141,158143,158145],{"class":31,"line":75},[29,158140,32580],{"class":39},[29,158142,310],{"class":309},[29,158144,157776],{"class":103},[29,158146,316],{"class":309},[29,158148,158149,158152],{"class":31,"line":83},[29,158150,158151],{"class":305},"    else",[29,158153,3914],{"class":309},[29,158155,158156,158158,158160,158163],{"class":31,"line":158},[29,158157,32580],{"class":39},[29,158159,310],{"class":309},[29,158161,158162],{"class":103},"\"请先买票\"",[29,158164,316],{"class":309},[29,158166,158167,158169],{"class":31,"line":166},[29,158168,1877],{"class":305},[29,158170,3914],{"class":309},[29,158172,158173,158175,158177,158180],{"class":31,"line":1505},[29,158174,31428],{"class":39},[29,158176,310],{"class":309},[29,158178,158179],{"class":103},"\"未成年人禁止进入\"",[29,158181,316],{"class":309},[171,158183,158184],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158186,158188],{"id":158187},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[275,158190,158192],{"id":158191},"_361-and","3.6.1 and",[171,158194,158195],{},"两个条件都成立才成立。",[19,158197,158199],{"className":30507,"code":158198,"language":30509,"meta":24,"style":24},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[26,158200,158201,158209,158217,158221,158236],{"__ignoreMap":24},[29,158202,158203,158205,158207],{"class":31,"line":32},[29,158204,146675],{"class":309},[29,158206,355],{"class":305},[29,158208,88194],{"class":39},[29,158210,158211,158213,158215],{"class":31,"line":43},[29,158212,156490],{"class":309},[29,158214,355],{"class":305},[29,158216,153728],{"class":39},[29,158218,158219],{"class":31,"line":51},[29,158220,2575],{"emptyLinePlaceholder":233},[29,158222,158223,158225,158227,158229,158231,158233],{"class":31,"line":59},[29,158224,1707],{"class":305},[29,158226,15882],{"class":309},[29,158228,1886],{"class":305},[29,158230,156414],{"class":39},[29,158232,120558],{"class":305},[29,158234,158235],{"class":309}," has_ticket:\n",[29,158237,158238,158240,158242,158244],{"class":31,"line":67},[29,158239,31428],{"class":39},[29,158241,310],{"class":309},[29,158243,157776],{"class":103},[29,158245,316],{"class":309},[275,158247,158249],{"id":158248},"_362-or","3.6.2 or",[171,158251,158252],{},"只要一个条件成立就成立。",[19,158254,158256],{"className":30507,"code":158255,"language":30509,"meta":24,"style":24},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[26,158257,158258,158267,158276,158280,158292],{"__ignoreMap":24},[29,158259,158260,158263,158265],{"class":31,"line":32},[29,158261,158262],{"class":309},"is_vip ",[29,158264,355],{"class":305},[29,158266,125936],{"class":39},[29,158268,158269,158272,158274],{"class":31,"line":43},[29,158270,158271],{"class":309},"coupon ",[29,158273,355],{"class":305},[29,158275,153728],{"class":39},[29,158277,158278],{"class":31,"line":51},[29,158279,2575],{"emptyLinePlaceholder":233},[29,158281,158282,158284,158287,158289],{"class":31,"line":59},[29,158283,1707],{"class":305},[29,158285,158286],{"class":309}," is_vip ",[29,158288,115219],{"class":305},[29,158290,158291],{"class":309}," coupon:\n",[29,158293,158294,158296,158298,158301],{"class":31,"line":67},[29,158295,31428],{"class":39},[29,158297,310],{"class":309},[29,158299,158300],{"class":103},"\"可以享受优惠\"",[29,158302,316],{"class":309},[275,158304,158306],{"id":158305},"_363-not","3.6.3 not",[171,158308,158309],{},"取反。",[19,158311,158313],{"className":30507,"code":158312,"language":30509,"meta":24,"style":24},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[26,158314,158315,158324,158328,158337],{"__ignoreMap":24},[29,158316,158317,158320,158322],{"class":31,"line":32},[29,158318,158319],{"class":309},"is_closed ",[29,158321,355],{"class":305},[29,158323,125936],{"class":39},[29,158325,158326],{"class":31,"line":43},[29,158327,2575],{"emptyLinePlaceholder":233},[29,158329,158330,158332,158334],{"class":31,"line":51},[29,158331,1707],{"class":305},[29,158333,39059],{"class":305},[29,158335,158336],{"class":309}," is_closed:\n",[29,158338,158339,158341,158343,158346],{"class":31,"line":59},[29,158340,31428],{"class":39},[29,158342,310],{"class":309},[29,158344,158345],{"class":103},"\"店铺营业中\"",[29,158347,316],{"class":309},[14,158349,158351],{"id":158350},"_37-链式比较","3.7 链式比较",[171,158353,158354],{},"Python 支持链式比较：",[19,158356,158358],{"className":30507,"code":158357,"language":30509,"meta":24,"style":24},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[26,158359,158360,158369,158373,158390],{"__ignoreMap":24},[29,158361,158362,158364,158366],{"class":31,"line":32},[29,158363,155487],{"class":309},[29,158365,355],{"class":305},[29,158367,158368],{"class":39}," 85\n",[29,158370,158371],{"class":31,"line":43},[29,158372,2575],{"emptyLinePlaceholder":233},[29,158374,158375,158377,158379,158382,158384,158386,158388],{"class":31,"line":51},[29,158376,1707],{"class":305},[29,158378,4268],{"class":39},[29,158380,158381],{"class":305}," \u003C=",[29,158383,157912],{"class":309},[29,158385,1764],{"class":305},[29,158387,5929],{"class":39},[29,158389,3914],{"class":309},[29,158391,158392,158394,158396,158399],{"class":31,"line":59},[29,158393,31428],{"class":39},[29,158395,310],{"class":309},[29,158397,158398],{"class":103},"\"成绩合法\"",[29,158400,316],{"class":309},[171,158402,158403],{},"等价于：",[19,158405,158407],{"className":30507,"code":158406,"language":30509,"meta":24,"style":24},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[26,158408,158409,158429],{"__ignoreMap":24},[29,158410,158411,158413,158415,158417,158419,158421,158423,158425,158427],{"class":31,"line":32},[29,158412,1707],{"class":305},[29,158414,157912],{"class":309},[29,158416,1886],{"class":305},[29,158418,4268],{"class":39},[29,158420,120558],{"class":305},[29,158422,157912],{"class":309},[29,158424,1764],{"class":305},[29,158426,5929],{"class":39},[29,158428,3914],{"class":309},[29,158430,158431,158433,158435,158437],{"class":31,"line":43},[29,158432,31428],{"class":39},[29,158434,310],{"class":309},[29,158436,158398],{"class":103},[29,158438,316],{"class":309},[14,158440,158442],{"id":158441},"_38-真值和假值","3.8 真值和假值",[171,158444,116596,158445,158447],{},[26,158446,1707],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[171,158449,158450],{},"假值：",[19,158452,158454],{"className":30507,"code":158453,"language":30509,"meta":24,"style":24},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[26,158455,158456,158460,158465,158469,158473,158478,158482,158486,158491],{"__ignoreMap":24},[29,158457,158458],{"class":31,"line":32},[29,158459,157646],{"class":39},[29,158461,158462],{"class":31,"line":43},[29,158463,158464],{"class":39},"None\n",[29,158466,158467],{"class":31,"line":51},[29,158468,3260],{"class":39},[29,158470,158471],{"class":31,"line":59},[29,158472,32471],{"class":39},[29,158474,158475],{"class":31,"line":67},[29,158476,158477],{"class":103},"\"\"\n",[29,158479,158480],{"class":31,"line":75},[29,158481,32486],{"class":309},[29,158483,158484],{"class":31,"line":83},[29,158485,2151],{"class":309},[29,158487,158488],{"class":31,"line":158},[29,158489,158490],{"class":309},"{}\n",[29,158492,158493,158495],{"class":31,"line":166},[29,158494,155419],{"class":39},[29,158496,2151],{"class":309},[171,158498,15310],{},[19,158500,158502],{"className":30507,"code":158501,"language":30509,"meta":24,"style":24},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[26,158503,158504,158518,158522,158529,158549,158555],{"__ignoreMap":24},[29,158505,158506,158508,158510,158512,158514,158516],{"class":31,"line":32},[29,158507,146665],{"class":309},[29,158509,355],{"class":305},[29,158511,60734],{"class":39},[29,158513,310],{"class":309},[29,158515,152508],{"class":103},[29,158517,316],{"class":309},[29,158519,158520],{"class":31,"line":43},[29,158521,2575],{"emptyLinePlaceholder":233},[29,158523,158524,158526],{"class":31,"line":51},[29,158525,1707],{"class":305},[29,158527,158528],{"class":309}," name:\n",[29,158530,158531,158533,158535,158537,158539,158541,158543,158545,158547],{"class":31,"line":59},[29,158532,31428],{"class":39},[29,158534,310],{"class":309},[29,158536,361],{"class":305},[29,158538,157183],{"class":103},[29,158540,1204],{"class":39},[29,158542,79939],{"class":309},[29,158544,1254],{"class":39},[29,158546,559],{"class":103},[29,158548,316],{"class":309},[29,158550,158551,158553],{"class":31,"line":67},[29,158552,1877],{"class":305},[29,158554,3914],{"class":309},[29,158556,158557,158559,158561,158564],{"class":31,"line":75},[29,158558,31428],{"class":39},[29,158560,310],{"class":309},[29,158562,158563],{"class":103},"\"姓名不能为空\"",[29,158565,316],{"class":309},[14,158567,158569],{"id":158568},"_39-match语句","3.9 match语句",[171,158571,158572,158573,158575],{},"Python 3.10 开始支持 ",[26,158574,71394],{},"。它适合处理固定选项。",[19,158577,158579],{"className":30507,"code":158578,"language":30509,"meta":24,"style":24},"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",[26,158580,158581,158597,158601,158608,158618,158629,158638,158649,158658,158669,158676],{"__ignoreMap":24},[29,158582,158583,158586,158588,158590,158592,158595],{"class":31,"line":32},[29,158584,158585],{"class":309},"command ",[29,158587,355],{"class":305},[29,158589,60734],{"class":39},[29,158591,310],{"class":309},[29,158593,158594],{"class":103},"\"请输入命令:\"",[29,158596,316],{"class":309},[29,158598,158599],{"class":31,"line":43},[29,158600,2575],{"emptyLinePlaceholder":233},[29,158602,158603,158605],{"class":31,"line":51},[29,158604,71394],{"class":305},[29,158606,158607],{"class":309}," command:\n",[29,158609,158610,158613,158616],{"class":31,"line":59},[29,158611,158612],{"class":305},"    case",[29,158614,158615],{"class":103}," \"start\"",[29,158617,3914],{"class":309},[29,158619,158620,158622,158624,158627],{"class":31,"line":67},[29,158621,32580],{"class":39},[29,158623,310],{"class":309},[29,158625,158626],{"class":103},"\"启动\"",[29,158628,316],{"class":309},[29,158630,158631,158633,158636],{"class":31,"line":75},[29,158632,158612],{"class":305},[29,158634,158635],{"class":103}," \"stop\"",[29,158637,3914],{"class":309},[29,158639,158640,158642,158644,158647],{"class":31,"line":83},[29,158641,32580],{"class":39},[29,158643,310],{"class":309},[29,158645,158646],{"class":103},"\"停止\"",[29,158648,316],{"class":309},[29,158650,158651,158653,158656],{"class":31,"line":158},[29,158652,158612],{"class":305},[29,158654,158655],{"class":103}," \"restart\"",[29,158657,3914],{"class":309},[29,158659,158660,158662,158664,158667],{"class":31,"line":166},[29,158661,32580],{"class":39},[29,158663,310],{"class":309},[29,158665,158666],{"class":103},"\"重启\"",[29,158668,316],{"class":309},[29,158670,158671,158673],{"class":31,"line":1505},[29,158672,158612],{"class":305},[29,158674,158675],{"class":309}," _:\n",[29,158677,158678,158680,158682,158685],{"class":31,"line":1788},[29,158679,32580],{"class":39},[29,158681,310],{"class":309},[29,158683,158684],{"class":103},"\"未知命令\"",[29,158686,316],{"class":309},[171,158688,158689,158690,158692,158693,158695],{},"入门阶段掌握 ",[26,158691,154787],{}," 更重要，",[26,158694,71394],{}," 可以作为补充。",[14,158697,158699],{"id":158698},"_310-小案例成绩等级","3.10 小案例：成绩等级",[171,158701,123421],{},[259,158703,158704,158707,158710],{},[178,158705,158706],{},"输入成绩。",[178,158708,158709],{},"判断成绩是否合法。",[178,158711,158712],{},"输出等级。",[171,158714,10210],{},[19,158716,158718],{"className":30507,"code":158717,"language":30509,"meta":24,"style":24},"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",[26,158719,158720,158738,158742,158760,158771,158783,158794,158806,158817,158830,158841,158853,158864,158870],{"__ignoreMap":24},[29,158721,158722,158724,158726,158728,158730,158732,158734,158736],{"class":31,"line":32},[29,158723,155487],{"class":309},[29,158725,355],{"class":305},[29,158727,109926],{"class":39},[29,158729,310],{"class":309},[29,158731,53950],{"class":39},[29,158733,310],{"class":309},[29,158735,152538],{"class":103},[29,158737,30626],{"class":309},[29,158739,158740],{"class":31,"line":43},[29,158741,2575],{"emptyLinePlaceholder":233},[29,158743,158744,158746,158748,158750,158752,158754,158756,158758],{"class":31,"line":51},[29,158745,1707],{"class":305},[29,158747,39059],{"class":305},[29,158749,4268],{"class":39},[29,158751,158381],{"class":305},[29,158753,157912],{"class":309},[29,158755,1764],{"class":305},[29,158757,5929],{"class":39},[29,158759,3914],{"class":309},[29,158761,158762,158764,158766,158769],{"class":31,"line":59},[29,158763,31428],{"class":39},[29,158765,310],{"class":309},[29,158767,158768],{"class":103},"\"成绩不合法\"",[29,158770,316],{"class":309},[29,158772,158773,158775,158777,158779,158781],{"class":31,"line":67},[29,158774,157935],{"class":305},[29,158776,157912],{"class":309},[29,158778,1886],{"class":305},[29,158780,157917],{"class":39},[29,158782,3914],{"class":309},[29,158784,158785,158787,158789,158792],{"class":31,"line":75},[29,158786,31428],{"class":39},[29,158788,310],{"class":309},[29,158790,158791],{"class":103},"\"等级:A\"",[29,158793,316],{"class":309},[29,158795,158796,158798,158800,158802,158804],{"class":31,"line":83},[29,158797,157935],{"class":305},[29,158799,157912],{"class":309},[29,158801,1886],{"class":305},[29,158803,157942],{"class":39},[29,158805,3914],{"class":309},[29,158807,158808,158810,158812,158815],{"class":31,"line":158},[29,158809,31428],{"class":39},[29,158811,310],{"class":309},[29,158813,158814],{"class":103},"\"等级:B\"",[29,158816,316],{"class":309},[29,158818,158819,158821,158823,158825,158828],{"class":31,"line":166},[29,158820,157935],{"class":305},[29,158822,157912],{"class":309},[29,158824,1886],{"class":305},[29,158826,158827],{"class":39}," 70",[29,158829,3914],{"class":309},[29,158831,158832,158834,158836,158839],{"class":31,"line":1505},[29,158833,31428],{"class":39},[29,158835,310],{"class":309},[29,158837,158838],{"class":103},"\"等级:C\"",[29,158840,316],{"class":309},[29,158842,158843,158845,158847,158849,158851],{"class":31,"line":1788},[29,158844,157935],{"class":305},[29,158846,157912],{"class":309},[29,158848,1886],{"class":305},[29,158850,157966],{"class":39},[29,158852,3914],{"class":309},[29,158854,158855,158857,158859,158862],{"class":31,"line":1793},[29,158856,31428],{"class":39},[29,158858,310],{"class":309},[29,158860,158861],{"class":103},"\"等级:D\"",[29,158863,316],{"class":309},[29,158865,158866,158868],{"class":31,"line":1799},[29,158867,1877],{"class":305},[29,158869,3914],{"class":309},[29,158871,158872,158874,158876,158879],{"class":31,"line":1804},[29,158873,31428],{"class":39},[29,158875,310],{"class":309},[29,158877,158878],{"class":103},"\"等级:E\"",[29,158880,316],{"class":309},[14,158882,158884],{"id":158883},"_311-小案例会员折扣","3.11 小案例：会员折扣",[171,158886,123421],{},[259,158888,158889,158892,158895,158898],{},[178,158890,158891],{},"输入消费金额。",[178,158893,158894],{},"输入会员等级，普通、银卡、金卡。",[178,158896,158897],{},"普通不打折，银卡 9 折，金卡 8 折。",[178,158899,158900],{},"满 500 再减 50。",[171,158902,10210],{},[19,158904,158906],{"className":30507,"code":158905,"language":30509,"meta":24,"style":24},"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",[26,158907,158908,158928,158944,158948,158956,158960,158974,158984,158997,159006,159019,159027,159033,159044,159048,159062,159066,159080,159090,159094],{"__ignoreMap":24},[29,158909,158910,158913,158915,158917,158919,158921,158923,158926],{"class":31,"line":32},[29,158911,158912],{"class":309},"amount ",[29,158914,355],{"class":305},[29,158916,109926],{"class":39},[29,158918,310],{"class":309},[29,158920,53950],{"class":39},[29,158922,310],{"class":309},[29,158924,158925],{"class":103},"\"请输入消费金额:\"",[29,158927,30626],{"class":309},[29,158929,158930,158933,158935,158937,158939,158942],{"class":31,"line":43},[29,158931,158932],{"class":309},"level ",[29,158934,355],{"class":305},[29,158936,60734],{"class":39},[29,158938,310],{"class":309},[29,158940,158941],{"class":103},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[29,158943,316],{"class":309},[29,158945,158946],{"class":31,"line":51},[29,158947,2575],{"emptyLinePlaceholder":233},[29,158949,158950,158952,158954],{"class":31,"line":59},[29,158951,157365],{"class":309},[29,158953,355],{"class":305},[29,158955,55828],{"class":39},[29,158957,158958],{"class":31,"line":67},[29,158959,2575],{"emptyLinePlaceholder":233},[29,158961,158962,158964,158967,158969,158972],{"class":31,"line":75},[29,158963,1707],{"class":305},[29,158965,158966],{"class":309}," level ",[29,158968,3124],{"class":305},[29,158970,158971],{"class":103}," \"银卡\"",[29,158973,3914],{"class":309},[29,158975,158976,158979,158981],{"class":31,"line":83},[29,158977,158978],{"class":309},"    discount ",[29,158980,355],{"class":305},[29,158982,158983],{"class":39}," 0.9\n",[29,158985,158986,158988,158990,158992,158995],{"class":31,"line":158},[29,158987,157935],{"class":305},[29,158989,158966],{"class":309},[29,158991,3124],{"class":305},[29,158993,158994],{"class":103}," \"金卡\"",[29,158996,3914],{"class":309},[29,158998,158999,159001,159003],{"class":31,"line":166},[29,159000,158978],{"class":309},[29,159002,355],{"class":305},[29,159004,159005],{"class":39}," 0.8\n",[29,159007,159008,159010,159012,159014,159017],{"class":31,"line":1505},[29,159009,157935],{"class":305},[29,159011,158966],{"class":309},[29,159013,3124],{"class":305},[29,159015,159016],{"class":103}," \"普通\"",[29,159018,3914],{"class":309},[29,159020,159021,159023,159025],{"class":31,"line":1788},[29,159022,158978],{"class":309},[29,159024,355],{"class":305},[29,159026,55828],{"class":39},[29,159028,159029,159031],{"class":31,"line":1793},[29,159030,1877],{"class":305},[29,159032,3914],{"class":309},[29,159034,159035,159037,159039,159042],{"class":31,"line":1799},[29,159036,31428],{"class":39},[29,159038,310],{"class":309},[29,159040,159041],{"class":103},"\"会员等级输入错误，按普通会员计算\"",[29,159043,316],{"class":309},[29,159045,159046],{"class":31,"line":1804},[29,159047,2575],{"emptyLinePlaceholder":233},[29,159049,159050,159053,159055,159058,159060],{"class":31,"line":1818},[29,159051,159052],{"class":309},"pay ",[29,159054,355],{"class":305},[29,159056,159057],{"class":309}," amount ",[29,159059,763],{"class":305},[29,159061,157404],{"class":309},[29,159063,159064],{"class":31,"line":1823},[29,159065,2575],{"emptyLinePlaceholder":233},[29,159067,159068,159070,159073,159075,159078],{"class":31,"line":1829},[29,159069,1707],{"class":305},[29,159071,159072],{"class":309}," pay ",[29,159074,1886],{"class":305},[29,159076,159077],{"class":39}," 500",[29,159079,3914],{"class":309},[29,159081,159082,159085,159087],{"class":31,"line":1850},[29,159083,159084],{"class":309},"    pay ",[29,159086,150381],{"class":305},[29,159088,159089],{"class":39}," 50\n",[29,159091,159092],{"class":31,"line":1855},[29,159093,2575],{"emptyLinePlaceholder":233},[29,159095,159096,159098,159100,159102,159104,159106,159109,159111,159113,159115],{"class":31,"line":1869},[29,159097,30544],{"class":39},[29,159099,310],{"class":309},[29,159101,361],{"class":305},[29,159103,157485],{"class":103},[29,159105,1204],{"class":39},[29,159107,159108],{"class":309},"pay",[29,159110,157288],{"class":305},[29,159112,1254],{"class":39},[29,159114,157141],{"class":103},[29,159116,316],{"class":309},[14,159118,159120],{"id":159119},"_312-易错点","3.12 易错点",[259,159122,159123,159126,159129,159132,159137],{},[178,159124,159125],{},"冒号不能漏。",[178,159127,159128],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[178,159130,159131],{},"多分支判断要注意顺序。",[178,159133,159134,159135,28514],{},"判断相等用 ",[26,159136,3124],{},[178,159138,159139],{},"字符串比较区分大小写：",[19,159141,159143],{"className":30507,"code":159142,"language":30509,"meta":24,"style":24},"\"Y\" == \"y\"  # False\n",[26,159144,159145],{"__ignoreMap":24},[29,159146,159147,159150,159152,159154],{"class":31,"line":32},[29,159148,159149],{"class":103},"\"Y\"",[29,159151,101688],{"class":305},[29,159153,158134],{"class":103},[29,159155,159156],{"class":367},"  # False\n",[171,159158,159159],{},"可转换后再判断：",[19,159161,159163],{"className":30507,"code":159162,"language":30509,"meta":24,"style":24},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[26,159164,159165,159182,159195],{"__ignoreMap":24},[29,159166,159167,159170,159172,159174,159176,159179],{"class":31,"line":32},[29,159168,159169],{"class":309},"answer ",[29,159171,355],{"class":305},[29,159173,60734],{"class":39},[29,159175,310],{"class":309},[29,159177,159178],{"class":103},"\"是否继续(y\u002Fn):\"",[29,159180,159181],{"class":309},").lower()\n",[29,159183,159184,159186,159189,159191,159193],{"class":31,"line":43},[29,159185,1707],{"class":305},[29,159187,159188],{"class":309}," answer ",[29,159190,3124],{"class":305},[29,159192,158134],{"class":103},[29,159194,3914],{"class":309},[29,159196,159197,159199,159201,159204],{"class":31,"line":51},[29,159198,31428],{"class":39},[29,159200,310],{"class":309},[29,159202,159203],{"class":103},"\"继续\"",[29,159205,316],{"class":309},[14,159207,159209],{"id":159208},"_313-本章练习","3.13 本章练习",[259,159211,159212,159215,159218,159221,159231],{},[178,159213,159214],{},"输入年龄，判断是否成年。",[178,159216,159217],{},"输入年份，判断是否为闰年。",[178,159219,159220],{},"输入三个数字，输出最大值。",[178,159222,159223,159224,159227,159228,159230],{},"写登录判断：用户名是 ",[26,159225,159226],{},"admin"," 且密码是 ",[26,159229,15259],{}," 才登录成功。",[178,159232,159233],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[223,159235,159236],{},"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":24,"searchDepth":43,"depth":43,"links":159238},[159239,159240,159241,159242,159243,159244,159249,159250,159251,159252,159253,159254,159255],{"id":157627,"depth":43,"text":157628},{"id":157680,"depth":43,"text":157681},{"id":157784,"depth":43,"text":157785},{"id":157874,"depth":43,"text":157875},{"id":158064,"depth":43,"text":158065},{"id":158187,"depth":43,"text":158188,"children":159245},[159246,159247,159248],{"id":158191,"depth":51,"text":158192},{"id":158248,"depth":51,"text":158249},{"id":158305,"depth":51,"text":158306},{"id":158350,"depth":43,"text":158351},{"id":158441,"depth":43,"text":158442},{"id":158568,"depth":43,"text":158569},{"id":158698,"depth":43,"text":158699},{"id":158883,"depth":43,"text":158884},{"id":159119,"depth":43,"text":159120},{"id":159208,"depth":43,"text":159209},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157619,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159262,"title":159263,"body":159264,"description":230,"extension":231,"meta":161033,"navigation":233,"path":161034,"seo":161035,"stem":161036,"__hash__":161037},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159265,"toc":161013},[159266,159269,159273,159279,159282,159299,159303,159305,159322,159324,159369,159371,159388,159392,159395,159461,159464,159482,159486,159647,159656,159660,159664,159669,159716,159718,159724,159728,159733,159780,159782,159788,159792,159797,159833,159836,159883,159887,159893,159951,159956,159987,159992,159996,160051,160054,160126,160129,160188,160192,160195,160270,160273,160277,160383,160386,160412,160416,160428,160497,160500,160592,160596,160598,160609,160611,160741,160745,160947,160955,160959,160989,160993,161010],[10,159267,159263],{"id":159268},"_4-循环语句",[14,159270,159272],{"id":159271},"_41-为什么需要循环","4.1 为什么需要循环",[171,159274,159275,159276,159278],{},"如果要输出 1 到 100，不应该写 100 行 ",[26,159277,146601],{},"，而应该用循环。",[171,159280,159281],{},"循环适合处理重复任务：",[259,159283,159284,159287,159290,159293,159296],{},[178,159285,159286],{},"重复输出。",[178,159288,159289],{},"重复输入。",[178,159291,159292],{},"遍历数据。",[178,159294,159295],{},"持续执行菜单。",[178,159297,159298],{},"批量处理文件或数据。",[14,159300,159302],{"id":159301},"_42-while循环","4.2 while循环",[171,159304,5356],{},[19,159306,159308],{"className":30507,"code":159307,"language":30509,"meta":24,"style":24},"while 条件:\n    循环体\n",[26,159309,159310,159317],{"__ignoreMap":24},[29,159311,159312,159314],{"class":31,"line":32},[29,159313,108792],{"class":305},[29,159315,159316],{"class":309}," 条件:\n",[29,159318,159319],{"class":31,"line":43},[29,159320,159321],{"class":309},"    循环体\n",[171,159323,15310],{},[19,159325,159327],{"className":30507,"code":159326,"language":30509,"meta":24,"style":24},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[26,159328,159329,159337,159341,159353,159360],{"__ignoreMap":24},[29,159330,159331,159333,159335],{"class":31,"line":32},[29,159332,100277],{"class":309},[29,159334,355],{"class":305},[29,159336,55828],{"class":39},[29,159338,159339],{"class":31,"line":43},[29,159340,2575],{"emptyLinePlaceholder":233},[29,159342,159343,159345,159347,159349,159351],{"class":31,"line":51},[29,159344,108792],{"class":305},[29,159346,9613],{"class":309},[29,159348,1764],{"class":305},[29,159350,2323],{"class":39},[29,159352,3914],{"class":309},[29,159354,159355,159357],{"class":31,"line":59},[29,159356,31428],{"class":39},[29,159358,159359],{"class":309},"(i)\n",[29,159361,159362,159365,159367],{"class":31,"line":67},[29,159363,159364],{"class":309},"    i ",[29,159366,9652],{"class":305},[29,159368,55828],{"class":39},[171,159370,81058],{},[259,159372,159373,159379,159382,159385],{},[178,159374,159375,159376,28514],{},"判断条件 ",[26,159377,159378],{},"i \u003C= 5",[178,159380,159381],{},"条件成立，执行循环体。",[178,159383,159384],{},"执行完后回到条件判断。",[178,159386,159387],{},"条件不成立，退出循环。",[14,159389,159391],{"id":159390},"_43-while累加","4.3 while累加",[171,159393,159394],{},"计算 1 到 100 的和：",[19,159396,159398],{"className":30507,"code":159397,"language":30509,"meta":24,"style":24},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[26,159399,159400,159408,159416,159420,159432,159442,159450,159454],{"__ignoreMap":24},[29,159401,159402,159404,159406],{"class":31,"line":32},[29,159403,100277],{"class":309},[29,159405,355],{"class":305},[29,159407,55828],{"class":39},[29,159409,159410,159412,159414],{"class":31,"line":43},[29,159411,157389],{"class":309},[29,159413,355],{"class":305},[29,159415,47462],{"class":39},[29,159417,159418],{"class":31,"line":51},[29,159419,2575],{"emptyLinePlaceholder":233},[29,159421,159422,159424,159426,159428,159430],{"class":31,"line":59},[29,159423,108792],{"class":305},[29,159425,9613],{"class":309},[29,159427,1764],{"class":305},[29,159429,5929],{"class":39},[29,159431,3914],{"class":309},[29,159433,159434,159437,159439],{"class":31,"line":67},[29,159435,159436],{"class":309},"    total ",[29,159438,9652],{"class":305},[29,159440,159441],{"class":309}," i\n",[29,159443,159444,159446,159448],{"class":31,"line":75},[29,159445,159364],{"class":309},[29,159447,9652],{"class":305},[29,159449,55828],{"class":39},[29,159451,159452],{"class":31,"line":83},[29,159453,2575],{"emptyLinePlaceholder":233},[29,159455,159456,159458],{"class":31,"line":158},[29,159457,30544],{"class":39},[29,159459,159460],{"class":309},"(total)\n",[171,159462,159463],{},"核心思想：",[259,159465,159466,159471,159476],{},[178,159467,159468,159470],{},[26,159469,749],{}," 控制循环次数。",[178,159472,159473,159475],{},[26,159474,157490],{}," 保存累加结果。",[178,159477,159478,159479,159481],{},"每轮循环都要更新 ",[26,159480,749],{},"，否则可能死循环。",[14,159483,159485],{"id":159484},"_44-while猜数字","4.4 while猜数字",[19,159487,159489],{"className":30507,"code":159488,"language":30509,"meta":24,"style":24},"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",[26,159490,159491,159497,159501,159518,159526,159530,159538,159558,159567,159571,159583,159594,159604,159615,159621,159643],{"__ignoreMap":24},[29,159492,159493,159495],{"class":31,"line":32},[29,159494,30521],{"class":305},[29,159496,45457],{"class":309},[29,159498,159499],{"class":31,"line":43},[29,159500,2575],{"emptyLinePlaceholder":233},[29,159502,159503,159505,159507,159510,159512,159514,159516],{"class":31,"line":51},[29,159504,159169],{"class":309},[29,159506,355],{"class":305},[29,159508,159509],{"class":309}," random.randint(",[29,159511,525],{"class":39},[29,159513,12610],{"class":309},[29,159515,619],{"class":39},[29,159517,316],{"class":309},[29,159519,159520,159522,159524],{"class":31,"line":59},[29,159521,146820],{"class":309},[29,159523,355],{"class":305},[29,159525,47462],{"class":39},[29,159527,159528],{"class":31,"line":67},[29,159529,2575],{"emptyLinePlaceholder":233},[29,159531,159532,159534,159536],{"class":31,"line":75},[29,159533,108792],{"class":305},[29,159535,95421],{"class":39},[29,159537,3914],{"class":309},[29,159539,159540,159543,159545,159547,159549,159551,159553,159556],{"class":31,"line":83},[29,159541,159542],{"class":309},"    guess ",[29,159544,355],{"class":305},[29,159546,2557],{"class":39},[29,159548,310],{"class":309},[29,159550,53950],{"class":39},[29,159552,310],{"class":309},[29,159554,159555],{"class":103},"\"请输入1到100之间的数字:\"",[29,159557,30626],{"class":309},[29,159559,159560,159563,159565],{"class":31,"line":158},[29,159561,159562],{"class":309},"    count ",[29,159564,9652],{"class":305},[29,159566,55828],{"class":39},[29,159568,159569],{"class":31,"line":166},[29,159570,2575],{"emptyLinePlaceholder":233},[29,159572,159573,159575,159578,159580],{"class":31,"line":1505},[29,159574,3276],{"class":305},[29,159576,159577],{"class":309}," guess ",[29,159579,1268],{"class":305},[29,159581,159582],{"class":309}," answer:\n",[29,159584,159585,159587,159589,159592],{"class":31,"line":1788},[29,159586,32580],{"class":39},[29,159588,310],{"class":309},[29,159590,159591],{"class":103},"\"猜大了\"",[29,159593,316],{"class":309},[29,159595,159596,159598,159600,159602],{"class":31,"line":1793},[29,159597,39422],{"class":305},[29,159599,159577],{"class":309},[29,159601,1218],{"class":305},[29,159603,159582],{"class":309},[29,159605,159606,159608,159610,159613],{"class":31,"line":1799},[29,159607,32580],{"class":39},[29,159609,310],{"class":309},[29,159611,159612],{"class":103},"\"猜小了\"",[29,159614,316],{"class":309},[29,159616,159617,159619],{"class":31,"line":1804},[29,159618,158151],{"class":305},[29,159620,3914],{"class":309},[29,159622,159623,159625,159627,159629,159632,159634,159636,159638,159641],{"class":31,"line":1818},[29,159624,32580],{"class":39},[29,159626,310],{"class":309},[29,159628,361],{"class":305},[29,159630,159631],{"class":103},"\"猜对了，一共猜了",[29,159633,1204],{"class":39},[29,159635,84563],{"class":309},[29,159637,1254],{"class":39},[29,159639,159640],{"class":103},"次\"",[29,159642,316],{"class":309},[29,159644,159645],{"class":31,"line":1823},[29,159646,31756],{"class":305},[171,159648,159649,159652,159653,159655],{},[26,159650,159651],{},"while True"," 表示无限循环，通常配合 ",[26,159654,2228],{}," 使用。",[14,159657,159659],{"id":159658},"_45-break和continue","4.5 break和continue",[275,159661,159663],{"id":159662},"_451-break","4.5.1 break",[171,159665,159666,159668],{},[26,159667,2228],{}," 直接结束整个循环。",[19,159670,159672],{"className":30507,"code":159671,"language":30509,"meta":24,"style":24},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[26,159673,159674,159694,159706,159710],{"__ignoreMap":24},[29,159675,159676,159678,159680,159682,159684,159686,159688,159690,159692],{"class":31,"line":32},[29,159677,3200],{"class":305},[29,159679,9613],{"class":309},[29,159681,26172],{"class":305},[29,159683,32572],{"class":39},[29,159685,310],{"class":309},[29,159687,525],{"class":39},[29,159689,12610],{"class":309},[29,159691,652],{"class":39},[29,159693,30915],{"class":309},[29,159695,159696,159698,159700,159702,159704],{"class":31,"line":43},[29,159697,3276],{"class":305},[29,159699,9613],{"class":309},[29,159701,3124],{"class":305},[29,159703,78199],{"class":39},[29,159705,3914],{"class":309},[29,159707,159708],{"class":31,"line":51},[29,159709,31756],{"class":305},[29,159711,159712,159714],{"class":31,"line":59},[29,159713,31428],{"class":39},[29,159715,159359],{"class":309},[171,159717,146586],{},[19,159719,159722],{"className":159720,"code":159721,"language":5362,"meta":24},[5360],"1\n2\n",[26,159723,159721],{"__ignoreMap":24},[275,159725,159727],{"id":159726},"_452-continue","4.5.2 continue",[171,159729,159730,159732],{},[26,159731,154801],{}," 跳过本轮剩余代码，进入下一轮循环。",[19,159734,159736],{"className":30507,"code":159735,"language":30509,"meta":24,"style":24},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[26,159737,159738,159758,159770,159774],{"__ignoreMap":24},[29,159739,159740,159742,159744,159746,159748,159750,159752,159754,159756],{"class":31,"line":32},[29,159741,3200],{"class":305},[29,159743,9613],{"class":309},[29,159745,26172],{"class":305},[29,159747,32572],{"class":39},[29,159749,310],{"class":309},[29,159751,525],{"class":39},[29,159753,12610],{"class":309},[29,159755,652],{"class":39},[29,159757,30915],{"class":309},[29,159759,159760,159762,159764,159766,159768],{"class":31,"line":43},[29,159761,3276],{"class":305},[29,159763,9613],{"class":309},[29,159765,3124],{"class":305},[29,159767,78199],{"class":39},[29,159769,3914],{"class":309},[29,159771,159772],{"class":31,"line":51},[29,159773,148641],{"class":305},[29,159775,159776,159778],{"class":31,"line":59},[29,159777,31428],{"class":39},[29,159779,159359],{"class":309},[171,159781,146586],{},[19,159783,159786],{"className":159784,"code":159785,"language":5362,"meta":24},[5360],"1\n2\n4\n5\n",[26,159787,159785],{"__ignoreMap":24},[14,159789,159791],{"id":159790},"_46-for循环","4.6 for循环",[171,159793,159794,159796],{},[26,159795,3200],{}," 常用于遍历序列。",[19,159798,159800],{"className":30507,"code":159799,"language":30509,"meta":24,"style":24},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[26,159801,159802,159811,159815,159826],{"__ignoreMap":24},[29,159803,159804,159806,159808],{"class":31,"line":32},[29,159805,146665],{"class":309},[29,159807,355],{"class":305},[29,159809,159810],{"class":103}," \"python\"\n",[29,159812,159813],{"class":31,"line":43},[29,159814,2575],{"emptyLinePlaceholder":233},[29,159816,159817,159819,159822,159824],{"class":31,"line":51},[29,159818,3200],{"class":305},[29,159820,159821],{"class":309}," ch ",[29,159823,26172],{"class":305},[29,159825,158528],{"class":309},[29,159827,159828,159830],{"class":31,"line":59},[29,159829,31428],{"class":39},[29,159831,159832],{"class":309},"(ch)\n",[171,159834,159835],{},"遍历列表：",[19,159837,159839],{"className":30507,"code":159838,"language":30509,"meta":24,"style":24},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[26,159840,159841,159863,159867,159877],{"__ignoreMap":24},[29,159842,159843,159846,159848,159850,159852,159854,159856,159858,159861],{"class":31,"line":32},[29,159844,159845],{"class":309},"students ",[29,159847,355],{"class":305},[29,159849,52355],{"class":309},[29,159851,150017],{"class":103},[29,159853,12610],{"class":309},[29,159855,151065],{"class":103},[29,159857,12610],{"class":309},[29,159859,159860],{"class":103},"\"小刚\"",[29,159862,33375],{"class":309},[29,159864,159865],{"class":31,"line":43},[29,159866,2575],{"emptyLinePlaceholder":233},[29,159868,159869,159871,159873,159875],{"class":31,"line":51},[29,159870,3200],{"class":305},[29,159872,152266],{"class":309},[29,159874,26172],{"class":305},[29,159876,152271],{"class":309},[29,159878,159879,159881],{"class":31,"line":59},[29,159880,31428],{"class":39},[29,159882,150171],{"class":309},[14,159884,159886],{"id":159885},"_47-range函数","4.7 range函数",[171,159888,159889,159892],{},[26,159890,159891],{},"range()"," 用于生成整数序列。",[19,159894,159896],{"className":30507,"code":159895,"language":30509,"meta":24,"style":24},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[26,159897,159898,159912,159930],{"__ignoreMap":24},[29,159899,159900,159902,159904,159906,159909],{"class":31,"line":32},[29,159901,33545],{"class":39},[29,159903,310],{"class":309},[29,159905,627],{"class":39},[29,159907,159908],{"class":309},")          ",[29,159910,159911],{"class":367},"# 0,1,2,3,4\n",[29,159913,159914,159916,159918,159920,159922,159924,159927],{"class":31,"line":43},[29,159915,33545],{"class":39},[29,159917,310],{"class":309},[29,159919,525],{"class":39},[29,159921,12610],{"class":309},[29,159923,627],{"class":39},[29,159925,159926],{"class":309},")       ",[29,159928,159929],{"class":367},"# 1,2,3,4\n",[29,159931,159932,159934,159936,159938,159940,159942,159944,159946,159948],{"class":31,"line":51},[29,159933,33545],{"class":39},[29,159935,310],{"class":309},[29,159937,525],{"class":39},[29,159939,12610],{"class":309},[29,159941,754],{"class":39},[29,159943,12610],{"class":309},[29,159945,386],{"class":39},[29,159947,155790],{"class":309},[29,159949,159950],{"class":367},"# 1,3,5,7,9\n",[171,159952,159953,159954,24791],{},"配合 ",[26,159955,3200],{},[19,159957,159959],{"className":30507,"code":159958,"language":30509,"meta":24,"style":24},"for i in range(1, 6):\n    print(i)\n",[26,159960,159961,159981],{"__ignoreMap":24},[29,159962,159963,159965,159967,159969,159971,159973,159975,159977,159979],{"class":31,"line":32},[29,159964,3200],{"class":305},[29,159966,9613],{"class":309},[29,159968,26172],{"class":305},[29,159970,32572],{"class":39},[29,159972,310],{"class":309},[29,159974,525],{"class":39},[29,159976,12610],{"class":309},[29,159978,652],{"class":39},[29,159980,30915],{"class":309},[29,159982,159983,159985],{"class":31,"line":43},[29,159984,31428],{"class":39},[29,159986,159359],{"class":309},[171,159988,9200,159989,159991],{},[26,159990,33545],{}," 的结束值不包含在内。",[14,159993,159995],{"id":159994},"_48-for循环求和","4.8 for循环求和",[19,159997,159999],{"className":30507,"code":159998,"language":30509,"meta":24,"style":24},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[26,160000,160001,160009,160013,160033,160041,160045],{"__ignoreMap":24},[29,160002,160003,160005,160007],{"class":31,"line":32},[29,160004,157389],{"class":309},[29,160006,355],{"class":305},[29,160008,47462],{"class":39},[29,160010,160011],{"class":31,"line":43},[29,160012,2575],{"emptyLinePlaceholder":233},[29,160014,160015,160017,160019,160021,160023,160025,160027,160029,160031],{"class":31,"line":51},[29,160016,3200],{"class":305},[29,160018,9613],{"class":309},[29,160020,26172],{"class":305},[29,160022,32572],{"class":39},[29,160024,310],{"class":309},[29,160026,525],{"class":39},[29,160028,12610],{"class":309},[29,160030,645],{"class":39},[29,160032,30915],{"class":309},[29,160034,160035,160037,160039],{"class":31,"line":59},[29,160036,159436],{"class":309},[29,160038,9652],{"class":305},[29,160040,159441],{"class":309},[29,160042,160043],{"class":31,"line":67},[29,160044,2575],{"emptyLinePlaceholder":233},[29,160046,160047,160049],{"class":31,"line":75},[29,160048,30544],{"class":39},[29,160050,159460],{"class":309},[171,160052,160053],{},"求偶数和：",[19,160055,160057],{"className":30507,"code":160056,"language":30509,"meta":24,"style":24},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[26,160058,160059,160067,160071,160091,160107,160116,160120],{"__ignoreMap":24},[29,160060,160061,160063,160065],{"class":31,"line":32},[29,160062,157389],{"class":309},[29,160064,355],{"class":305},[29,160066,47462],{"class":39},[29,160068,160069],{"class":31,"line":43},[29,160070,2575],{"emptyLinePlaceholder":233},[29,160072,160073,160075,160077,160079,160081,160083,160085,160087,160089],{"class":31,"line":51},[29,160074,3200],{"class":305},[29,160076,9613],{"class":309},[29,160078,26172],{"class":305},[29,160080,32572],{"class":39},[29,160082,310],{"class":309},[29,160084,525],{"class":39},[29,160086,12610],{"class":309},[29,160088,645],{"class":39},[29,160090,30915],{"class":309},[29,160092,160093,160095,160097,160099,160101,160103,160105],{"class":31,"line":59},[29,160094,3276],{"class":305},[29,160096,9613],{"class":309},[29,160098,636],{"class":305},[29,160100,14930],{"class":39},[29,160102,101688],{"class":305},[29,160104,4268],{"class":39},[29,160106,3914],{"class":309},[29,160108,160109,160112,160114],{"class":31,"line":67},[29,160110,160111],{"class":309},"        total ",[29,160113,9652],{"class":305},[29,160115,159441],{"class":309},[29,160117,160118],{"class":31,"line":75},[29,160119,2575],{"emptyLinePlaceholder":233},[29,160121,160122,160124],{"class":31,"line":83},[29,160123,30544],{"class":39},[29,160125,159460],{"class":309},[171,160127,160128],{},"也可以：",[19,160130,160132],{"className":30507,"code":160131,"language":30509,"meta":24,"style":24},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[26,160133,160134,160142,160146,160170,160178,160182],{"__ignoreMap":24},[29,160135,160136,160138,160140],{"class":31,"line":32},[29,160137,157389],{"class":309},[29,160139,355],{"class":305},[29,160141,47462],{"class":39},[29,160143,160144],{"class":31,"line":43},[29,160145,2575],{"emptyLinePlaceholder":233},[29,160147,160148,160150,160152,160154,160156,160158,160160,160162,160164,160166,160168],{"class":31,"line":51},[29,160149,3200],{"class":305},[29,160151,9613],{"class":309},[29,160153,26172],{"class":305},[29,160155,32572],{"class":39},[29,160157,310],{"class":309},[29,160159,386],{"class":39},[29,160161,12610],{"class":309},[29,160163,645],{"class":39},[29,160165,12610],{"class":309},[29,160167,386],{"class":39},[29,160169,30915],{"class":309},[29,160171,160172,160174,160176],{"class":31,"line":59},[29,160173,159436],{"class":309},[29,160175,9652],{"class":305},[29,160177,159441],{"class":309},[29,160179,160180],{"class":31,"line":67},[29,160181,2575],{"emptyLinePlaceholder":233},[29,160183,160184,160186],{"class":31,"line":75},[29,160185,30544],{"class":39},[29,160187,159460],{"class":309},[14,160189,160191],{"id":160190},"_49-循环嵌套","4.9 循环嵌套",[171,160193,160194],{},"嵌套循环就是循环里面再写循环。",[19,160196,160198],{"className":30507,"code":160197,"language":30509,"meta":24,"style":24},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[26,160199,160200,160220,160240],{"__ignoreMap":24},[29,160201,160202,160204,160206,160208,160210,160212,160214,160216,160218],{"class":31,"line":32},[29,160203,3200],{"class":305},[29,160205,9613],{"class":309},[29,160207,26172],{"class":305},[29,160209,32572],{"class":39},[29,160211,310],{"class":309},[29,160213,525],{"class":39},[29,160215,12610],{"class":309},[29,160217,601],{"class":39},[29,160219,30915],{"class":309},[29,160221,160222,160224,160226,160228,160230,160232,160234,160236,160238],{"class":31,"line":43},[29,160223,3376],{"class":305},[29,160225,9675],{"class":309},[29,160227,26172],{"class":305},[29,160229,32572],{"class":39},[29,160231,310],{"class":309},[29,160233,525],{"class":39},[29,160235,12610],{"class":309},[29,160237,601],{"class":39},[29,160239,30915],{"class":309},[29,160241,160242,160244,160246,160248,160251,160253,160255,160257,160260,160262,160264,160266,160268],{"class":31,"line":51},[29,160243,32580],{"class":39},[29,160245,310],{"class":309},[29,160247,361],{"class":305},[29,160249,160250],{"class":103},"\"i=",[29,160252,1204],{"class":39},[29,160254,749],{"class":309},[29,160256,1254],{"class":39},[29,160258,160259],{"class":103},", j=",[29,160261,1204],{"class":39},[29,160263,775],{"class":309},[29,160265,1254],{"class":39},[29,160267,559],{"class":103},[29,160269,316],{"class":309},[171,160271,160272],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160274,160276],{"id":160275},"_410-九九乘法表","4.10 九九乘法表",[19,160278,160280],{"className":30507,"code":160279,"language":30509,"meta":24,"style":24},"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",[26,160281,160282,160302,160325,160377],{"__ignoreMap":24},[29,160283,160284,160286,160288,160290,160292,160294,160296,160298,160300],{"class":31,"line":32},[29,160285,3200],{"class":305},[29,160287,9613],{"class":309},[29,160289,26172],{"class":305},[29,160291,32572],{"class":39},[29,160293,310],{"class":309},[29,160295,525],{"class":39},[29,160297,12610],{"class":309},[29,160299,754],{"class":39},[29,160301,30915],{"class":309},[29,160303,160304,160306,160308,160310,160312,160314,160316,160319,160321,160323],{"class":31,"line":43},[29,160305,3376],{"class":305},[29,160307,9675],{"class":309},[29,160309,26172],{"class":305},[29,160311,32572],{"class":39},[29,160313,310],{"class":309},[29,160315,525],{"class":39},[29,160317,160318],{"class":309},", i ",[29,160320,789],{"class":305},[29,160322,25247],{"class":39},[29,160324,30915],{"class":309},[29,160326,160327,160329,160331,160333,160335,160337,160339,160341,160343,160345,160347,160349,160351,160353,160355,160357,160359,160361,160363,160365,160367,160369,160371,160373,160375],{"class":31,"line":51},[29,160328,32580],{"class":39},[29,160330,310],{"class":309},[29,160332,361],{"class":305},[29,160334,559],{"class":103},[29,160336,1204],{"class":39},[29,160338,775],{"class":309},[29,160340,1254],{"class":39},[29,160342,763],{"class":103},[29,160344,1204],{"class":39},[29,160346,749],{"class":309},[29,160348,1254],{"class":39},[29,160350,355],{"class":103},[29,160352,1204],{"class":39},[29,160354,100277],{"class":309},[29,160356,763],{"class":305},[29,160358,3585],{"class":309},[29,160360,1254],{"class":39},[29,160362,559],{"class":103},[29,160364,12610],{"class":309},[29,160366,45930],{"class":5391},[29,160368,355],{"class":305},[29,160370,559],{"class":103},[29,160372,1408],{"class":39},[29,160374,559],{"class":103},[29,160376,316],{"class":309},[29,160378,160379,160381],{"class":31,"line":59},[29,160380,31428],{"class":39},[29,160382,2151],{"class":309},[171,160384,160385],{},"关键点：",[259,160387,160388,160394,160400,160406],{},[178,160389,160390,160391,160393],{},"外层 ",[26,160392,749],{}," 控制行。",[178,160395,160396,160397,160399],{},"内层 ",[26,160398,775],{}," 控制列。",[178,160401,160402,160403,160405],{},"每行结束后用 ",[26,160404,146601],{}," 换行。",[178,160407,160408,160411],{},[26,160409,160410],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160413,160415],{"id":160414},"_411-循环else","4.11 循环else",[171,160417,160418,160419,160421,160422,160424,160425,160427],{},"Python 的循环可以带 ",[26,160420,1877],{},"。当循环正常结束时执行 ",[26,160423,1877],{},"，如果被 ",[26,160426,2228],{}," 打断，则不执行。",[19,160429,160431],{"className":30507,"code":160430,"language":30509,"meta":24,"style":24},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[26,160432,160433,160453,160465,160476,160480,160486],{"__ignoreMap":24},[29,160434,160435,160437,160439,160441,160443,160445,160447,160449,160451],{"class":31,"line":32},[29,160436,3200],{"class":305},[29,160438,9613],{"class":309},[29,160440,26172],{"class":305},[29,160442,32572],{"class":39},[29,160444,310],{"class":309},[29,160446,525],{"class":39},[29,160448,12610],{"class":309},[29,160450,652],{"class":39},[29,160452,30915],{"class":309},[29,160454,160455,160457,160459,160461,160463],{"class":31,"line":43},[29,160456,3276],{"class":305},[29,160458,9613],{"class":309},[29,160460,3124],{"class":305},[29,160462,2213],{"class":39},[29,160464,3914],{"class":309},[29,160466,160467,160469,160471,160474],{"class":31,"line":51},[29,160468,32580],{"class":39},[29,160470,310],{"class":309},[29,160472,160473],{"class":103},"\"找到了\"",[29,160475,316],{"class":309},[29,160477,160478],{"class":31,"line":59},[29,160479,31756],{"class":305},[29,160481,160482,160484],{"class":31,"line":67},[29,160483,1877],{"class":305},[29,160485,3914],{"class":309},[29,160487,160488,160490,160492,160495],{"class":31,"line":75},[29,160489,31428],{"class":39},[29,160491,310],{"class":309},[29,160493,160494],{"class":103},"\"没找到\"",[29,160496,316],{"class":309},[171,160498,160499],{},"常用于搜索。",[19,160501,160503],{"className":30507,"code":160502,"language":30509,"meta":24,"style":24},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[26,160504,160505,160526,160535,160539,160551,160562,160572,160576,160582],{"__ignoreMap":24},[29,160506,160507,160510,160512,160514,160516,160518,160520,160522,160524],{"class":31,"line":32},[29,160508,160509],{"class":309},"names ",[29,160511,355],{"class":305},[29,160513,52355],{"class":309},[29,160515,150017],{"class":103},[29,160517,12610],{"class":309},[29,160519,151065],{"class":103},[29,160521,12610],{"class":309},[29,160523,159860],{"class":103},[29,160525,33375],{"class":309},[29,160527,160528,160530,160532],{"class":31,"line":43},[29,160529,111707],{"class":309},[29,160531,355],{"class":305},[29,160533,160534],{"class":103}," \"小李\"\n",[29,160536,160537],{"class":31,"line":51},[29,160538,2575],{"emptyLinePlaceholder":233},[29,160540,160541,160543,160546,160548],{"class":31,"line":59},[29,160542,3200],{"class":305},[29,160544,160545],{"class":309}," name ",[29,160547,26172],{"class":305},[29,160549,160550],{"class":309}," names:\n",[29,160552,160553,160555,160557,160559],{"class":31,"line":67},[29,160554,3276],{"class":305},[29,160556,160545],{"class":309},[29,160558,3124],{"class":305},[29,160560,160561],{"class":309}," target:\n",[29,160563,160564,160566,160568,160570],{"class":31,"line":75},[29,160565,32580],{"class":39},[29,160567,310],{"class":309},[29,160569,160473],{"class":103},[29,160571,316],{"class":309},[29,160573,160574],{"class":31,"line":83},[29,160575,31756],{"class":305},[29,160577,160578,160580],{"class":31,"line":158},[29,160579,1877],{"class":305},[29,160581,3914],{"class":309},[29,160583,160584,160586,160588,160590],{"class":31,"line":166},[29,160585,31428],{"class":39},[29,160587,310],{"class":309},[29,160589,160494],{"class":103},[29,160591,316],{"class":309},[14,160593,160595],{"id":160594},"_412-小案例登录重试","4.12 小案例：登录重试",[171,160597,123421],{},[259,160599,160600,160603,160606],{},[178,160601,160602],{},"用户最多输入 3 次密码。",[178,160604,160605],{},"密码正确则登录成功。",[178,160607,160608],{},"3 次都错误则锁定账号。",[171,160610,10210],{},[19,160612,160614],{"className":30507,"code":160613,"language":30509,"meta":24,"style":24},"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",[26,160615,160616,160626,160630,160646,160662,160666,160678,160689,160693,160699,160724,160730],{"__ignoreMap":24},[29,160617,160618,160621,160623],{"class":31,"line":32},[29,160619,160620],{"class":309},"password ",[29,160622,355],{"class":305},[29,160624,160625],{"class":103}," \"123456\"\n",[29,160627,160628],{"class":31,"line":43},[29,160629,2575],{"emptyLinePlaceholder":233},[29,160631,160632,160634,160636,160638,160640,160642,160644],{"class":31,"line":51},[29,160633,3200],{"class":305},[29,160635,9613],{"class":309},[29,160637,26172],{"class":305},[29,160639,32572],{"class":39},[29,160641,310],{"class":309},[29,160643,380],{"class":39},[29,160645,30915],{"class":309},[29,160647,160648,160651,160653,160655,160657,160660],{"class":31,"line":59},[29,160649,160650],{"class":309},"    user_password ",[29,160652,355],{"class":305},[29,160654,60734],{"class":39},[29,160656,310],{"class":309},[29,160658,160659],{"class":103},"\"请输入密码:\"",[29,160661,316],{"class":309},[29,160663,160664],{"class":31,"line":67},[29,160665,2575],{"emptyLinePlaceholder":233},[29,160667,160668,160670,160673,160675],{"class":31,"line":75},[29,160669,3276],{"class":305},[29,160671,160672],{"class":309}," user_password ",[29,160674,3124],{"class":305},[29,160676,160677],{"class":309}," password:\n",[29,160679,160680,160682,160684,160687],{"class":31,"line":83},[29,160681,32580],{"class":39},[29,160683,310],{"class":309},[29,160685,160686],{"class":103},"\"登录成功\"",[29,160688,316],{"class":309},[29,160690,160691],{"class":31,"line":158},[29,160692,31756],{"class":305},[29,160694,160695,160697],{"class":31,"line":166},[29,160696,158151],{"class":305},[29,160698,3914],{"class":309},[29,160700,160701,160703,160705,160707,160710,160713,160715,160717,160719,160722],{"class":31,"line":1505},[29,160702,32580],{"class":39},[29,160704,310],{"class":309},[29,160706,361],{"class":305},[29,160708,160709],{"class":103},"\"密码错误，还剩",[29,160711,160712],{"class":39},"{2",[29,160714,52400],{"class":305},[29,160716,3207],{"class":309},[29,160718,1254],{"class":39},[29,160720,160721],{"class":103},"次机会\"",[29,160723,316],{"class":309},[29,160725,160726,160728],{"class":31,"line":1788},[29,160727,1877],{"class":305},[29,160729,3914],{"class":309},[29,160731,160732,160734,160736,160739],{"class":31,"line":1793},[29,160733,31428],{"class":39},[29,160735,310],{"class":309},[29,160737,160738],{"class":103},"\"账号已锁定\"",[29,160740,316],{"class":309},[14,160742,160744],{"id":160743},"_413-小案例菜单程序","4.13 小案例：菜单程序",[19,160746,160748],{"className":30507,"code":160747,"language":30509,"meta":24,"style":24},"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",[26,160749,160750,160758,160769,160780,160791,160802,160813,160817,160832,160836,160848,160859,160871,160882,160894,160905,160917,160927,160931,160937],{"__ignoreMap":24},[29,160751,160752,160754,160756],{"class":31,"line":32},[29,160753,108792],{"class":305},[29,160755,95421],{"class":39},[29,160757,3914],{"class":309},[29,160759,160760,160762,160764,160767],{"class":31,"line":43},[29,160761,31428],{"class":39},[29,160763,310],{"class":309},[29,160765,160766],{"class":103},"\"====== 菜单 ======\"",[29,160768,316],{"class":309},[29,160770,160771,160773,160775,160778],{"class":31,"line":51},[29,160772,31428],{"class":39},[29,160774,310],{"class":309},[29,160776,160777],{"class":103},"\"1. 查询余额\"",[29,160779,316],{"class":309},[29,160781,160782,160784,160786,160789],{"class":31,"line":59},[29,160783,31428],{"class":39},[29,160785,310],{"class":309},[29,160787,160788],{"class":103},"\"2. 存款\"",[29,160790,316],{"class":309},[29,160792,160793,160795,160797,160800],{"class":31,"line":67},[29,160794,31428],{"class":39},[29,160796,310],{"class":309},[29,160798,160799],{"class":103},"\"3. 取款\"",[29,160801,316],{"class":309},[29,160803,160804,160806,160808,160811],{"class":31,"line":75},[29,160805,31428],{"class":39},[29,160807,310],{"class":309},[29,160809,160810],{"class":103},"\"0. 退出\"",[29,160812,316],{"class":309},[29,160814,160815],{"class":31,"line":83},[29,160816,2575],{"emptyLinePlaceholder":233},[29,160818,160819,160822,160824,160826,160828,160830],{"class":31,"line":158},[29,160820,160821],{"class":309},"    choice ",[29,160823,355],{"class":305},[29,160825,60734],{"class":39},[29,160827,310],{"class":309},[29,160829,153202],{"class":103},[29,160831,316],{"class":309},[29,160833,160834],{"class":31,"line":166},[29,160835,2575],{"emptyLinePlaceholder":233},[29,160837,160838,160840,160842,160844,160846],{"class":31,"line":1505},[29,160839,3276],{"class":305},[29,160841,153215],{"class":309},[29,160843,3124],{"class":305},[29,160845,153220],{"class":103},[29,160847,3914],{"class":309},[29,160849,160850,160852,160854,160857],{"class":31,"line":1788},[29,160851,32580],{"class":39},[29,160853,310],{"class":309},[29,160855,160856],{"class":103},"\"余额为1000元\"",[29,160858,316],{"class":309},[29,160860,160861,160863,160865,160867,160869],{"class":31,"line":1793},[29,160862,39422],{"class":305},[29,160864,153215],{"class":309},[29,160866,3124],{"class":305},[29,160868,153239],{"class":103},[29,160870,3914],{"class":309},[29,160872,160873,160875,160877,160880],{"class":31,"line":1799},[29,160874,32580],{"class":39},[29,160876,310],{"class":309},[29,160878,160879],{"class":103},"\"存款功能\"",[29,160881,316],{"class":309},[29,160883,160884,160886,160888,160890,160892],{"class":31,"line":1804},[29,160885,39422],{"class":305},[29,160887,153215],{"class":309},[29,160889,3124],{"class":305},[29,160891,153257],{"class":103},[29,160893,3914],{"class":309},[29,160895,160896,160898,160900,160903],{"class":31,"line":1818},[29,160897,32580],{"class":39},[29,160899,310],{"class":309},[29,160901,160902],{"class":103},"\"取款功能\"",[29,160904,316],{"class":309},[29,160906,160907,160909,160911,160913,160915],{"class":31,"line":1823},[29,160908,39422],{"class":305},[29,160910,153215],{"class":309},[29,160912,3124],{"class":305},[29,160914,153311],{"class":103},[29,160916,3914],{"class":309},[29,160918,160919,160921,160923,160925],{"class":31,"line":1829},[29,160920,32580],{"class":39},[29,160922,310],{"class":309},[29,160924,153322],{"class":103},[29,160926,316],{"class":309},[29,160928,160929],{"class":31,"line":1850},[29,160930,31756],{"class":305},[29,160932,160933,160935],{"class":31,"line":1855},[29,160934,158151],{"class":305},[29,160936,3914],{"class":309},[29,160938,160939,160941,160943,160945],{"class":31,"line":1869},[29,160940,32580],{"class":39},[29,160942,310],{"class":309},[29,160944,153343],{"class":103},[29,160946,316],{"class":309},[171,160948,160949,160950,160952,160953,28514],{},"菜单类程序通常使用 ",[26,160951,159651],{},"，用户选择退出时 ",[26,160954,2228],{},[14,160956,160958],{"id":160957},"_414-易错点","4.14 易错点",[259,160960,160961,160966,160972,160980,160986],{},[178,160962,160963,160965],{},[26,160964,108792],{}," 循环必须更新控制变量。",[178,160967,160968,160971],{},[26,160969,160970],{},"range(1, 10)"," 不包含 10。",[178,160973,160974,160976,160977,160979],{},[26,160975,2228],{}," 结束整个循环，",[26,160978,154801],{}," 只跳过本轮。",[178,160981,160982,160983,160985],{},"嵌套循环中，",[26,160984,2228],{}," 只跳出当前所在的一层循环。",[178,160987,160988],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,160990,160992],{"id":160991},"_415-本章练习","4.15 本章练习",[259,160994,160995,160998,161001,161004,161007],{},[178,160996,160997],{},"输出 1 到 100。",[178,160999,161000],{},"计算 1 到 100 的偶数和。",[178,161002,161003],{},"输出 100 以内能被 3 和 5 同时整除的数。",[178,161005,161006],{},"编写猜数字游戏，限制最多猜 7 次。",[178,161008,161009],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[223,161011,161012],{},"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":24,"searchDepth":43,"depth":43,"links":161014},[161015,161016,161017,161018,161019,161023,161024,161025,161026,161027,161028,161029,161030,161031,161032],{"id":159271,"depth":43,"text":159272},{"id":159301,"depth":43,"text":159302},{"id":159390,"depth":43,"text":159391},{"id":159484,"depth":43,"text":159485},{"id":159658,"depth":43,"text":159659,"children":161020},[161021,161022],{"id":159662,"depth":51,"text":159663},{"id":159726,"depth":51,"text":159727},{"id":159790,"depth":43,"text":159791},{"id":159885,"depth":43,"text":159886},{"id":159994,"depth":43,"text":159995},{"id":160190,"depth":43,"text":160191},{"id":160275,"depth":43,"text":160276},{"id":160414,"depth":43,"text":160415},{"id":160594,"depth":43,"text":160595},{"id":160743,"depth":43,"text":160744},{"id":160957,"depth":43,"text":160958},{"id":160991,"depth":43,"text":160992},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159263,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161039,"title":161040,"body":161041,"description":230,"extension":231,"meta":163046,"navigation":233,"path":163047,"seo":163048,"stem":163049,"__hash__":163050},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161042,"toc":163026},[161043,161046,161050,161053,161056,161070,161073,161087,161091,161093,161112,161114,161161,161163,161177,161181,161255,161258,161262,161265,161324,161332,161335,161388,161391,161395,161400,161455,161463,161513,161517,161522,161530,161629,161635,161639,161644,161647,161658,161699,161712,161716,161719,161755,161758,161771,161774,161834,161838,161842,161845,161896,161900,161903,161950,161956,162022,162025,162029,162032,162148,162151,162155,162158,162264,162268,162271,162309,162312,162354,162357,162417,162420,162424,162888,162891,162895,162922,162928,162989,162993,163023],[10,161044,161040],{"id":161045},"_5-函数基础",[14,161047,161049],{"id":161048},"_51-为什么需要函数","5.1 为什么需要函数",[171,161051,161052],{},"函数用于封装一段可以重复使用的代码。",[171,161054,161055],{},"不使用函数的问题：",[259,161057,161058,161061,161064,161067],{},[178,161059,161060],{},"重复代码多。",[178,161062,161063],{},"修改逻辑时容易漏改。",[178,161065,161066],{},"主流程不清晰。",[178,161068,161069],{},"程序越写越长，难以维护。",[171,161071,161072],{},"使用函数后的好处：",[259,161074,161075,161078,161081,161084],{},[178,161076,161077],{},"提高复用性。",[178,161079,161080],{},"提高可读性。",[178,161082,161083],{},"便于调试。",[178,161085,161086],{},"便于分工。",[14,161088,161090],{"id":161089},"_52-函数定义","5.2 函数定义",[171,161092,5356],{},[19,161094,161096],{"className":30507,"code":161095,"language":30509,"meta":24,"style":24},"def 函数名():\n    函数体\n",[26,161097,161098,161107],{"__ignoreMap":24},[29,161099,161100,161102,161105],{"class":31,"line":32},[29,161101,32076],{"class":305},[29,161103,161104],{"class":35}," 函数名",[29,161106,32082],{"class":309},[29,161108,161109],{"class":31,"line":43},[29,161110,161111],{"class":309},"    函数体\n",[171,161113,15310],{},[19,161115,161117],{"className":30507,"code":161116,"language":30509,"meta":24,"style":24},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[26,161118,161119,161128,161138,161148,161152,161156],{"__ignoreMap":24},[29,161120,161121,161123,161126],{"class":31,"line":32},[29,161122,32076],{"class":305},[29,161124,161125],{"class":35}," say_hello",[29,161127,32082],{"class":309},[29,161129,161130,161132,161134,161136],{"class":31,"line":43},[29,161131,31428],{"class":39},[29,161133,310],{"class":309},[29,161135,6019],{"class":103},[29,161137,316],{"class":309},[29,161139,161140,161142,161144,161146],{"class":31,"line":51},[29,161141,31428],{"class":39},[29,161143,310],{"class":309},[29,161145,146768],{"class":103},[29,161147,316],{"class":309},[29,161149,161150],{"class":31,"line":59},[29,161151,2575],{"emptyLinePlaceholder":233},[29,161153,161154],{"class":31,"line":67},[29,161155,2575],{"emptyLinePlaceholder":233},[29,161157,161158],{"class":31,"line":75},[29,161159,161160],{"class":309},"say_hello()\n",[171,161162,9200],{},[259,161164,161165,161168,161171,161174],{},[178,161166,161167],{},"函数必须先定义，再调用。",[178,161169,161170],{},"函数名遵循变量命名规则。",[178,161172,161173],{},"函数体需要缩进。",[178,161175,161176],{},"函数不调用就不会执行。",[14,161178,161180],{"id":161179},"_53-函数调用","5.3 函数调用",[19,161182,161184],{"className":30507,"code":161183,"language":30509,"meta":24,"style":24},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[26,161185,161186,161195,161206,161217,161228,161238,161242,161246,161251],{"__ignoreMap":24},[29,161187,161188,161190,161193],{"class":31,"line":32},[29,161189,32076],{"class":305},[29,161191,161192],{"class":35}," print_menu",[29,161194,32082],{"class":309},[29,161196,161197,161199,161201,161204],{"class":31,"line":43},[29,161198,31428],{"class":39},[29,161200,310],{"class":309},[29,161202,161203],{"class":103},"\"1. 查询\"",[29,161205,316],{"class":309},[29,161207,161208,161210,161212,161215],{"class":31,"line":51},[29,161209,31428],{"class":39},[29,161211,310],{"class":309},[29,161213,161214],{"class":103},"\"2. 添加\"",[29,161216,316],{"class":309},[29,161218,161219,161221,161223,161226],{"class":31,"line":59},[29,161220,31428],{"class":39},[29,161222,310],{"class":309},[29,161224,161225],{"class":103},"\"3. 删除\"",[29,161227,316],{"class":309},[29,161229,161230,161232,161234,161236],{"class":31,"line":67},[29,161231,31428],{"class":39},[29,161233,310],{"class":309},[29,161235,160810],{"class":103},[29,161237,316],{"class":309},[29,161239,161240],{"class":31,"line":75},[29,161241,2575],{"emptyLinePlaceholder":233},[29,161243,161244],{"class":31,"line":83},[29,161245,2575],{"emptyLinePlaceholder":233},[29,161247,161248],{"class":31,"line":158},[29,161249,161250],{"class":309},"print_menu()\n",[29,161252,161253],{"class":31,"line":166},[29,161254,161250],{"class":309},[171,161256,161257],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161259,161261],{"id":161260},"_54-参数","5.4 参数",[171,161263,161264],{},"参数用于向函数传递数据。",[19,161266,161268],{"className":30507,"code":161267,"language":30509,"meta":24,"style":24},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[26,161269,161270,161279,161299,161303,161307,161316],{"__ignoreMap":24},[29,161271,161272,161274,161276],{"class":31,"line":32},[29,161273,32076],{"class":305},[29,161275,161125],{"class":35},[29,161277,161278],{"class":309},"(name):\n",[29,161280,161281,161283,161285,161287,161289,161291,161293,161295,161297],{"class":31,"line":43},[29,161282,31428],{"class":39},[29,161284,310],{"class":309},[29,161286,361],{"class":305},[29,161288,157183],{"class":103},[29,161290,1204],{"class":39},[29,161292,79939],{"class":309},[29,161294,1254],{"class":39},[29,161296,559],{"class":103},[29,161298,316],{"class":309},[29,161300,161301],{"class":31,"line":51},[29,161302,2575],{"emptyLinePlaceholder":233},[29,161304,161305],{"class":31,"line":59},[29,161306,2575],{"emptyLinePlaceholder":233},[29,161308,161309,161312,161314],{"class":31,"line":67},[29,161310,161311],{"class":309},"say_hello(",[29,161313,150017],{"class":103},[29,161315,316],{"class":309},[29,161317,161318,161320,161322],{"class":31,"line":75},[29,161319,161311],{"class":309},[29,161321,151065],{"class":103},[29,161323,316],{"class":309},[171,161325,161326,161328,161329,161331],{},[26,161327,79939],{}," 是形参，",[26,161330,150017],{}," 是实参。",[171,161333,161334],{},"多个参数：",[19,161336,161338],{"className":30507,"code":161337,"language":30509,"meta":24,"style":24},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[26,161339,161340,161348,161361,161367,161371,161375],{"__ignoreMap":24},[29,161341,161342,161344,161346],{"class":31,"line":32},[29,161343,32076],{"class":305},[29,161345,5384],{"class":35},[29,161347,151222],{"class":309},[29,161349,161350,161353,161355,161357,161359],{"class":31,"line":43},[29,161351,161352],{"class":309},"    result ",[29,161354,355],{"class":305},[29,161356,11044],{"class":309},[29,161358,789],{"class":305},[29,161360,151233],{"class":309},[29,161362,161363,161365],{"class":31,"line":51},[29,161364,31428],{"class":39},[29,161366,76714],{"class":309},[29,161368,161369],{"class":31,"line":59},[29,161370,2575],{"emptyLinePlaceholder":233},[29,161372,161373],{"class":31,"line":67},[29,161374,2575],{"emptyLinePlaceholder":233},[29,161376,161377,161380,161382,161384,161386],{"class":31,"line":75},[29,161378,161379],{"class":309},"add(",[29,161381,754],{"class":39},[29,161383,12610],{"class":309},[29,161385,1008],{"class":39},[29,161387,316],{"class":309},[171,161389,161390],{},"调用时参数数量必须匹配。",[14,161392,161394],{"id":161393},"_55-返回值","5.5 返回值",[171,161396,161397,161399],{},[26,161398,17221],{}," 用于把函数内部的结果返回给调用者。",[19,161401,161403],{"className":30507,"code":161402,"language":30509,"meta":24,"style":24},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[26,161404,161405,161413,161423,161427,161431,161449],{"__ignoreMap":24},[29,161406,161407,161409,161411],{"class":31,"line":32},[29,161408,32076],{"class":305},[29,161410,5384],{"class":35},[29,161412,151222],{"class":309},[29,161414,161415,161417,161419,161421],{"class":31,"line":43},[29,161416,4265],{"class":305},[29,161418,11044],{"class":309},[29,161420,789],{"class":305},[29,161422,151233],{"class":309},[29,161424,161425],{"class":31,"line":51},[29,161426,2575],{"emptyLinePlaceholder":233},[29,161428,161429],{"class":31,"line":59},[29,161430,2575],{"emptyLinePlaceholder":233},[29,161432,161433,161436,161438,161441,161443,161445,161447],{"class":31,"line":67},[29,161434,161435],{"class":309},"result ",[29,161437,355],{"class":305},[29,161439,161440],{"class":309}," add(",[29,161442,754],{"class":39},[29,161444,12610],{"class":309},[29,161446,1008],{"class":39},[29,161448,316],{"class":309},[29,161450,161451,161453],{"class":31,"line":75},[29,161452,30544],{"class":39},[29,161454,76714],{"class":309},[171,161456,161457,161458,161460,161461,28514],{},"如果函数没有写 ",[26,161459,17221],{},"，默认返回 ",[26,161462,95815],{},[19,161464,161466],{"className":30507,"code":161465,"language":30509,"meta":24,"style":24},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[26,161467,161468,161476,161486,161490,161494,161503],{"__ignoreMap":24},[29,161469,161470,161472,161474],{"class":31,"line":32},[29,161471,32076],{"class":305},[29,161473,161125],{"class":35},[29,161475,32082],{"class":309},[29,161477,161478,161480,161482,161484],{"class":31,"line":43},[29,161479,31428],{"class":39},[29,161481,310],{"class":309},[29,161483,6019],{"class":103},[29,161485,316],{"class":309},[29,161487,161488],{"class":31,"line":51},[29,161489,2575],{"emptyLinePlaceholder":233},[29,161491,161492],{"class":31,"line":59},[29,161493,2575],{"emptyLinePlaceholder":233},[29,161495,161496,161498,161500],{"class":31,"line":67},[29,161497,161435],{"class":309},[29,161499,355],{"class":305},[29,161501,161502],{"class":309}," say_hello()\n",[29,161504,161505,161507,161510],{"class":31,"line":75},[29,161506,30544],{"class":39},[29,161508,161509],{"class":309},"(result)  ",[29,161511,161512],{"class":367},"# None\n",[14,161514,161516],{"id":161515},"_56-return的作用","5.6 return的作用",[171,161518,161519,161521],{},[26,161520,17221],{}," 有两个作用：",[259,161523,161524,161527],{},[178,161525,161526],{},"返回结果。",[178,161528,161529],{},"结束函数。",[19,161531,161533],{"className":30507,"code":161532,"language":30509,"meta":24,"style":24},"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",[26,161534,161535,161545,161557,161564,161568,161580,161587,161591,161598,161602,161606,161617],{"__ignoreMap":24},[29,161536,161537,161539,161542],{"class":31,"line":32},[29,161538,32076],{"class":305},[29,161540,161541],{"class":35}," check_age",[29,161543,161544],{"class":309},"(age):\n",[29,161546,161547,161549,161551,161553,161555],{"class":31,"line":43},[29,161548,3276],{"class":305},[29,161550,15882],{"class":309},[29,161552,1218],{"class":305},[29,161554,4268],{"class":39},[29,161556,3914],{"class":309},[29,161558,161559,161561],{"class":31,"line":51},[29,161560,14927],{"class":305},[29,161562,161563],{"class":103}," \"年龄不合法\"\n",[29,161565,161566],{"class":31,"line":59},[29,161567,2575],{"emptyLinePlaceholder":233},[29,161569,161570,161572,161574,161576,161578],{"class":31,"line":67},[29,161571,3276],{"class":305},[29,161573,15882],{"class":309},[29,161575,1886],{"class":305},[29,161577,156414],{"class":39},[29,161579,3914],{"class":309},[29,161581,161582,161584],{"class":31,"line":75},[29,161583,14927],{"class":305},[29,161585,161586],{"class":103}," \"成年人\"\n",[29,161588,161589],{"class":31,"line":83},[29,161590,2575],{"emptyLinePlaceholder":233},[29,161592,161593,161595],{"class":31,"line":158},[29,161594,4265],{"class":305},[29,161596,161597],{"class":103}," \"未成年人\"\n",[29,161599,161600],{"class":31,"line":166},[29,161601,2575],{"emptyLinePlaceholder":233},[29,161603,161604],{"class":31,"line":1505},[29,161605,2575],{"emptyLinePlaceholder":233},[29,161607,161608,161610,161613,161615],{"class":31,"line":1788},[29,161609,30544],{"class":39},[29,161611,161612],{"class":309},"(check_age(",[29,161614,1008],{"class":39},[29,161616,30626],{"class":309},[29,161618,161619,161621,161623,161625,161627],{"class":31,"line":1793},[29,161620,30544],{"class":39},[29,161622,161612],{"class":309},[29,161624,840],{"class":305},[29,161626,525],{"class":39},[29,161628,30626],{"class":309},[171,161630,161631,161632,161634],{},"函数执行到 ",[26,161633,17221],{}," 后，后面的代码不会继续执行。",[14,161636,161638],{"id":161637},"_57-none","5.7 None",[171,161640,161641,161643],{},[26,161642,95815],{}," 表示空值或没有结果。",[171,161645,161646],{},"常见使用场景：",[259,161648,161649,161652,161655],{},[178,161650,161651],{},"函数没有返回值。",[178,161653,161654],{},"变量暂时没有具体值。",[178,161656,161657],{},"表示查询不到结果。",[19,161659,161661],{"className":30507,"code":161660,"language":30509,"meta":24,"style":24},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[26,161662,161663,161671,161675,161688],{"__ignoreMap":24},[29,161664,161665,161667,161669],{"class":31,"line":32},[29,161666,161435],{"class":309},[29,161668,355],{"class":305},[29,161670,152301],{"class":39},[29,161672,161673],{"class":31,"line":43},[29,161674,2575],{"emptyLinePlaceholder":233},[29,161676,161677,161679,161682,161684,161686],{"class":31,"line":51},[29,161678,1707],{"class":305},[29,161680,161681],{"class":309}," result ",[29,161683,39056],{"class":305},[29,161685,39062],{"class":39},[29,161687,3914],{"class":309},[29,161689,161690,161692,161694,161697],{"class":31,"line":59},[29,161691,31428],{"class":39},[29,161693,310],{"class":309},[29,161695,161696],{"class":103},"\"没有数据\"",[29,161698,316],{"class":309},[171,161700,161701,161702,161704,161705,161708,161709,28514],{},"判断 ",[26,161703,95815],{}," 推荐使用 ",[26,161706,161707],{},"is None","，不要写成 ",[26,161710,161711],{},"== None",[14,161713,161715],{"id":161714},"_58-函数文档字符串","5.8 函数文档字符串",[171,161717,161718],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[19,161720,161722],{"className":30507,"code":161721,"language":30509,"meta":24,"style":24},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[26,161723,161724,161734,161739],{"__ignoreMap":24},[29,161725,161726,161728,161731],{"class":31,"line":32},[29,161727,32076],{"class":305},[29,161729,161730],{"class":35}," calculate_bmi",[29,161732,161733],{"class":309},"(weight, height):\n",[29,161735,161736],{"class":31,"line":43},[29,161737,161738],{"class":103},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[29,161740,161741,161743,161746,161748,161751,161753],{"class":31,"line":51},[29,161742,4265],{"class":305},[29,161744,161745],{"class":309}," weight ",[29,161747,892],{"class":305},[29,161749,161750],{"class":309}," height ",[29,161752,10836],{"class":305},[29,161754,47852],{"class":39},[171,161756,161757],{},"查看说明：",[19,161759,161761],{"className":30507,"code":161760,"language":30509,"meta":24,"style":24},"help(calculate_bmi)\n",[26,161762,161763],{"__ignoreMap":24},[29,161764,161765,161768],{"class":31,"line":32},[29,161766,161767],{"class":39},"help",[29,161769,161770],{"class":309},"(calculate_bmi)\n",[171,161772,161773],{},"较完整的写法：",[19,161775,161777],{"className":30507,"code":161776,"language":30509,"meta":24,"style":24},"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",[26,161778,161779,161787,161792,161797,161801,161806,161811,161816,161820],{"__ignoreMap":24},[29,161780,161781,161783,161785],{"class":31,"line":32},[29,161782,32076],{"class":305},[29,161784,161730],{"class":35},[29,161786,161733],{"class":309},[29,161788,161789],{"class":31,"line":43},[29,161790,161791],{"class":103},"    \"\"\"\n",[29,161793,161794],{"class":31,"line":51},[29,161795,161796],{"class":103},"    计算BMI。\n",[29,161798,161799],{"class":31,"line":59},[29,161800,2575],{"emptyLinePlaceholder":233},[29,161802,161803],{"class":31,"line":67},[29,161804,161805],{"class":103},"    :param weight: 体重，单位kg\n",[29,161807,161808],{"class":31,"line":75},[29,161809,161810],{"class":103},"    :param height: 身高，单位m\n",[29,161812,161813],{"class":31,"line":83},[29,161814,161815],{"class":103},"    :return: BMI数值\n",[29,161817,161818],{"class":31,"line":158},[29,161819,161791],{"class":103},[29,161821,161822,161824,161826,161828,161830,161832],{"class":31,"line":166},[29,161823,4265],{"class":305},[29,161825,161745],{"class":309},[29,161827,892],{"class":305},[29,161829,161750],{"class":309},[29,161831,10836],{"class":305},[29,161833,47852],{"class":39},[14,161835,161837],{"id":161836},"_59-变量作用域","5.9 变量作用域",[275,161839,161841],{"id":161840},"_591-局部变量","5.9.1 局部变量",[171,161843,161844],{},"在函数内部定义的变量，只能在函数内部使用。",[19,161846,161848],{"className":30507,"code":161847,"language":30509,"meta":24,"style":24},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[26,161849,161850,161859,161867,161873,161877,161881,161886],{"__ignoreMap":24},[29,161851,161852,161854,161857],{"class":31,"line":32},[29,161853,32076],{"class":305},[29,161855,161856],{"class":35}," test",[29,161858,32082],{"class":309},[29,161860,161861,161863,161865],{"class":31,"line":43},[29,161862,45722],{"class":309},[29,161864,355],{"class":305},[29,161866,58557],{"class":39},[29,161868,161869,161871],{"class":31,"line":51},[29,161870,31428],{"class":39},[29,161872,323],{"class":309},[29,161874,161875],{"class":31,"line":59},[29,161876,2575],{"emptyLinePlaceholder":233},[29,161878,161879],{"class":31,"line":67},[29,161880,2575],{"emptyLinePlaceholder":233},[29,161882,161883],{"class":31,"line":75},[29,161884,161885],{"class":309},"test()\n",[29,161887,161888,161890,161893],{"class":31,"line":83},[29,161889,30544],{"class":39},[29,161891,161892],{"class":309},"(num)  ",[29,161894,161895],{"class":367},"# 报错\n",[275,161897,161899],{"id":161898},"_592-全局变量","5.9.2 全局变量",[171,161901,161902],{},"在函数外部定义的变量，可以在函数内部读取。",[19,161904,161906],{"className":30507,"code":161905,"language":30509,"meta":24,"style":24},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[26,161907,161908,161916,161920,161924,161932,161938,161942,161946],{"__ignoreMap":24},[29,161909,161910,161912,161914],{"class":31,"line":32},[29,161911,146665],{"class":309},[29,161913,355],{"class":305},[29,161915,149482],{"class":103},[29,161917,161918],{"class":31,"line":43},[29,161919,2575],{"emptyLinePlaceholder":233},[29,161921,161922],{"class":31,"line":51},[29,161923,2575],{"emptyLinePlaceholder":233},[29,161925,161926,161928,161930],{"class":31,"line":59},[29,161927,32076],{"class":305},[29,161929,161125],{"class":35},[29,161931,32082],{"class":309},[29,161933,161934,161936],{"class":31,"line":67},[29,161935,31428],{"class":39},[29,161937,150789],{"class":309},[29,161939,161940],{"class":31,"line":75},[29,161941,2575],{"emptyLinePlaceholder":233},[29,161943,161944],{"class":31,"line":83},[29,161945,2575],{"emptyLinePlaceholder":233},[29,161947,161948],{"class":31,"line":158},[29,161949,161160],{"class":309},[171,161951,161952,161953,28514],{},"如果要在函数内部修改全局变量，需要 ",[26,161954,161955],{},"global",[19,161957,161959],{"className":30507,"code":161958,"language":30509,"meta":24,"style":24},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[26,161960,161961,161969,161973,161977,161986,161994,162002,162006,162010,162015],{"__ignoreMap":24},[29,161962,161963,161965,161967],{"class":31,"line":32},[29,161964,146820],{"class":309},[29,161966,355],{"class":305},[29,161968,47462],{"class":39},[29,161970,161971],{"class":31,"line":43},[29,161972,2575],{"emptyLinePlaceholder":233},[29,161974,161975],{"class":31,"line":51},[29,161976,2575],{"emptyLinePlaceholder":233},[29,161978,161979,161981,161984],{"class":31,"line":59},[29,161980,32076],{"class":305},[29,161982,161983],{"class":35}," add_count",[29,161985,32082],{"class":309},[29,161987,161988,161991],{"class":31,"line":67},[29,161989,161990],{"class":305},"    global",[29,161992,161993],{"class":309}," count\n",[29,161995,161996,161998,162000],{"class":31,"line":75},[29,161997,159562],{"class":309},[29,161999,9652],{"class":305},[29,162001,55828],{"class":39},[29,162003,162004],{"class":31,"line":83},[29,162005,2575],{"emptyLinePlaceholder":233},[29,162007,162008],{"class":31,"line":158},[29,162009,2575],{"emptyLinePlaceholder":233},[29,162011,162012],{"class":31,"line":166},[29,162013,162014],{"class":309},"add_count()\n",[29,162016,162017,162019],{"class":31,"line":1505},[29,162018,30544],{"class":39},[29,162020,162021],{"class":309},"(count)\n",[171,162023,162024],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162026,162028],{"id":162027},"_510-函数嵌套调用","5.10 函数嵌套调用",[171,162030,162031],{},"一个函数中可以调用另一个函数。",[19,162033,162035],{"className":30507,"code":162034,"language":30509,"meta":24,"style":24},"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",[26,162036,162037,162046,162060,162064,162068,162077,162082,162102,162123,162127,162131,162135],{"__ignoreMap":24},[29,162038,162039,162041,162044],{"class":31,"line":32},[29,162040,32076],{"class":305},[29,162042,162043],{"class":35}," print_line",[29,162045,32082],{"class":309},[29,162047,162048,162050,162052,162054,162056,162058],{"class":31,"line":43},[29,162049,31428],{"class":39},[29,162051,310],{"class":309},[29,162053,32612],{"class":103},[29,162055,6693],{"class":305},[29,162057,78794],{"class":39},[29,162059,316],{"class":309},[29,162061,162062],{"class":31,"line":51},[29,162063,2575],{"emptyLinePlaceholder":233},[29,162065,162066],{"class":31,"line":59},[29,162067,2575],{"emptyLinePlaceholder":233},[29,162069,162070,162072,162075],{"class":31,"line":67},[29,162071,32076],{"class":305},[29,162073,162074],{"class":35}," print_info",[29,162076,149504],{"class":309},[29,162078,162079],{"class":31,"line":75},[29,162080,162081],{"class":309},"    print_line()\n",[29,162083,162084,162086,162088,162090,162092,162094,162096,162098,162100],{"class":31,"line":83},[29,162085,31428],{"class":39},[29,162087,310],{"class":309},[29,162089,361],{"class":305},[29,162091,156811],{"class":103},[29,162093,1204],{"class":39},[29,162095,79939],{"class":309},[29,162097,1254],{"class":39},[29,162099,559],{"class":103},[29,162101,316],{"class":309},[29,162103,162104,162106,162108,162110,162113,162115,162117,162119,162121],{"class":31,"line":158},[29,162105,31428],{"class":39},[29,162107,310],{"class":309},[29,162109,361],{"class":305},[29,162111,162112],{"class":103},"\"年龄:",[29,162114,1204],{"class":39},[29,162116,70350],{"class":309},[29,162118,1254],{"class":39},[29,162120,559],{"class":103},[29,162122,316],{"class":309},[29,162124,162125],{"class":31,"line":166},[29,162126,162081],{"class":309},[29,162128,162129],{"class":31,"line":1505},[29,162130,2575],{"emptyLinePlaceholder":233},[29,162132,162133],{"class":31,"line":1788},[29,162134,2575],{"emptyLinePlaceholder":233},[29,162136,162137,162140,162142,162144,162146],{"class":31,"line":1793},[29,162138,162139],{"class":309},"print_info(",[29,162141,150017],{"class":103},[29,162143,12610],{"class":309},[29,162145,958],{"class":39},[29,162147,316],{"class":309},[171,162149,162150],{},"这种方式可以把小功能组合成大功能。",[14,162152,162154],{"id":162153},"_511-参数检查","5.11 参数检查",[171,162156,162157],{},"函数内部可以检查参数是否合法。",[19,162159,162161],{"className":30507,"code":162160,"language":30509,"meta":24,"style":24},"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",[26,162162,162163,162172,162184,162190,162200,162204,162208,162225,162229,162241,162252,162258],{"__ignoreMap":24},[29,162164,162165,162167,162170],{"class":31,"line":32},[29,162166,32076],{"class":305},[29,162168,162169],{"class":35}," divide",[29,162171,151222],{"class":309},[29,162173,162174,162176,162178,162180,162182],{"class":31,"line":43},[29,162175,3276],{"class":305},[29,162177,11057],{"class":309},[29,162179,3124],{"class":305},[29,162181,4268],{"class":39},[29,162183,3914],{"class":309},[29,162185,162186,162188],{"class":31,"line":51},[29,162187,14927],{"class":305},[29,162189,152301],{"class":39},[29,162191,162192,162194,162196,162198],{"class":31,"line":59},[29,162193,4265],{"class":305},[29,162195,11044],{"class":309},[29,162197,892],{"class":305},[29,162199,151233],{"class":309},[29,162201,162202],{"class":31,"line":67},[29,162203,2575],{"emptyLinePlaceholder":233},[29,162205,162206],{"class":31,"line":75},[29,162207,2575],{"emptyLinePlaceholder":233},[29,162209,162210,162212,162214,162217,162219,162221,162223],{"class":31,"line":83},[29,162211,161435],{"class":309},[29,162213,355],{"class":305},[29,162215,162216],{"class":309}," divide(",[29,162218,754],{"class":39},[29,162220,12610],{"class":309},[29,162222,499],{"class":39},[29,162224,316],{"class":309},[29,162226,162227],{"class":31,"line":158},[29,162228,2575],{"emptyLinePlaceholder":233},[29,162230,162231,162233,162235,162237,162239],{"class":31,"line":166},[29,162232,1707],{"class":305},[29,162234,161681],{"class":309},[29,162236,39056],{"class":305},[29,162238,39062],{"class":39},[29,162240,3914],{"class":309},[29,162242,162243,162245,162247,162250],{"class":31,"line":1505},[29,162244,31428],{"class":39},[29,162246,310],{"class":309},[29,162248,162249],{"class":103},"\"除数不能为0\"",[29,162251,316],{"class":309},[29,162253,162254,162256],{"class":31,"line":1788},[29,162255,1877],{"class":305},[29,162257,3914],{"class":309},[29,162259,162260,162262],{"class":31,"line":1793},[29,162261,31428],{"class":39},[29,162263,76714],{"class":309},[14,162265,162267],{"id":162266},"_512-类型提示","5.12 类型提示",[171,162269,162270],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[19,162272,162274],{"className":30507,"code":162273,"language":30509,"meta":24,"style":24},"def add(a: int, b: int) -> int:\n    return a + b\n",[26,162275,162276,162299],{"__ignoreMap":24},[29,162277,162278,162280,162282,162285,162287,162290,162292,162295,162297],{"class":31,"line":32},[29,162279,32076],{"class":305},[29,162281,5384],{"class":35},[29,162283,162284],{"class":309},"(a: ",[29,162286,313],{"class":39},[29,162288,162289],{"class":309},", b: ",[29,162291,313],{"class":39},[29,162293,162294],{"class":309},") -> ",[29,162296,313],{"class":39},[29,162298,3914],{"class":309},[29,162300,162301,162303,162305,162307],{"class":31,"line":43},[29,162302,4265],{"class":305},[29,162304,11044],{"class":309},[29,162306,789],{"class":305},[29,162308,151233],{"class":309},[171,162310,162311],{},"字符串参数：",[19,162313,162315],{"className":30507,"code":162314,"language":30509,"meta":24,"style":24},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[26,162316,162317,162334],{"__ignoreMap":24},[29,162318,162319,162321,162323,162326,162328,162330,162332],{"class":31,"line":32},[29,162320,32076],{"class":305},[29,162322,161125],{"class":35},[29,162324,162325],{"class":309},"(name: ",[29,162327,1477],{"class":39},[29,162329,162294],{"class":309},[29,162331,95815],{"class":39},[29,162333,3914],{"class":309},[29,162335,162336,162338,162340,162342,162344,162346,162348,162350,162352],{"class":31,"line":43},[29,162337,31428],{"class":39},[29,162339,310],{"class":309},[29,162341,361],{"class":305},[29,162343,157183],{"class":103},[29,162345,1204],{"class":39},[29,162347,79939],{"class":309},[29,162349,1254],{"class":39},[29,162351,559],{"class":103},[29,162353,316],{"class":309},[171,162355,162356],{},"列表参数：",[19,162358,162360],{"className":30507,"code":162359,"language":30509,"meta":24,"style":24},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[26,162361,162362,162381,162389,162401,162410],{"__ignoreMap":24},[29,162363,162364,162366,162369,162372,162374,162377,162379],{"class":31,"line":32},[29,162365,32076],{"class":305},[29,162367,162368],{"class":35}," get_total",[29,162370,162371],{"class":309},"(numbers: list[",[29,162373,313],{"class":39},[29,162375,162376],{"class":309},"]) -> ",[29,162378,313],{"class":39},[29,162380,3914],{"class":309},[29,162382,162383,162385,162387],{"class":31,"line":43},[29,162384,159436],{"class":309},[29,162386,355],{"class":305},[29,162388,47462],{"class":39},[29,162390,162391,162393,162396,162398],{"class":31,"line":51},[29,162392,3376],{"class":305},[29,162394,162395],{"class":309}," number ",[29,162397,26172],{"class":305},[29,162399,162400],{"class":309}," numbers:\n",[29,162402,162403,162405,162407],{"class":31,"line":59},[29,162404,160111],{"class":309},[29,162406,9652],{"class":305},[29,162408,162409],{"class":309}," number\n",[29,162411,162412,162414],{"class":31,"line":67},[29,162413,4265],{"class":305},[29,162415,162416],{"class":309}," total\n",[171,162418,162419],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162421,162423],{"id":162422},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[19,162425,162427],{"className":30507,"code":162426,"language":30509,"meta":24,"style":24},"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",[26,162428,162429,162439,162443,162447,162455,162466,162476,162486,162496,162506,162510,162514,162523,162545,162549,162553,162562,162568,162588,162600,162611,162615,162624,162635,162640,162644,162648,162657,162663,162682,162694,162704,162708,162719,162729,162733,162741,162752,162756,162760,162764,162772,162777,162791,162795,162807,162812,162824,162829,162841,162846,162858,162868,162872,162878],{"__ignoreMap":24},[29,162430,162431,162434,162436],{"class":31,"line":32},[29,162432,162433],{"class":309},"balance ",[29,162435,355],{"class":305},[29,162437,162438],{"class":39}," 1000\n",[29,162440,162441],{"class":31,"line":43},[29,162442,2575],{"emptyLinePlaceholder":233},[29,162444,162445],{"class":31,"line":51},[29,162446,2575],{"emptyLinePlaceholder":233},[29,162448,162449,162451,162453],{"class":31,"line":59},[29,162450,32076],{"class":305},[29,162452,152162],{"class":35},[29,162454,32082],{"class":309},[29,162456,162457,162459,162461,162464],{"class":31,"line":67},[29,162458,31428],{"class":39},[29,162460,310],{"class":309},[29,162462,162463],{"class":103},"\"====== ATM ======\"",[29,162465,316],{"class":309},[29,162467,162468,162470,162472,162474],{"class":31,"line":75},[29,162469,31428],{"class":39},[29,162471,310],{"class":309},[29,162473,160777],{"class":103},[29,162475,316],{"class":309},[29,162477,162478,162480,162482,162484],{"class":31,"line":83},[29,162479,31428],{"class":39},[29,162481,310],{"class":309},[29,162483,160788],{"class":103},[29,162485,316],{"class":309},[29,162487,162488,162490,162492,162494],{"class":31,"line":158},[29,162489,31428],{"class":39},[29,162491,310],{"class":309},[29,162493,160799],{"class":103},[29,162495,316],{"class":309},[29,162497,162498,162500,162502,162504],{"class":31,"line":166},[29,162499,31428],{"class":39},[29,162501,310],{"class":309},[29,162503,160810],{"class":103},[29,162505,316],{"class":309},[29,162507,162508],{"class":31,"line":1505},[29,162509,2575],{"emptyLinePlaceholder":233},[29,162511,162512],{"class":31,"line":1788},[29,162513,2575],{"emptyLinePlaceholder":233},[29,162515,162516,162518,162521],{"class":31,"line":1793},[29,162517,32076],{"class":305},[29,162519,162520],{"class":35}," show_balance",[29,162522,32082],{"class":309},[29,162524,162525,162527,162529,162531,162534,162536,162539,162541,162543],{"class":31,"line":1799},[29,162526,31428],{"class":39},[29,162528,310],{"class":309},[29,162530,361],{"class":305},[29,162532,162533],{"class":103},"\"当前余额:",[29,162535,1204],{"class":39},[29,162537,162538],{"class":309},"balance",[29,162540,1254],{"class":39},[29,162542,157141],{"class":103},[29,162544,316],{"class":309},[29,162546,162547],{"class":31,"line":1804},[29,162548,2575],{"emptyLinePlaceholder":233},[29,162550,162551],{"class":31,"line":1818},[29,162552,2575],{"emptyLinePlaceholder":233},[29,162554,162555,162557,162560],{"class":31,"line":1823},[29,162556,32076],{"class":305},[29,162558,162559],{"class":35}," save_money",[29,162561,32082],{"class":309},[29,162563,162564,162566],{"class":31,"line":1829},[29,162565,161990],{"class":305},[29,162567,150228],{"class":309},[29,162569,162570,162573,162575,162577,162579,162581,162583,162586],{"class":31,"line":1850},[29,162571,162572],{"class":309},"    money ",[29,162574,355],{"class":305},[29,162576,109926],{"class":39},[29,162578,310],{"class":309},[29,162580,53950],{"class":39},[29,162582,310],{"class":309},[29,162584,162585],{"class":103},"\"请输入存款金额:\"",[29,162587,30626],{"class":309},[29,162589,162590,162592,162594,162596,162598],{"class":31,"line":1855},[29,162591,3276],{"class":305},[29,162593,150271],{"class":309},[29,162595,1764],{"class":305},[29,162597,4268],{"class":39},[29,162599,3914],{"class":309},[29,162601,162602,162604,162606,162609],{"class":31,"line":1869},[29,162603,32580],{"class":39},[29,162605,310],{"class":309},[29,162607,162608],{"class":103},"\"金额必须大于0\"",[29,162610,316],{"class":309},[29,162612,162613],{"class":31,"line":1874},[29,162614,152490],{"class":305},[29,162616,162617,162620,162622],{"class":31,"line":1903},[29,162618,162619],{"class":309},"    balance ",[29,162621,9652],{"class":305},[29,162623,150304],{"class":309},[29,162625,162626,162628,162630,162633],{"class":31,"line":1908},[29,162627,31428],{"class":39},[29,162629,310],{"class":309},[29,162631,162632],{"class":103},"\"存款成功\"",[29,162634,316],{"class":309},[29,162636,162637],{"class":31,"line":1925},[29,162638,162639],{"class":309},"    show_balance()\n",[29,162641,162642],{"class":31,"line":1930},[29,162643,2575],{"emptyLinePlaceholder":233},[29,162645,162646],{"class":31,"line":1935},[29,162647,2575],{"emptyLinePlaceholder":233},[29,162649,162650,162652,162655],{"class":31,"line":1940},[29,162651,32076],{"class":305},[29,162653,162654],{"class":35}," withdraw_money",[29,162656,32082],{"class":309},[29,162658,162659,162661],{"class":31,"line":1954},[29,162660,161990],{"class":305},[29,162662,150228],{"class":309},[29,162664,162665,162667,162669,162671,162673,162675,162677,162680],{"class":31,"line":1959},[29,162666,162572],{"class":309},[29,162668,355],{"class":305},[29,162670,109926],{"class":39},[29,162672,310],{"class":309},[29,162674,53950],{"class":39},[29,162676,310],{"class":309},[29,162678,162679],{"class":103},"\"请输入取款金额:\"",[29,162681,30626],{"class":309},[29,162683,162684,162686,162688,162690,162692],{"class":31,"line":2752},[29,162685,3276],{"class":305},[29,162687,150271],{"class":309},[29,162689,1764],{"class":305},[29,162691,4268],{"class":39},[29,162693,3914],{"class":309},[29,162695,162696,162698,162700,162702],{"class":31,"line":2766},[29,162697,32580],{"class":39},[29,162699,310],{"class":309},[29,162701,162608],{"class":103},[29,162703,316],{"class":309},[29,162705,162706],{"class":31,"line":2774},[29,162707,152490],{"class":305},[29,162709,162710,162712,162714,162716],{"class":31,"line":2779},[29,162711,3276],{"class":305},[29,162713,150271],{"class":309},[29,162715,1268],{"class":305},[29,162717,162718],{"class":309}," balance:\n",[29,162720,162721,162723,162725,162727],{"class":31,"line":2785},[29,162722,32580],{"class":39},[29,162724,310],{"class":309},[29,162726,150366],{"class":103},[29,162728,316],{"class":309},[29,162730,162731],{"class":31,"line":2791},[29,162732,152490],{"class":305},[29,162734,162735,162737,162739],{"class":31,"line":2796},[29,162736,162619],{"class":309},[29,162738,150381],{"class":305},[29,162740,150304],{"class":309},[29,162742,162743,162745,162747,162750],{"class":31,"line":8123},[29,162744,31428],{"class":39},[29,162746,310],{"class":309},[29,162748,162749],{"class":103},"\"取款成功\"",[29,162751,316],{"class":309},[29,162753,162754],{"class":31,"line":8147},[29,162755,162639],{"class":309},[29,162757,162758],{"class":31,"line":8152},[29,162759,2575],{"emptyLinePlaceholder":233},[29,162761,162762],{"class":31,"line":8158},[29,162763,2575],{"emptyLinePlaceholder":233},[29,162765,162766,162768,162770],{"class":31,"line":8185},[29,162767,108792],{"class":305},[29,162769,95421],{"class":39},[29,162771,3914],{"class":309},[29,162773,162774],{"class":31,"line":8190},[29,162775,162776],{"class":309},"    show_menu()\n",[29,162778,162779,162781,162783,162785,162787,162789],{"class":31,"line":8196},[29,162780,160821],{"class":309},[29,162782,355],{"class":305},[29,162784,60734],{"class":39},[29,162786,310],{"class":309},[29,162788,153202],{"class":103},[29,162790,316],{"class":309},[29,162792,162793],{"class":31,"line":8208},[29,162794,2575],{"emptyLinePlaceholder":233},[29,162796,162797,162799,162801,162803,162805],{"class":31,"line":8220},[29,162798,3276],{"class":305},[29,162800,153215],{"class":309},[29,162802,3124],{"class":305},[29,162804,153220],{"class":103},[29,162806,3914],{"class":309},[29,162808,162809],{"class":31,"line":8232},[29,162810,162811],{"class":309},"        show_balance()\n",[29,162813,162814,162816,162818,162820,162822],{"class":31,"line":9891},[29,162815,39422],{"class":305},[29,162817,153215],{"class":309},[29,162819,3124],{"class":305},[29,162821,153239],{"class":103},[29,162823,3914],{"class":309},[29,162825,162826],{"class":31,"line":9916},[29,162827,162828],{"class":309},"        save_money()\n",[29,162830,162831,162833,162835,162837,162839],{"class":31,"line":9939},[29,162832,39422],{"class":305},[29,162834,153215],{"class":309},[29,162836,3124],{"class":305},[29,162838,153257],{"class":103},[29,162840,3914],{"class":309},[29,162842,162843],{"class":31,"line":9963},[29,162844,162845],{"class":309},"        withdraw_money()\n",[29,162847,162848,162850,162852,162854,162856],{"class":31,"line":9968},[29,162849,39422],{"class":305},[29,162851,153215],{"class":309},[29,162853,3124],{"class":305},[29,162855,153311],{"class":103},[29,162857,3914],{"class":309},[29,162859,162860,162862,162864,162866],{"class":31,"line":9973},[29,162861,32580],{"class":39},[29,162863,310],{"class":309},[29,162865,153322],{"class":103},[29,162867,316],{"class":309},[29,162869,162870],{"class":31,"line":9978},[29,162871,31756],{"class":305},[29,162873,162874,162876],{"class":31,"line":9987},[29,162875,158151],{"class":305},[29,162877,3914],{"class":309},[29,162879,162880,162882,162884,162886],{"class":31,"line":9992},[29,162881,32580],{"class":39},[29,162883,310],{"class":309},[29,162885,153343],{"class":103},[29,162887,316],{"class":309},[171,162889,162890],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162892,162894],{"id":162893},"_514-易错点","5.14 易错点",[259,162896,162897,162900,162903,162908,162913,162916],{},[178,162898,162899],{},"函数定义后必须调用才会执行。",[178,162901,162902],{},"函数名后面有括号才是调用。",[178,162904,162905,162907],{},[26,162906,17221],{}," 后面的代码不会执行。",[178,162909,162910,162911,28514],{},"没有返回值的函数默认返回 ",[26,162912,95815],{},[178,162914,162915],{},"局部变量不能在函数外部访问。",[178,162917,162918,162919,162921],{},"不要滥用 ",[26,162920,161955],{},"，更好的方式是让函数返回新值。",[171,162923,162924,162925,162927],{},"例如不用 ",[26,162926,161955],{}," 改写存款：",[19,162929,162931],{"className":30507,"code":162930,"language":30509,"meta":24,"style":24},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[26,162932,162933,162942,162953,162957,162961,162969,162982],{"__ignoreMap":24},[29,162934,162935,162937,162939],{"class":31,"line":32},[29,162936,32076],{"class":305},[29,162938,162559],{"class":35},[29,162940,162941],{"class":309},"(balance, money):\n",[29,162943,162944,162946,162949,162951],{"class":31,"line":43},[29,162945,4265],{"class":305},[29,162947,162948],{"class":309}," balance ",[29,162950,789],{"class":305},[29,162952,150304],{"class":309},[29,162954,162955],{"class":31,"line":51},[29,162956,2575],{"emptyLinePlaceholder":233},[29,162958,162959],{"class":31,"line":59},[29,162960,2575],{"emptyLinePlaceholder":233},[29,162962,162963,162965,162967],{"class":31,"line":67},[29,162964,162433],{"class":309},[29,162966,355],{"class":305},[29,162968,162438],{"class":39},[29,162970,162971,162973,162975,162978,162980],{"class":31,"line":75},[29,162972,162433],{"class":309},[29,162974,355],{"class":305},[29,162976,162977],{"class":309}," save_money(balance, ",[29,162979,1898],{"class":39},[29,162981,316],{"class":309},[29,162983,162984,162986],{"class":31,"line":83},[29,162985,30544],{"class":39},[29,162987,162988],{"class":309},"(balance)\n",[14,162990,162992],{"id":162991},"_515-本章练习","5.15 本章练习",[259,162994,162995,163002,163008,163014,163020],{},[178,162996,162997,162998,163001],{},"定义函数 ",[26,162999,163000],{},"print_student(name, age)","，输出学生信息。",[178,163003,162997,163004,163007],{},[26,163005,163006],{},"get_max(a, b, c)","，返回三个数中的最大值。",[178,163009,162997,163010,163013],{},[26,163011,163012],{},"is_even(num)","，判断一个数是否为偶数。",[178,163015,162997,163016,163019],{},[26,163017,163018],{},"calculate_bmi(weight, height)","，返回 BMI。",[178,163021,163022],{},"把第 4 章的菜单程序拆分成多个函数。",[223,163024,163025],{},"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":24,"searchDepth":43,"depth":43,"links":163027},[163028,163029,163030,163031,163032,163033,163034,163035,163036,163040,163041,163042,163043,163044,163045],{"id":161048,"depth":43,"text":161049},{"id":161089,"depth":43,"text":161090},{"id":161179,"depth":43,"text":161180},{"id":161260,"depth":43,"text":161261},{"id":161393,"depth":43,"text":161394},{"id":161515,"depth":43,"text":161516},{"id":161637,"depth":43,"text":161638},{"id":161714,"depth":43,"text":161715},{"id":161836,"depth":43,"text":161837,"children":163037},[163038,163039],{"id":161840,"depth":51,"text":161841},{"id":161898,"depth":51,"text":161899},{"id":162027,"depth":43,"text":162028},{"id":162153,"depth":43,"text":162154},{"id":162266,"depth":43,"text":162267},{"id":162422,"depth":43,"text":162423},{"id":162893,"depth":43,"text":162894},{"id":162991,"depth":43,"text":162992},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161040,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163052,"title":163053,"body":163054,"description":230,"extension":231,"meta":166098,"navigation":233,"path":166099,"seo":166100,"stem":166101,"__hash__":166102},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163055,"toc":166079},[163056,163059,163063,163066,163069,163173,163176,163180,163183,163263,163266,163270,163273,163333,163336,163372,163375,163390,163394,163467,163470,163525,163528,163598,163601,163685,163695,163753,163757,163802,163805,163831,163834,163940,163944,163947,163989,163992,164056,164059,164063,164066,164127,164130,164160,164163,164201,164205,164208,164217,164220,164344,164347,164388,164392,164395,164406,164446,164449,164464,164469,164472,164539,164542,164632,164636,164639,164687,164690,164717,164719,164749,164752,164772,164775,164806,164809,164842,164846,164849,164873,164876,164900,164903,164927,164931,164934,165064,165067,165147,165150,165225,165229,165232,165282,165285,165327,165330,165354,165356,165380,165383,165438,165441,165507,165511,165514,165517,165555,165558,165611,165614,165660,165663,165696,165699,165703,166022,166026,166055,166059,166076],[10,163057,163053],{"id":163058},"_6-数据容器",[14,163060,163062],{"id":163061},"_61-什么是数据容器","6.1 什么是数据容器",[171,163064,163065],{},"数据容器用于一次保存多个数据。",[171,163067,163068],{},"常见容器：",[445,163070,163071,163088],{},[448,163072,163073],{},[451,163074,163075,163077,163080,163083,163086],{},[454,163076,25900],{},[454,163078,163079],{},"是否有序",[454,163081,163082],{},"是否可变",[454,163084,163085],{},"是否允许重复",[454,163087,27621],{},[492,163089,163090,163108,163124,163139,163156],{},[451,163091,163092,163095,163098,163101,163104],{},[497,163093,163094],{},"list列表",[497,163096,163097],{},"有序",[497,163099,163100],{},"可变",[497,163102,163103],{},"允许",[497,163105,163106],{},[26,163107,155386],{},[451,163109,163110,163113,163115,163118,163120],{},[497,163111,163112],{},"tuple元组",[497,163114,163097],{},[497,163116,163117],{},"不可变",[497,163119,163103],{},[497,163121,163122],{},[26,163123,155399],{},[451,163125,163126,163129,163131,163133,163135],{},[497,163127,163128],{},"str字符串",[497,163130,163097],{},[497,163132,163117],{},[497,163134,163103],{},[497,163136,163137],{},[26,163138,156009],{},[451,163140,163141,163144,163147,163149,163152],{},[497,163142,163143],{},"set集合",[497,163145,163146],{},"无序",[497,163148,163100],{},[497,163150,163151],{},"不允许",[497,163153,163154],{},[26,163155,155424],{},[451,163157,163158,163161,163163,163165,163168],{},[497,163159,163160],{},"dict字典",[497,163162,163097],{},[497,163164,163100],{},[497,163166,163167],{},"key不允许重复",[497,163169,163170],{},[26,163171,163172],{},"{\"name\": \"小明\"}",[171,163174,163175],{},"Python 3.7 之后，字典保持插入顺序。",[14,163177,163179],{"id":163178},"_62-列表list","6.2 列表list",[171,163181,163182],{},"列表用于保存一组有顺序的数据。",[19,163184,163186],{"className":30507,"code":163185,"language":30509,"meta":24,"style":24},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[26,163187,163188,163208,163233,163254],{"__ignoreMap":24},[29,163189,163190,163192,163194,163196,163198,163200,163202,163204,163206],{"class":31,"line":32},[29,163191,160509],{"class":309},[29,163193,355],{"class":305},[29,163195,52355],{"class":309},[29,163197,150017],{"class":103},[29,163199,12610],{"class":309},[29,163201,151065],{"class":103},[29,163203,12610],{"class":309},[29,163205,159860],{"class":103},[29,163207,33375],{"class":309},[29,163209,163210,163213,163215,163217,163219,163221,163223,163225,163227,163229,163231],{"class":31,"line":43},[29,163211,163212],{"class":309},"numbers ",[29,163214,355],{"class":305},[29,163216,52355],{"class":309},[29,163218,525],{"class":39},[29,163220,12610],{"class":309},[29,163222,386],{"class":39},[29,163224,12610],{"class":309},[29,163226,380],{"class":39},[29,163228,12610],{"class":309},[29,163230,601],{"class":39},[29,163232,33375],{"class":309},[29,163234,163235,163238,163240,163242,163244,163246,163248,163250,163252],{"class":31,"line":51},[29,163236,163237],{"class":309},"mixed ",[29,163239,355],{"class":305},[29,163241,52355],{"class":309},[29,163243,150017],{"class":103},[29,163245,12610],{"class":309},[29,163247,958],{"class":39},[29,163249,12610],{"class":309},[29,163251,31605],{"class":39},[29,163253,33375],{"class":309},[29,163255,163256,163259,163261],{"class":31,"line":59},[29,163257,163258],{"class":309},"empty ",[29,163260,355],{"class":305},[29,163262,51967],{"class":309},[171,163264,163265],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163267,163269],{"id":163268},"_63-列表索引","6.3 列表索引",[171,163271,163272],{},"正向索引从 0 开始：",[19,163274,163276],{"className":30507,"code":163275,"language":30509,"meta":24,"style":24},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[26,163277,163278,163298,163302,163313,163323],{"__ignoreMap":24},[29,163279,163280,163282,163284,163286,163288,163290,163292,163294,163296],{"class":31,"line":32},[29,163281,160509],{"class":309},[29,163283,355],{"class":305},[29,163285,52355],{"class":309},[29,163287,150017],{"class":103},[29,163289,12610],{"class":309},[29,163291,151065],{"class":103},[29,163293,12610],{"class":309},[29,163295,159860],{"class":103},[29,163297,33375],{"class":309},[29,163299,163300],{"class":31,"line":43},[29,163301,2575],{"emptyLinePlaceholder":233},[29,163303,163304,163306,163309,163311],{"class":31,"line":51},[29,163305,30544],{"class":39},[29,163307,163308],{"class":309},"(names[",[29,163310,499],{"class":39},[29,163312,4832],{"class":309},[29,163314,163315,163317,163319,163321],{"class":31,"line":59},[29,163316,30544],{"class":39},[29,163318,163308],{"class":309},[29,163320,525],{"class":39},[29,163322,4832],{"class":309},[29,163324,163325,163327,163329,163331],{"class":31,"line":67},[29,163326,30544],{"class":39},[29,163328,163308],{"class":309},[29,163330,386],{"class":39},[29,163332,4832],{"class":309},[171,163334,163335],{},"反向索引从 -1 开始：",[19,163337,163339],{"className":30507,"code":163338,"language":30509,"meta":24,"style":24},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[26,163340,163341,163357],{"__ignoreMap":24},[29,163342,163343,163345,163347,163349,163351,163354],{"class":31,"line":32},[29,163344,30544],{"class":39},[29,163346,163308],{"class":309},[29,163348,840],{"class":305},[29,163350,525],{"class":39},[29,163352,163353],{"class":309},"])  ",[29,163355,163356],{"class":367},"# 小刚\n",[29,163358,163359,163361,163363,163365,163367,163369],{"class":31,"line":43},[29,163360,30544],{"class":39},[29,163362,163308],{"class":309},[29,163364,840],{"class":305},[29,163366,386],{"class":39},[29,163368,163353],{"class":309},[29,163370,163371],{"class":367},"# 小红\n",[171,163373,163374],{},"索引越界会报错：",[19,163376,163378],{"className":30507,"code":163377,"language":30509,"meta":24,"style":24},"print(names[3])\n",[26,163379,163380],{"__ignoreMap":24},[29,163381,163382,163384,163386,163388],{"class":31,"line":32},[29,163383,30544],{"class":39},[29,163385,163308],{"class":309},[29,163387,380],{"class":39},[29,163389,4832],{"class":309},[14,163391,163393],{"id":163392},"_64-列表常用方法","6.4 列表常用方法",[19,163395,163397],{"className":30507,"code":163396,"language":30509,"meta":24,"style":24},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[26,163398,163399,163415,163419,163428,163442,163456,163460],{"__ignoreMap":24},[29,163400,163401,163403,163405,163407,163409,163411,163413],{"class":31,"line":32},[29,163402,160509],{"class":309},[29,163404,355],{"class":305},[29,163406,52355],{"class":309},[29,163408,150017],{"class":103},[29,163410,12610],{"class":309},[29,163412,151065],{"class":103},[29,163414,33375],{"class":309},[29,163416,163417],{"class":31,"line":43},[29,163418,2575],{"emptyLinePlaceholder":233},[29,163420,163421,163424,163426],{"class":31,"line":51},[29,163422,163423],{"class":309},"names.append(",[29,163425,159860],{"class":103},[29,163427,316],{"class":309},[29,163429,163430,163433,163435,163437,163440],{"class":31,"line":59},[29,163431,163432],{"class":309},"names.insert(",[29,163434,525],{"class":39},[29,163436,12610],{"class":309},[29,163438,163439],{"class":103},"\"小李\"",[29,163441,316],{"class":309},[29,163443,163444,163447,163449,163451,163454],{"class":31,"line":67},[29,163445,163446],{"class":309},"names.extend([",[29,163448,8858],{"class":103},[29,163450,12610],{"class":309},[29,163452,163453],{"class":103},"\"小赵\"",[29,163455,4832],{"class":309},[29,163457,163458],{"class":31,"line":75},[29,163459,2575],{"emptyLinePlaceholder":233},[29,163461,163462,163464],{"class":31,"line":83},[29,163463,30544],{"class":39},[29,163465,163466],{"class":309},"(names)\n",[171,163468,163469],{},"删除元素：",[19,163471,163473],{"className":30507,"code":163472,"language":30509,"meta":24,"style":24},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[26,163474,163475,163484,163494,163508,163520],{"__ignoreMap":24},[29,163476,163477,163480,163482],{"class":31,"line":32},[29,163478,163479],{"class":309},"names.remove(",[29,163481,151065],{"class":103},[29,163483,316],{"class":309},[29,163485,163486,163489,163491],{"class":31,"line":43},[29,163487,163488],{"class":309},"last ",[29,163490,355],{"class":305},[29,163492,163493],{"class":309}," names.pop()\n",[29,163495,163496,163499,163501,163504,163506],{"class":31,"line":51},[29,163497,163498],{"class":309},"first ",[29,163500,355],{"class":305},[29,163502,163503],{"class":309}," names.pop(",[29,163505,499],{"class":39},[29,163507,316],{"class":309},[29,163509,163510,163513,163516,163518],{"class":31,"line":59},[29,163511,163512],{"class":305},"del",[29,163514,163515],{"class":309}," names[",[29,163517,499],{"class":39},[29,163519,33375],{"class":309},[29,163521,163522],{"class":31,"line":67},[29,163523,163524],{"class":309},"names.clear()\n",[171,163526,163527],{},"查询和统计：",[19,163529,163531],{"className":30507,"code":163530,"language":30509,"meta":24,"style":24},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[26,163532,163533,163561,163565,163576,163587],{"__ignoreMap":24},[29,163534,163535,163537,163539,163541,163543,163545,163547,163549,163551,163553,163555,163557,163559],{"class":31,"line":32},[29,163536,163212],{"class":309},[29,163538,355],{"class":305},[29,163540,52355],{"class":309},[29,163542,525],{"class":39},[29,163544,12610],{"class":309},[29,163546,386],{"class":39},[29,163548,12610],{"class":309},[29,163550,380],{"class":39},[29,163552,12610],{"class":309},[29,163554,386],{"class":39},[29,163556,12610],{"class":309},[29,163558,601],{"class":39},[29,163560,33375],{"class":309},[29,163562,163563],{"class":31,"line":43},[29,163564,2575],{"emptyLinePlaceholder":233},[29,163566,163567,163569,163572,163574],{"class":31,"line":51},[29,163568,30544],{"class":39},[29,163570,163571],{"class":309},"(numbers.index(",[29,163573,380],{"class":39},[29,163575,30626],{"class":309},[29,163577,163578,163580,163583,163585],{"class":31,"line":59},[29,163579,30544],{"class":39},[29,163581,163582],{"class":309},"(numbers.count(",[29,163584,386],{"class":39},[29,163586,30626],{"class":309},[29,163588,163589,163591,163593,163595],{"class":31,"line":67},[29,163590,30544],{"class":39},[29,163592,310],{"class":309},[29,163594,7533],{"class":39},[29,163596,163597],{"class":309},"(numbers))\n",[171,163599,163600],{},"排序：",[19,163602,163604],{"className":30507,"code":163603,"language":30509,"meta":24,"style":24},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[26,163605,163606,163630,163634,163639,163646,163650,163664,163670,163674,163679],{"__ignoreMap":24},[29,163607,163608,163610,163612,163614,163616,163618,163620,163622,163624,163626,163628],{"class":31,"line":32},[29,163609,163212],{"class":309},[29,163611,355],{"class":305},[29,163613,52355],{"class":309},[29,163615,380],{"class":39},[29,163617,12610],{"class":309},[29,163619,525],{"class":39},[29,163621,12610],{"class":309},[29,163623,627],{"class":39},[29,163625,12610],{"class":309},[29,163627,386],{"class":39},[29,163629,33375],{"class":309},[29,163631,163632],{"class":31,"line":43},[29,163633,2575],{"emptyLinePlaceholder":233},[29,163635,163636],{"class":31,"line":51},[29,163637,163638],{"class":309},"numbers.sort()\n",[29,163640,163641,163643],{"class":31,"line":59},[29,163642,30544],{"class":39},[29,163644,163645],{"class":309},"(numbers)\n",[29,163647,163648],{"class":31,"line":67},[29,163649,2575],{"emptyLinePlaceholder":233},[29,163651,163652,163655,163658,163660,163662],{"class":31,"line":75},[29,163653,163654],{"class":309},"numbers.sort(",[29,163656,163657],{"class":5391},"reverse",[29,163659,355],{"class":305},[29,163661,31605],{"class":39},[29,163663,316],{"class":309},[29,163665,163666,163668],{"class":31,"line":83},[29,163667,30544],{"class":39},[29,163669,163645],{"class":309},[29,163671,163672],{"class":31,"line":158},[29,163673,2575],{"emptyLinePlaceholder":233},[29,163675,163676],{"class":31,"line":166},[29,163677,163678],{"class":309},"numbers.reverse()\n",[29,163680,163681,163683],{"class":31,"line":1505},[29,163682,30544],{"class":39},[29,163684,163645],{"class":309},[171,163686,163687,163690,163691,163694],{},[26,163688,163689],{},"sort()"," 会修改原列表，",[26,163692,163693],{},"sorted()"," 返回新列表。",[19,163696,163698],{"className":30507,"code":163697,"language":30509,"meta":24,"style":24},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[26,163699,163700,163724,163736,163740,163746],{"__ignoreMap":24},[29,163701,163702,163704,163706,163708,163710,163712,163714,163716,163718,163720,163722],{"class":31,"line":32},[29,163703,163212],{"class":309},[29,163705,355],{"class":305},[29,163707,52355],{"class":309},[29,163709,380],{"class":39},[29,163711,12610],{"class":309},[29,163713,525],{"class":39},[29,163715,12610],{"class":309},[29,163717,627],{"class":39},[29,163719,12610],{"class":309},[29,163721,386],{"class":39},[29,163723,33375],{"class":309},[29,163725,163726,163729,163731,163734],{"class":31,"line":43},[29,163727,163728],{"class":309},"new_numbers ",[29,163730,355],{"class":305},[29,163732,163733],{"class":39}," sorted",[29,163735,163645],{"class":309},[29,163737,163738],{"class":31,"line":51},[29,163739,2575],{"emptyLinePlaceholder":233},[29,163741,163742,163744],{"class":31,"line":59},[29,163743,30544],{"class":39},[29,163745,163645],{"class":309},[29,163747,163748,163750],{"class":31,"line":67},[29,163749,30544],{"class":39},[29,163751,163752],{"class":309},"(new_numbers)\n",[14,163754,163756],{"id":163755},"_65-列表遍历","6.5 列表遍历",[19,163758,163760],{"className":30507,"code":163759,"language":30509,"meta":24,"style":24},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[26,163761,163762,163782,163786,163796],{"__ignoreMap":24},[29,163763,163764,163766,163768,163770,163772,163774,163776,163778,163780],{"class":31,"line":32},[29,163765,160509],{"class":309},[29,163767,355],{"class":305},[29,163769,52355],{"class":309},[29,163771,150017],{"class":103},[29,163773,12610],{"class":309},[29,163775,151065],{"class":103},[29,163777,12610],{"class":309},[29,163779,159860],{"class":103},[29,163781,33375],{"class":309},[29,163783,163784],{"class":31,"line":43},[29,163785,2575],{"emptyLinePlaceholder":233},[29,163787,163788,163790,163792,163794],{"class":31,"line":51},[29,163789,3200],{"class":305},[29,163791,160545],{"class":309},[29,163793,26172],{"class":305},[29,163795,160550],{"class":309},[29,163797,163798,163800],{"class":31,"line":59},[29,163799,31428],{"class":39},[29,163801,150789],{"class":309},[171,163803,163804],{},"需要索引时：",[19,163806,163808],{"className":30507,"code":163807,"language":30509,"meta":24,"style":24},"for index, name in enumerate(names):\n    print(index, name)\n",[26,163809,163810,163824],{"__ignoreMap":24},[29,163811,163812,163814,163817,163819,163821],{"class":31,"line":32},[29,163813,3200],{"class":305},[29,163815,163816],{"class":309}," index, name ",[29,163818,26172],{"class":305},[29,163820,31735],{"class":39},[29,163822,163823],{"class":309},"(names):\n",[29,163825,163826,163828],{"class":31,"line":43},[29,163827,31428],{"class":39},[29,163829,163830],{"class":309},"(index, name)\n",[171,163832,163833],{},"统计总分：",[19,163835,163837],{"className":30507,"code":163836,"language":30509,"meta":24,"style":24},"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",[26,163838,163839,163864,163872,163876,163887,163895,163899,163916],{"__ignoreMap":24},[29,163840,163841,163844,163846,163848,163850,163852,163854,163856,163858,163860,163862],{"class":31,"line":32},[29,163842,163843],{"class":309},"scores ",[29,163845,355],{"class":305},[29,163847,52355],{"class":309},[29,163849,1170],{"class":39},[29,163851,12610],{"class":309},[29,163853,1044],{"class":39},[29,163855,12610],{"class":309},[29,163857,562],{"class":39},[29,163859,12610],{"class":309},[29,163861,869],{"class":39},[29,163863,33375],{"class":309},[29,163865,163866,163868,163870],{"class":31,"line":43},[29,163867,157389],{"class":309},[29,163869,355],{"class":305},[29,163871,47462],{"class":39},[29,163873,163874],{"class":31,"line":51},[29,163875,2575],{"emptyLinePlaceholder":233},[29,163877,163878,163880,163882,163884],{"class":31,"line":59},[29,163879,3200],{"class":305},[29,163881,157912],{"class":309},[29,163883,26172],{"class":305},[29,163885,163886],{"class":309}," scores:\n",[29,163888,163889,163891,163893],{"class":31,"line":67},[29,163890,159436],{"class":309},[29,163892,9652],{"class":305},[29,163894,1755],{"class":309},[29,163896,163897],{"class":31,"line":75},[29,163898,2575],{"emptyLinePlaceholder":233},[29,163900,163901,163904,163906,163909,163911,163913],{"class":31,"line":83},[29,163902,163903],{"class":309},"avg ",[29,163905,355],{"class":305},[29,163907,163908],{"class":309}," total ",[29,163910,892],{"class":305},[29,163912,7506],{"class":39},[29,163914,163915],{"class":309},"(scores)\n",[29,163917,163918,163920,163922,163924,163927,163929,163932,163934,163936,163938],{"class":31,"line":158},[29,163919,30544],{"class":39},[29,163921,310],{"class":309},[29,163923,361],{"class":305},[29,163925,163926],{"class":103},"\"平均分:",[29,163928,1204],{"class":39},[29,163930,163931],{"class":309},"avg",[29,163933,157288],{"class":305},[29,163935,1254],{"class":39},[29,163937,559],{"class":103},[29,163939,316],{"class":309},[14,163941,163943],{"id":163942},"_66-元组tuple","6.6 元组tuple",[171,163945,163946],{},"元组和列表类似，但不可修改。",[19,163948,163950],{"className":30507,"code":163949,"language":30509,"meta":24,"style":24},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[26,163951,163952,163969],{"__ignoreMap":24},[29,163953,163954,163957,163959,163961,163963,163965,163967],{"class":31,"line":32},[29,163955,163956],{"class":309},"point ",[29,163958,355],{"class":305},[29,163960,1834],{"class":309},[29,163962,754],{"class":39},[29,163964,12610],{"class":309},[29,163966,1008],{"class":39},[29,163968,316],{"class":309},[29,163970,163971,163973,163975,163977,163979,163981,163983,163985,163987],{"class":31,"line":43},[29,163972,116443],{"class":309},[29,163974,355],{"class":305},[29,163976,1834],{"class":309},[29,163978,150017],{"class":103},[29,163980,12610],{"class":309},[29,163982,958],{"class":39},[29,163984,12610],{"class":309},[29,163986,69398],{"class":103},[29,163988,316],{"class":309},[171,163990,163991],{},"单元素元组必须加逗号：",[19,163993,163995],{"className":30507,"code":163994,"language":30509,"meta":24,"style":24},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[26,163996,163997,164011,164024,164028,164042],{"__ignoreMap":24},[29,163998,163999,164002,164004,164006,164008],{"class":31,"line":32},[29,164000,164001],{"class":309},"t1 ",[29,164003,355],{"class":305},[29,164005,1834],{"class":309},[29,164007,754],{"class":39},[29,164009,164010],{"class":309},",)\n",[29,164012,164013,164016,164018,164020,164022],{"class":31,"line":43},[29,164014,164015],{"class":309},"t2 ",[29,164017,355],{"class":305},[29,164019,1834],{"class":309},[29,164021,754],{"class":39},[29,164023,316],{"class":309},[29,164025,164026],{"class":31,"line":51},[29,164027,2575],{"emptyLinePlaceholder":233},[29,164029,164030,164032,164034,164036,164039],{"class":31,"line":59},[29,164031,30544],{"class":39},[29,164033,310],{"class":309},[29,164035,103236],{"class":39},[29,164037,164038],{"class":309},"(t1))  ",[29,164040,164041],{"class":367},"# tuple\n",[29,164043,164044,164046,164048,164050,164053],{"class":31,"line":67},[29,164045,30544],{"class":39},[29,164047,310],{"class":309},[29,164049,103236],{"class":39},[29,164051,164052],{"class":309},"(t2))  ",[29,164054,164055],{"class":367},"# int\n",[171,164057,164058],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164060,164062],{"id":164061},"_67-字符串str","6.7 字符串str",[171,164064,164065],{},"字符串也是序列，可以索引、切片和遍历。",[19,164067,164069],{"className":30507,"code":164068,"language":30509,"meta":24,"style":24},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[26,164070,164071,164079,164083,164094,164106,164110,164121],{"__ignoreMap":24},[29,164072,164073,164075,164077],{"class":31,"line":32},[29,164074,156573],{"class":309},[29,164076,355],{"class":305},[29,164078,159810],{"class":103},[29,164080,164081],{"class":31,"line":43},[29,164082,2575],{"emptyLinePlaceholder":233},[29,164084,164085,164087,164090,164092],{"class":31,"line":51},[29,164086,30544],{"class":39},[29,164088,164089],{"class":309},"(text[",[29,164091,499],{"class":39},[29,164093,4832],{"class":309},[29,164095,164096,164098,164100,164102,164104],{"class":31,"line":59},[29,164097,30544],{"class":39},[29,164099,164089],{"class":309},[29,164101,840],{"class":305},[29,164103,525],{"class":39},[29,164105,4832],{"class":309},[29,164107,164108],{"class":31,"line":67},[29,164109,2575],{"emptyLinePlaceholder":233},[29,164111,164112,164114,164116,164118],{"class":31,"line":75},[29,164113,3200],{"class":305},[29,164115,159821],{"class":309},[29,164117,26172],{"class":305},[29,164119,164120],{"class":309}," text:\n",[29,164122,164123,164125],{"class":31,"line":83},[29,164124,31428],{"class":39},[29,164126,159832],{"class":309},[171,164128,164129],{},"字符串不可变：",[19,164131,164133],{"className":30507,"code":164132,"language":30509,"meta":24,"style":24},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[26,164134,164135,164143],{"__ignoreMap":24},[29,164136,164137,164139,164141],{"class":31,"line":32},[29,164138,156573],{"class":309},[29,164140,355],{"class":305},[29,164142,159810],{"class":103},[29,164144,164145,164148,164150,164152,164154,164157],{"class":31,"line":43},[29,164146,164147],{"class":309},"text[",[29,164149,499],{"class":39},[29,164151,4618],{"class":309},[29,164153,355],{"class":305},[29,164155,164156],{"class":103}," \"P\"",[29,164158,164159],{"class":367},"  # 报错\n",[171,164161,164162],{},"如果要得到新字符串：",[19,164164,164166],{"className":30507,"code":164165,"language":30509,"meta":24,"style":24},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[26,164167,164168,164176,164194],{"__ignoreMap":24},[29,164169,164170,164172,164174],{"class":31,"line":32},[29,164171,156573],{"class":309},[29,164173,355],{"class":305},[29,164175,159810],{"class":103},[29,164177,164178,164180,164182,164184,164186,164189,164191],{"class":31,"line":43},[29,164179,156573],{"class":309},[29,164181,355],{"class":305},[29,164183,164156],{"class":103},[29,164185,45695],{"class":305},[29,164187,164188],{"class":309}," text[",[29,164190,525],{"class":39},[29,164192,164193],{"class":309},":]\n",[29,164195,164196,164198],{"class":31,"line":51},[29,164197,30544],{"class":39},[29,164199,164200],{"class":309},"(text)\n",[14,164202,164204],{"id":164203},"_68-切片","6.8 切片",[171,164206,164207],{},"切片用于从序列中取一部分。",[19,164209,164211],{"className":30507,"code":164210,"language":30509,"meta":24,"style":24},"序列[开始:结束:步长]\n",[26,164212,164213],{"__ignoreMap":24},[29,164214,164215],{"class":31,"line":32},[29,164216,164210],{"class":309},[171,164218,164219],{},"结束位置不包含。",[19,164221,164223],{"className":30507,"code":164222,"language":30509,"meta":24,"style":24},"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",[26,164224,164225,164262,164266,164285,164300,164314,164328],{"__ignoreMap":24},[29,164226,164227,164230,164232,164234,164236,164238,164240,164242,164244,164246,164248,164250,164252,164254,164256,164258,164260],{"class":31,"line":32},[29,164228,164229],{"class":309},"nums ",[29,164231,355],{"class":305},[29,164233,52355],{"class":309},[29,164235,499],{"class":39},[29,164237,12610],{"class":309},[29,164239,525],{"class":39},[29,164241,12610],{"class":309},[29,164243,386],{"class":39},[29,164245,12610],{"class":309},[29,164247,380],{"class":39},[29,164249,12610],{"class":309},[29,164251,601],{"class":39},[29,164253,12610],{"class":309},[29,164255,627],{"class":39},[29,164257,12610],{"class":309},[29,164259,652],{"class":39},[29,164261,33375],{"class":309},[29,164263,164264],{"class":31,"line":43},[29,164265,2575],{"emptyLinePlaceholder":233},[29,164267,164268,164270,164273,164275,164277,164279,164282],{"class":31,"line":51},[29,164269,30544],{"class":39},[29,164271,164272],{"class":309},"(nums[",[29,164274,525],{"class":39},[29,164276,1167],{"class":309},[29,164278,601],{"class":39},[29,164280,164281],{"class":309},"])    ",[29,164283,164284],{"class":367},"# [1, 2, 3]\n",[29,164286,164287,164289,164292,164294,164297],{"class":31,"line":59},[29,164288,30544],{"class":39},[29,164290,164291],{"class":309},"(nums[:",[29,164293,380],{"class":39},[29,164295,164296],{"class":309},"])     ",[29,164298,164299],{"class":367},"# [0, 1, 2]\n",[29,164301,164302,164304,164306,164308,164311],{"class":31,"line":67},[29,164303,30544],{"class":39},[29,164305,164272],{"class":309},[29,164307,380],{"class":39},[29,164309,164310],{"class":309},":])     ",[29,164312,164313],{"class":367},"# [3, 4, 5, 6]\n",[29,164315,164316,164318,164321,164323,164325],{"class":31,"line":75},[29,164317,30544],{"class":39},[29,164319,164320],{"class":309},"(nums[::",[29,164322,386],{"class":39},[29,164324,164281],{"class":309},[29,164326,164327],{"class":367},"# [0, 2, 4, 6]\n",[29,164329,164330,164332,164334,164336,164338,164341],{"class":31,"line":83},[29,164331,30544],{"class":39},[29,164333,164320],{"class":309},[29,164335,840],{"class":305},[29,164337,525],{"class":39},[29,164339,164340],{"class":309},"])   ",[29,164342,164343],{"class":367},"# 反转\n",[171,164345,164346],{},"字符串切片：",[19,164348,164350],{"className":30507,"code":164349,"language":30509,"meta":24,"style":24},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[26,164351,164352,164361,164375],{"__ignoreMap":24},[29,164353,164354,164356,164358],{"class":31,"line":32},[29,164355,156573],{"class":309},[29,164357,355],{"class":305},[29,164359,164360],{"class":103}," \"abcdef\"\n",[29,164362,164363,164365,164367,164369,164371,164373],{"class":31,"line":43},[29,164364,30544],{"class":39},[29,164366,164089],{"class":309},[29,164368,525],{"class":39},[29,164370,1167],{"class":309},[29,164372,601],{"class":39},[29,164374,4832],{"class":309},[29,164376,164377,164379,164382,164384,164386],{"class":31,"line":51},[29,164378,30544],{"class":39},[29,164380,164381],{"class":309},"(text[::",[29,164383,840],{"class":305},[29,164385,525],{"class":39},[29,164387,4832],{"class":309},[14,164389,164391],{"id":164390},"_69-集合set","6.9 集合set",[171,164393,164394],{},"集合特点：",[259,164396,164397,164400,164403],{},[178,164398,164399],{},"无序。",[178,164401,164402],{},"元素不重复。",[178,164404,164405],{},"可以做交集、并集、差集。",[19,164407,164409],{"className":30507,"code":164408,"language":30509,"meta":24,"style":24},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[26,164410,164411,164439],{"__ignoreMap":24},[29,164412,164413,164415,164417,164419,164421,164423,164425,164427,164429,164431,164433,164435,164437],{"class":31,"line":32},[29,164414,164229],{"class":309},[29,164416,355],{"class":305},[29,164418,4623],{"class":309},[29,164420,525],{"class":39},[29,164422,12610],{"class":309},[29,164424,386],{"class":39},[29,164426,12610],{"class":309},[29,164428,380],{"class":39},[29,164430,12610],{"class":309},[29,164432,380],{"class":39},[29,164434,12610],{"class":309},[29,164436,601],{"class":39},[29,164438,1741],{"class":309},[29,164440,164441,164443],{"class":31,"line":43},[29,164442,30544],{"class":39},[29,164444,164445],{"class":309},"(nums)\n",[171,164447,164448],{},"创建空集合：",[19,164450,164452],{"className":30507,"code":164451,"language":30509,"meta":24,"style":24},"s = set()\n",[26,164453,164454],{"__ignoreMap":24},[29,164455,164456,164458,164460,164462],{"class":31,"line":32},[29,164457,10754],{"class":309},[29,164459,355],{"class":305},[29,164461,119851],{"class":39},[29,164463,2151],{"class":309},[171,164465,9200,164466,164468],{},[26,164467,32588],{}," 是空字典，不是空集合。",[171,164470,164471],{},"集合常用操作：",[19,164473,164475],{"className":30507,"code":164474,"language":30509,"meta":24,"style":24},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[26,164476,164477,164497,164501,164510,164519,164528],{"__ignoreMap":24},[29,164478,164479,164481,164483,164485,164487,164489,164491,164493,164495],{"class":31,"line":32},[29,164480,10754],{"class":309},[29,164482,355],{"class":305},[29,164484,4623],{"class":309},[29,164486,525],{"class":39},[29,164488,12610],{"class":309},[29,164490,386],{"class":39},[29,164492,12610],{"class":309},[29,164494,380],{"class":39},[29,164496,1741],{"class":309},[29,164498,164499],{"class":31,"line":43},[29,164500,2575],{"emptyLinePlaceholder":233},[29,164502,164503,164506,164508],{"class":31,"line":51},[29,164504,164505],{"class":309},"s.add(",[29,164507,601],{"class":39},[29,164509,316],{"class":309},[29,164511,164512,164515,164517],{"class":31,"line":59},[29,164513,164514],{"class":309},"s.remove(",[29,164516,386],{"class":39},[29,164518,316],{"class":309},[29,164520,164521,164524,164526],{"class":31,"line":67},[29,164522,164523],{"class":309},"s.discard(",[29,164525,754],{"class":39},[29,164527,316],{"class":309},[29,164529,164530,164532,164534,164536],{"class":31,"line":75},[29,164531,30544],{"class":39},[29,164533,310],{"class":309},[29,164535,7533],{"class":39},[29,164537,164538],{"class":309},"(s))\n",[171,164540,164541],{},"交并差：",[19,164543,164545],{"className":30507,"code":164544,"language":30509,"meta":24,"style":24},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[26,164546,164547,164567,164587,164591,164606,164619],{"__ignoreMap":24},[29,164548,164549,164551,164553,164555,164557,164559,164561,164563,164565],{"class":31,"line":32},[29,164550,11094],{"class":309},[29,164552,355],{"class":305},[29,164554,4623],{"class":309},[29,164556,525],{"class":39},[29,164558,12610],{"class":309},[29,164560,386],{"class":39},[29,164562,12610],{"class":309},[29,164564,380],{"class":39},[29,164566,1741],{"class":309},[29,164568,164569,164571,164573,164575,164577,164579,164581,164583,164585],{"class":31,"line":43},[29,164570,11120],{"class":309},[29,164572,355],{"class":305},[29,164574,4623],{"class":309},[29,164576,380],{"class":39},[29,164578,12610],{"class":309},[29,164580,601],{"class":39},[29,164582,12610],{"class":309},[29,164584,627],{"class":39},[29,164586,1741],{"class":309},[29,164588,164589],{"class":31,"line":51},[29,164590,2575],{"emptyLinePlaceholder":233},[29,164592,164593,164595,164598,164600,164603],{"class":31,"line":59},[29,164594,30544],{"class":39},[29,164596,164597],{"class":309},"(a ",[29,164599,661],{"class":305},[29,164601,164602],{"class":309}," b)  ",[29,164604,164605],{"class":367},"# 交集\n",[29,164607,164608,164610,164612,164614,164616],{"class":31,"line":67},[29,164609,30544],{"class":39},[29,164611,164597],{"class":309},[29,164613,1229],{"class":305},[29,164615,164602],{"class":309},[29,164617,164618],{"class":367},"# 并集\n",[29,164620,164621,164623,164625,164627,164629],{"class":31,"line":75},[29,164622,30544],{"class":39},[29,164624,164597],{"class":309},[29,164626,840],{"class":305},[29,164628,164602],{"class":309},[29,164630,164631],{"class":367},"# 差集\n",[14,164633,164635],{"id":164634},"_610-字典dict","6.10 字典dict",[171,164637,164638],{},"字典通过 key-value 保存数据。",[19,164640,164642],{"className":30507,"code":164641,"language":30509,"meta":24,"style":24},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[26,164643,164644,164652,164662,164673,164683],{"__ignoreMap":24},[29,164645,164646,164648,164650],{"class":31,"line":32},[29,164647,149610],{"class":309},[29,164649,355],{"class":305},[29,164651,15747],{"class":309},[29,164653,164654,164656,164658,164660],{"class":31,"line":43},[29,164655,147149],{"class":103},[29,164657,51566],{"class":309},[29,164659,150017],{"class":103},[29,164661,31595],{"class":309},[29,164663,164664,164667,164669,164671],{"class":31,"line":51},[29,164665,164666],{"class":103},"    \"age\"",[29,164668,51566],{"class":309},[29,164670,958],{"class":39},[29,164672,31595],{"class":309},[29,164674,164675,164678,164680],{"class":31,"line":59},[29,164676,164677],{"class":103},"    \"score\"",[29,164679,51566],{"class":309},[29,164681,164682],{"class":39},"95\n",[29,164684,164685],{"class":31,"line":67},[29,164686,1741],{"class":309},[171,164688,164689],{},"获取值：",[19,164691,164693],{"className":30507,"code":164692,"language":30509,"meta":24,"style":24},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[26,164694,164695,164706],{"__ignoreMap":24},[29,164696,164697,164699,164702,164704],{"class":31,"line":32},[29,164698,30544],{"class":39},[29,164700,164701],{"class":309},"(student[",[29,164703,62808],{"class":103},[29,164705,4832],{"class":309},[29,164707,164708,164710,164713,164715],{"class":31,"line":43},[29,164709,30544],{"class":39},[29,164711,164712],{"class":309},"(student.get(",[29,164714,62808],{"class":103},[29,164716,30626],{"class":309},[171,164718,15563],{},[19,164720,164722],{"className":30507,"code":164721,"language":30509,"meta":24,"style":24},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[26,164723,164724,164737],{"__ignoreMap":24},[29,164725,164726,164728,164731,164734],{"class":31,"line":32},[29,164727,152988],{"class":309},[29,164729,164730],{"class":103},"\"address\"",[29,164732,164733],{"class":309},"]     ",[29,164735,164736],{"class":367},"# key不存在会报错\n",[29,164738,164739,164742,164744,164746],{"class":31,"line":43},[29,164740,164741],{"class":309},"student.get(",[29,164743,164730],{"class":103},[29,164745,13889],{"class":309},[29,164747,164748],{"class":367},"# key不存在返回None\n",[171,164750,164751],{},"设置默认值：",[19,164753,164755],{"className":30507,"code":164754,"language":30509,"meta":24,"style":24},"print(student.get(\"address\", \"未知\"))\n",[26,164756,164757],{"__ignoreMap":24},[29,164758,164759,164761,164763,164765,164767,164770],{"class":31,"line":32},[29,164760,30544],{"class":39},[29,164762,164712],{"class":309},[29,164764,164730],{"class":103},[29,164766,12610],{"class":309},[29,164768,164769],{"class":103},"\"未知\"",[29,164771,30626],{"class":309},[171,164773,164774],{},"新增和修改：",[19,164776,164778],{"className":30507,"code":164777,"language":30509,"meta":24,"style":24},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[26,164779,164780,164793],{"__ignoreMap":24},[29,164781,164782,164784,164786,164788,164790],{"class":31,"line":32},[29,164783,152988],{"class":309},[29,164785,69253],{"class":103},[29,164787,4618],{"class":309},[29,164789,355],{"class":305},[29,164791,164792],{"class":39}," 19\n",[29,164794,164795,164797,164799,164801,164803],{"class":31,"line":43},[29,164796,152988],{"class":309},[29,164798,164730],{"class":103},[29,164800,4618],{"class":309},[29,164802,355],{"class":305},[29,164804,164805],{"class":103}," \"北京\"\n",[171,164807,164808],{},"删除：",[19,164810,164812],{"className":30507,"code":164811,"language":30509,"meta":24,"style":24},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[26,164813,164814,164827,164837],{"__ignoreMap":24},[29,164815,164816,164818,164820,164823,164825],{"class":31,"line":32},[29,164817,155487],{"class":309},[29,164819,355],{"class":305},[29,164821,164822],{"class":309}," student.pop(",[29,164824,151601],{"class":103},[29,164826,316],{"class":309},[29,164828,164829,164831,164833,164835],{"class":31,"line":43},[29,164830,163512],{"class":305},[29,164832,152278],{"class":309},[29,164834,69253],{"class":103},[29,164836,33375],{"class":309},[29,164838,164839],{"class":31,"line":51},[29,164840,164841],{"class":309},"student.clear()\n",[14,164843,164845],{"id":164844},"_611-字典遍历","6.11 字典遍历",[171,164847,164848],{},"遍历 key：",[19,164850,164852],{"className":30507,"code":164851,"language":30509,"meta":24,"style":24},"for key in student:\n    print(key, student[key])\n",[26,164853,164854,164866],{"__ignoreMap":24},[29,164855,164856,164858,164861,164863],{"class":31,"line":32},[29,164857,3200],{"class":305},[29,164859,164860],{"class":309}," key ",[29,164862,26172],{"class":305},[29,164864,164865],{"class":309}," student:\n",[29,164867,164868,164870],{"class":31,"line":43},[29,164869,31428],{"class":39},[29,164871,164872],{"class":309},"(key, student[key])\n",[171,164874,164875],{},"遍历 value：",[19,164877,164879],{"className":30507,"code":164878,"language":30509,"meta":24,"style":24},"for value in student.values():\n    print(value)\n",[26,164880,164881,164893],{"__ignoreMap":24},[29,164882,164883,164885,164888,164890],{"class":31,"line":32},[29,164884,3200],{"class":305},[29,164886,164887],{"class":309}," value ",[29,164889,26172],{"class":305},[29,164891,164892],{"class":309}," student.values():\n",[29,164894,164895,164897],{"class":31,"line":43},[29,164896,31428],{"class":39},[29,164898,164899],{"class":309},"(value)\n",[171,164901,164902],{},"遍历 key 和 value：",[19,164904,164906],{"className":30507,"code":164905,"language":30509,"meta":24,"style":24},"for key, value in student.items():\n    print(key, value)\n",[26,164907,164908,164920],{"__ignoreMap":24},[29,164909,164910,164912,164915,164917],{"class":31,"line":32},[29,164911,3200],{"class":305},[29,164913,164914],{"class":309}," key, value ",[29,164916,26172],{"class":305},[29,164918,164919],{"class":309}," student.items():\n",[29,164921,164922,164924],{"class":31,"line":43},[29,164923,31428],{"class":39},[29,164925,164926],{"class":309},"(key, value)\n",[14,164928,164930],{"id":164929},"_612-嵌套容器","6.12 嵌套容器",[171,164932,164933],{},"列表中保存字典，是项目中最常见的结构之一。",[19,164935,164937],{"className":30507,"code":164936,"language":30509,"meta":24,"style":24},"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",[26,164938,164939,164947,164975,165003,165031,165035,165039,165049],{"__ignoreMap":24},[29,164940,164941,164943,164945],{"class":31,"line":32},[29,164942,159845],{"class":309},[29,164944,355],{"class":305},[29,164946,55576],{"class":309},[29,164948,164949,164951,164953,164955,164957,164959,164961,164963,164965,164967,164969,164971,164973],{"class":31,"line":43},[29,164950,148514],{"class":309},[29,164952,62808],{"class":103},[29,164954,51566],{"class":309},[29,164956,150017],{"class":103},[29,164958,12610],{"class":309},[29,164960,69253],{"class":103},[29,164962,51566],{"class":309},[29,164964,958],{"class":39},[29,164966,12610],{"class":309},[29,164968,151601],{"class":103},[29,164970,51566],{"class":309},[29,164972,1297],{"class":39},[29,164974,5105],{"class":309},[29,164976,164977,164979,164981,164983,164985,164987,164989,164991,164993,164995,164997,164999,165001],{"class":31,"line":51},[29,164978,148514],{"class":309},[29,164980,62808],{"class":103},[29,164982,51566],{"class":309},[29,164984,151065],{"class":103},[29,164986,12610],{"class":309},[29,164988,69253],{"class":103},[29,164990,51566],{"class":309},[29,164992,933],{"class":39},[29,164994,12610],{"class":309},[29,164996,151601],{"class":103},[29,164998,51566],{"class":309},[29,165000,1119],{"class":39},[29,165002,5105],{"class":309},[29,165004,165005,165007,165009,165011,165013,165015,165017,165019,165021,165023,165025,165027,165029],{"class":31,"line":59},[29,165006,148514],{"class":309},[29,165008,62808],{"class":103},[29,165010,51566],{"class":309},[29,165012,159860],{"class":103},[29,165014,12610],{"class":309},[29,165016,69253],{"class":103},[29,165018,51566],{"class":309},[29,165020,983],{"class":39},[29,165022,12610],{"class":309},[29,165024,151601],{"class":103},[29,165026,51566],{"class":309},[29,165028,714],{"class":39},[29,165030,5105],{"class":309},[29,165032,165033],{"class":31,"line":67},[29,165034,33375],{"class":309},[29,165036,165037],{"class":31,"line":75},[29,165038,2575],{"emptyLinePlaceholder":233},[29,165040,165041,165043,165045,165047],{"class":31,"line":83},[29,165042,3200],{"class":305},[29,165044,152266],{"class":309},[29,165046,26172],{"class":305},[29,165048,152271],{"class":309},[29,165050,165051,165053,165055,165057,165060,165062],{"class":31,"line":158},[29,165052,31428],{"class":39},[29,165054,164701],{"class":309},[29,165056,62808],{"class":103},[29,165058,165059],{"class":309},"], student[",[29,165061,151601],{"class":103},[29,165063,4832],{"class":309},[171,165065,165066],{},"统计平均分：",[19,165068,165070],{"className":30507,"code":165069,"language":30509,"meta":24,"style":24},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[26,165071,165072,165080,165084,165094,165106,165110,165125],{"__ignoreMap":24},[29,165073,165074,165076,165078],{"class":31,"line":32},[29,165075,157389],{"class":309},[29,165077,355],{"class":305},[29,165079,47462],{"class":39},[29,165081,165082],{"class":31,"line":43},[29,165083,2575],{"emptyLinePlaceholder":233},[29,165085,165086,165088,165090,165092],{"class":31,"line":51},[29,165087,3200],{"class":305},[29,165089,152266],{"class":309},[29,165091,26172],{"class":305},[29,165093,152271],{"class":309},[29,165095,165096,165098,165100,165102,165104],{"class":31,"line":59},[29,165097,159436],{"class":309},[29,165099,9652],{"class":305},[29,165101,152278],{"class":309},[29,165103,151601],{"class":103},[29,165105,33375],{"class":309},[29,165107,165108],{"class":31,"line":67},[29,165109,2575],{"emptyLinePlaceholder":233},[29,165111,165112,165114,165116,165118,165120,165122],{"class":31,"line":75},[29,165113,163903],{"class":309},[29,165115,355],{"class":305},[29,165117,163908],{"class":309},[29,165119,892],{"class":305},[29,165121,7506],{"class":39},[29,165123,165124],{"class":309},"(students)\n",[29,165126,165127,165129,165131,165133,165135,165137,165139,165141,165143,165145],{"class":31,"line":83},[29,165128,30544],{"class":39},[29,165130,310],{"class":309},[29,165132,361],{"class":305},[29,165134,163926],{"class":103},[29,165136,1204],{"class":39},[29,165138,163931],{"class":309},[29,165140,157288],{"class":305},[29,165142,1254],{"class":39},[29,165144,559],{"class":103},[29,165146,316],{"class":309},[171,165148,165149],{},"查找学生：",[19,165151,165153],{"className":30507,"code":165152,"language":30509,"meta":24,"style":24},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[26,165154,165155,165170,165174,165184,165198,165204,165208,165214],{"__ignoreMap":24},[29,165156,165157,165159,165161,165163,165165,165168],{"class":31,"line":32},[29,165158,111707],{"class":309},[29,165160,355],{"class":305},[29,165162,60734],{"class":39},[29,165164,310],{"class":309},[29,165166,165167],{"class":103},"\"请输入学生姓名:\"",[29,165169,316],{"class":309},[29,165171,165172],{"class":31,"line":43},[29,165173,2575],{"emptyLinePlaceholder":233},[29,165175,165176,165178,165180,165182],{"class":31,"line":51},[29,165177,3200],{"class":305},[29,165179,152266],{"class":309},[29,165181,26172],{"class":305},[29,165183,152271],{"class":309},[29,165185,165186,165188,165190,165192,165194,165196],{"class":31,"line":59},[29,165187,3276],{"class":305},[29,165189,152278],{"class":309},[29,165191,62808],{"class":103},[29,165193,4618],{"class":309},[29,165195,3124],{"class":305},[29,165197,160561],{"class":309},[29,165199,165200,165202],{"class":31,"line":67},[29,165201,32580],{"class":39},[29,165203,150171],{"class":309},[29,165205,165206],{"class":31,"line":75},[29,165207,31756],{"class":305},[29,165209,165210,165212],{"class":31,"line":83},[29,165211,1877],{"class":305},[29,165213,3914],{"class":309},[29,165215,165216,165218,165220,165223],{"class":31,"line":158},[29,165217,31428],{"class":39},[29,165219,310],{"class":309},[29,165221,165222],{"class":103},"\"没有找到\"",[29,165224,316],{"class":309},[14,165226,165228],{"id":165227},"_613-容器通用操作","6.13 容器通用操作",[171,165230,165231],{},"长度：",[19,165233,165235],{"className":30507,"code":165234,"language":30509,"meta":24,"style":24},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[26,165236,165237,165256,165266],{"__ignoreMap":24},[29,165238,165239,165241,165244,165246,165248,165250,165252,165254],{"class":31,"line":32},[29,165240,7533],{"class":39},[29,165242,165243],{"class":309},"([",[29,165245,525],{"class":39},[29,165247,12610],{"class":309},[29,165249,386],{"class":39},[29,165251,12610],{"class":309},[29,165253,380],{"class":39},[29,165255,4832],{"class":309},[29,165257,165258,165260,165262,165264],{"class":31,"line":43},[29,165259,7533],{"class":39},[29,165261,310],{"class":309},[29,165263,156009],{"class":103},[29,165265,316],{"class":309},[29,165267,165268,165270,165273,165275,165277,165279],{"class":31,"line":51},[29,165269,7533],{"class":39},[29,165271,165272],{"class":309},"({",[29,165274,62808],{"class":103},[29,165276,51566],{"class":309},[29,165278,150017],{"class":103},[29,165280,165281],{"class":309},"})\n",[171,165283,165284],{},"最大最小：",[19,165286,165288],{"className":30507,"code":165287,"language":30509,"meta":24,"style":24},"max([1, 2, 3])\nmin([1, 2, 3])\n",[26,165289,165290,165308],{"__ignoreMap":24},[29,165291,165292,165294,165296,165298,165300,165302,165304,165306],{"class":31,"line":32},[29,165293,6190],{"class":39},[29,165295,165243],{"class":309},[29,165297,525],{"class":39},[29,165299,12610],{"class":309},[29,165301,386],{"class":39},[29,165303,12610],{"class":309},[29,165305,380],{"class":39},[29,165307,4832],{"class":309},[29,165309,165310,165313,165315,165317,165319,165321,165323,165325],{"class":31,"line":43},[29,165311,165312],{"class":39},"min",[29,165314,165243],{"class":309},[29,165316,525],{"class":39},[29,165318,12610],{"class":309},[29,165320,386],{"class":39},[29,165322,12610],{"class":309},[29,165324,380],{"class":39},[29,165326,4832],{"class":309},[171,165328,165329],{},"求和：",[19,165331,165333],{"className":30507,"code":165332,"language":30509,"meta":24,"style":24},"sum([1, 2, 3])\n",[26,165334,165335],{"__ignoreMap":24},[29,165336,165337,165340,165342,165344,165346,165348,165350,165352],{"class":31,"line":32},[29,165338,165339],{"class":39},"sum",[29,165341,165243],{"class":309},[29,165343,525],{"class":39},[29,165345,12610],{"class":309},[29,165347,386],{"class":39},[29,165349,12610],{"class":309},[29,165351,380],{"class":39},[29,165353,4832],{"class":309},[171,165355,163600],{},[19,165357,165359],{"className":30507,"code":165358,"language":30509,"meta":24,"style":24},"sorted([3, 1, 2])\n",[26,165360,165361],{"__ignoreMap":24},[29,165362,165363,165366,165368,165370,165372,165374,165376,165378],{"class":31,"line":32},[29,165364,165365],{"class":39},"sorted",[29,165367,165243],{"class":309},[29,165369,380],{"class":39},[29,165371,12610],{"class":309},[29,165373,525],{"class":39},[29,165375,12610],{"class":309},[29,165377,386],{"class":39},[29,165379,4832],{"class":309},[171,165381,165382],{},"类型转换：",[19,165384,165386],{"className":30507,"code":165385,"language":30509,"meta":24,"style":24},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[26,165387,165388,165398,165416],{"__ignoreMap":24},[29,165389,165390,165392,165394,165396],{"class":31,"line":32},[29,165391,154199],{"class":39},[29,165393,310],{"class":309},[29,165395,156009],{"class":103},[29,165397,316],{"class":309},[29,165399,165400,165402,165404,165406,165408,165410,165412,165414],{"class":31,"line":43},[29,165401,155394],{"class":39},[29,165403,165243],{"class":309},[29,165405,525],{"class":39},[29,165407,12610],{"class":309},[29,165409,386],{"class":39},[29,165411,12610],{"class":309},[29,165413,380],{"class":39},[29,165415,4832],{"class":309},[29,165417,165418,165420,165422,165424,165426,165428,165430,165432,165434,165436],{"class":31,"line":51},[29,165419,155419],{"class":39},[29,165421,165243],{"class":309},[29,165423,525],{"class":39},[29,165425,12610],{"class":309},[29,165427,525],{"class":39},[29,165429,12610],{"class":309},[29,165431,386],{"class":39},[29,165433,12610],{"class":309},[29,165435,380],{"class":39},[29,165437,4832],{"class":309},[171,165439,165440],{},"成员判断：",[19,165442,165444],{"className":30507,"code":165443,"language":30509,"meta":24,"style":24},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[26,165445,165446,165463,165487],{"__ignoreMap":24},[29,165447,165448,165450,165452,165455,165458,165461],{"class":31,"line":32},[29,165449,30544],{"class":39},[29,165451,310],{"class":309},[29,165453,165454],{"class":103},"\"a\"",[29,165456,165457],{"class":305}," in",[29,165459,165460],{"class":103}," \"abc\"",[29,165462,316],{"class":309},[29,165464,165465,165467,165469,165471,165473,165475,165477,165479,165481,165483,165485],{"class":31,"line":43},[29,165466,30544],{"class":39},[29,165468,310],{"class":309},[29,165470,525],{"class":39},[29,165472,165457],{"class":305},[29,165474,52355],{"class":309},[29,165476,525],{"class":39},[29,165478,12610],{"class":309},[29,165480,386],{"class":39},[29,165482,12610],{"class":309},[29,165484,380],{"class":39},[29,165486,4832],{"class":309},[29,165488,165489,165491,165493,165495,165497,165499,165501,165503,165505],{"class":31,"line":51},[29,165490,30544],{"class":39},[29,165492,310],{"class":309},[29,165494,62808],{"class":103},[29,165496,165457],{"class":305},[29,165498,4623],{"class":309},[29,165500,62808],{"class":103},[29,165502,51566],{"class":309},[29,165504,150017],{"class":103},[29,165506,165281],{"class":309},[14,165508,165510],{"id":165509},"_614-推导式","6.14 推导式",[171,165512,165513],{},"推导式用于快速生成容器。",[171,165515,165516],{},"列表推导式：",[19,165518,165520],{"className":30507,"code":165519,"language":30509,"meta":24,"style":24},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[26,165521,165522,165549],{"__ignoreMap":24},[29,165523,165524,165526,165528,165531,165533,165535,165537,165539,165541,165543,165545,165547],{"class":31,"line":32},[29,165525,164229],{"class":309},[29,165527,355],{"class":305},[29,165529,165530],{"class":309}," [i ",[29,165532,3200],{"class":305},[29,165534,9613],{"class":309},[29,165536,26172],{"class":305},[29,165538,32572],{"class":39},[29,165540,310],{"class":309},[29,165542,525],{"class":39},[29,165544,12610],{"class":309},[29,165546,652],{"class":39},[29,165548,97429],{"class":309},[29,165550,165551,165553],{"class":31,"line":43},[29,165552,30544],{"class":39},[29,165554,164445],{"class":309},[171,165556,165557],{},"带条件：",[19,165559,165561],{"className":30507,"code":165560,"language":30509,"meta":24,"style":24},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[26,165562,165563,165604],{"__ignoreMap":24},[29,165564,165565,165568,165570,165572,165574,165576,165578,165580,165582,165584,165586,165588,165590,165592,165594,165596,165598,165600,165602],{"class":31,"line":32},[29,165566,165567],{"class":309},"even_nums ",[29,165569,355],{"class":305},[29,165571,165530],{"class":309},[29,165573,3200],{"class":305},[29,165575,9613],{"class":309},[29,165577,26172],{"class":305},[29,165579,32572],{"class":39},[29,165581,310],{"class":309},[29,165583,525],{"class":39},[29,165585,12610],{"class":309},[29,165587,645],{"class":39},[29,165589,13889],{"class":309},[29,165591,1707],{"class":305},[29,165593,9613],{"class":309},[29,165595,636],{"class":305},[29,165597,14930],{"class":39},[29,165599,101688],{"class":305},[29,165601,4268],{"class":39},[29,165603,33375],{"class":309},[29,165605,165606,165608],{"class":31,"line":43},[29,165607,30544],{"class":39},[29,165609,165610],{"class":309},"(even_nums)\n",[171,165612,165613],{},"字典推导式：",[19,165615,165617],{"className":30507,"code":165616,"language":30509,"meta":24,"style":24},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[26,165618,165619,165653],{"__ignoreMap":24},[29,165620,165621,165624,165626,165629,165631,165633,165636,165638,165640,165642,165644,165646,165648,165650],{"class":31,"line":32},[29,165622,165623],{"class":309},"squares ",[29,165625,355],{"class":305},[29,165627,165628],{"class":309}," {i: i ",[29,165630,10836],{"class":305},[29,165632,14930],{"class":39},[29,165634,165635],{"class":305}," for",[29,165637,9613],{"class":309},[29,165639,26172],{"class":305},[29,165641,32572],{"class":39},[29,165643,310],{"class":309},[29,165645,525],{"class":39},[29,165647,12610],{"class":309},[29,165649,652],{"class":39},[29,165651,165652],{"class":309},")}\n",[29,165654,165655,165657],{"class":31,"line":43},[29,165656,30544],{"class":39},[29,165658,165659],{"class":309},"(squares)\n",[171,165661,165662],{},"集合推导式：",[19,165664,165666],{"className":30507,"code":165665,"language":30509,"meta":24,"style":24},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[26,165667,165668,165689],{"__ignoreMap":24},[29,165669,165670,165673,165675,165678,165680,165682,165684,165687],{"class":31,"line":32},[29,165671,165672],{"class":309},"chars ",[29,165674,355],{"class":305},[29,165676,165677],{"class":309}," {ch ",[29,165679,3200],{"class":305},[29,165681,159821],{"class":309},[29,165683,26172],{"class":305},[29,165685,165686],{"class":103}," \"hello\"",[29,165688,1741],{"class":309},[29,165690,165691,165693],{"class":31,"line":43},[29,165692,30544],{"class":39},[29,165694,165695],{"class":309},"(chars)\n",[171,165697,165698],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165700,165702],{"id":165701},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[19,165704,165706],{"className":30507,"code":165705,"language":30509,"meta":24,"style":24},"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",[26,165707,165708,165716,165736,165756,165776,165796,165800,165804,165812,165826,165835,165839,165849,165861,165865,165885,165894,165898,165914,165919,165923,165937,165941,165963,165999],{"__ignoreMap":24},[29,165709,165710,165712,165714],{"class":31,"line":32},[29,165711,159845],{"class":309},[29,165713,355],{"class":305},[29,165715,55576],{"class":309},[29,165717,165718,165720,165722,165724,165726,165728,165730,165732,165734],{"class":31,"line":43},[29,165719,148514],{"class":309},[29,165721,62808],{"class":103},[29,165723,51566],{"class":309},[29,165725,150017],{"class":103},[29,165727,12610],{"class":309},[29,165729,151601],{"class":103},[29,165731,51566],{"class":309},[29,165733,1297],{"class":39},[29,165735,5105],{"class":309},[29,165737,165738,165740,165742,165744,165746,165748,165750,165752,165754],{"class":31,"line":51},[29,165739,148514],{"class":309},[29,165741,62808],{"class":103},[29,165743,51566],{"class":309},[29,165745,151065],{"class":103},[29,165747,12610],{"class":309},[29,165749,151601],{"class":103},[29,165751,51566],{"class":309},[29,165753,1119],{"class":39},[29,165755,5105],{"class":309},[29,165757,165758,165760,165762,165764,165766,165768,165770,165772,165774],{"class":31,"line":59},[29,165759,148514],{"class":309},[29,165761,62808],{"class":103},[29,165763,51566],{"class":309},[29,165765,159860],{"class":103},[29,165767,12610],{"class":309},[29,165769,151601],{"class":103},[29,165771,51566],{"class":309},[29,165773,714],{"class":39},[29,165775,5105],{"class":309},[29,165777,165778,165780,165782,165784,165786,165788,165790,165792,165794],{"class":31,"line":67},[29,165779,148514],{"class":309},[29,165781,62808],{"class":103},[29,165783,51566],{"class":309},[29,165785,163439],{"class":103},[29,165787,12610],{"class":309},[29,165789,151601],{"class":103},[29,165791,51566],{"class":309},[29,165793,1190],{"class":39},[29,165795,5105],{"class":309},[29,165797,165798],{"class":31,"line":75},[29,165799,33375],{"class":309},[29,165801,165802],{"class":31,"line":83},[29,165803,2575],{"emptyLinePlaceholder":233},[29,165805,165806,165808,165810],{"class":31,"line":158},[29,165807,157389],{"class":309},[29,165809,355],{"class":305},[29,165811,47462],{"class":39},[29,165813,165814,165817,165819,165822,165824],{"class":31,"line":166},[29,165815,165816],{"class":309},"max_student ",[29,165818,355],{"class":305},[29,165820,165821],{"class":309}," students[",[29,165823,499],{"class":39},[29,165825,33375],{"class":309},[29,165827,165828,165831,165833],{"class":31,"line":1505},[29,165829,165830],{"class":309},"passed ",[29,165832,355],{"class":305},[29,165834,51967],{"class":309},[29,165836,165837],{"class":31,"line":1788},[29,165838,2575],{"emptyLinePlaceholder":233},[29,165840,165841,165843,165845,165847],{"class":31,"line":1793},[29,165842,3200],{"class":305},[29,165844,152266],{"class":309},[29,165846,26172],{"class":305},[29,165848,152271],{"class":309},[29,165850,165851,165853,165855,165857,165859],{"class":31,"line":1799},[29,165852,159436],{"class":309},[29,165854,9652],{"class":305},[29,165856,152278],{"class":309},[29,165858,151601],{"class":103},[29,165860,33375],{"class":309},[29,165862,165863],{"class":31,"line":1804},[29,165864,2575],{"emptyLinePlaceholder":233},[29,165866,165867,165869,165871,165873,165875,165877,165880,165882],{"class":31,"line":1818},[29,165868,3276],{"class":305},[29,165870,152278],{"class":309},[29,165872,151601],{"class":103},[29,165874,4618],{"class":309},[29,165876,1268],{"class":305},[29,165878,165879],{"class":309}," max_student[",[29,165881,151601],{"class":103},[29,165883,165884],{"class":309},"]:\n",[29,165886,165887,165890,165892],{"class":31,"line":1823},[29,165888,165889],{"class":309},"        max_student ",[29,165891,355],{"class":305},[29,165893,152294],{"class":309},[29,165895,165896],{"class":31,"line":1829},[29,165897,2575],{"emptyLinePlaceholder":233},[29,165899,165900,165902,165904,165906,165908,165910,165912],{"class":31,"line":1850},[29,165901,3276],{"class":305},[29,165903,152278],{"class":309},[29,165905,151601],{"class":103},[29,165907,4618],{"class":309},[29,165909,1886],{"class":305},[29,165911,157966],{"class":39},[29,165913,3914],{"class":309},[29,165915,165916],{"class":31,"line":1855},[29,165917,165918],{"class":309},"        passed.append(student)\n",[29,165920,165921],{"class":31,"line":1869},[29,165922,2575],{"emptyLinePlaceholder":233},[29,165924,165925,165927,165929,165931,165933,165935],{"class":31,"line":1874},[29,165926,163903],{"class":309},[29,165928,355],{"class":305},[29,165930,163908],{"class":309},[29,165932,892],{"class":305},[29,165934,7506],{"class":39},[29,165936,165124],{"class":309},[29,165938,165939],{"class":31,"line":1903},[29,165940,2575],{"emptyLinePlaceholder":233},[29,165942,165943,165945,165947,165949,165951,165953,165955,165957,165959,165961],{"class":31,"line":1908},[29,165944,30544],{"class":39},[29,165946,310],{"class":309},[29,165948,361],{"class":305},[29,165950,163926],{"class":103},[29,165952,1204],{"class":39},[29,165954,163931],{"class":309},[29,165956,157288],{"class":305},[29,165958,1254],{"class":39},[29,165960,559],{"class":103},[29,165962,316],{"class":309},[29,165964,165965,165967,165969,165971,165974,165976,165979,165981,165983,165985,165987,165989,165991,165993,165995,165997],{"class":31,"line":1925},[29,165966,30544],{"class":39},[29,165968,310],{"class":309},[29,165970,361],{"class":305},[29,165972,165973],{"class":103},"\"最高分学生:",[29,165975,1204],{"class":39},[29,165977,165978],{"class":309},"max_student[",[29,165980,153011],{"class":103},[29,165982,1248],{"class":309},[29,165984,1254],{"class":39},[29,165986,4623],{"class":39},[29,165988,165978],{"class":309},[29,165990,153049],{"class":103},[29,165992,1248],{"class":309},[29,165994,1254],{"class":39},[29,165996,559],{"class":103},[29,165998,316],{"class":309},[29,166000,166001,166003,166005,166007,166010,166013,166016,166018,166020],{"class":31,"line":1930},[29,166002,30544],{"class":39},[29,166004,310],{"class":309},[29,166006,361],{"class":305},[29,166008,166009],{"class":103},"\"及格人数:",[29,166011,166012],{"class":39},"{len",[29,166014,166015],{"class":309},"(passed)",[29,166017,1254],{"class":39},[29,166019,559],{"class":103},[29,166021,316],{"class":309},[14,166023,166025],{"id":166024},"_616-易错点","6.16 易错点",[259,166027,166028,166031,166034,166037,166043,166052],{},[178,166029,166030],{},"列表可变，元组和字符串不可变。",[178,166032,166033],{},"切片结束位置不包含。",[178,166035,166036],{},"字典通过 key 取值，不是通过索引。",[178,166038,166039,166040,28514],{},"空集合要用 ",[26,166041,166042],{},"set()",[178,166044,104495,166045,166048,166049,28514],{},[26,166046,166047],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[26,166050,166051],{},"get()",[178,166053,166054],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166056,166058],{"id":166057},"_617-本章练习","6.17 本章练习",[259,166060,166061,166064,166067,166070,166073],{},[178,166062,166063],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[178,166065,166066],{},"输入一句话，统计每个字符出现次数。",[178,166068,166069],{},"使用集合去除列表中的重复元素。",[178,166071,166072],{},"使用字典保存一个学生的信息，并实现修改成绩。",[178,166074,166075],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[223,166077,166078],{},"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":24,"searchDepth":43,"depth":43,"links":166080},[166081,166082,166083,166084,166085,166086,166087,166088,166089,166090,166091,166092,166093,166094,166095,166096,166097],{"id":163061,"depth":43,"text":163062},{"id":163178,"depth":43,"text":163179},{"id":163268,"depth":43,"text":163269},{"id":163392,"depth":43,"text":163393},{"id":163755,"depth":43,"text":163756},{"id":163942,"depth":43,"text":163943},{"id":164061,"depth":43,"text":164062},{"id":164203,"depth":43,"text":164204},{"id":164390,"depth":43,"text":164391},{"id":164634,"depth":43,"text":164635},{"id":164844,"depth":43,"text":164845},{"id":164929,"depth":43,"text":164930},{"id":165227,"depth":43,"text":165228},{"id":165509,"depth":43,"text":165510},{"id":165701,"depth":43,"text":165702},{"id":166024,"depth":43,"text":166025},{"id":166057,"depth":43,"text":166058},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163053,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166104,"title":166105,"body":166106,"description":230,"extension":231,"meta":168278,"navigation":233,"path":168279,"seo":168280,"stem":168281,"__hash__":168282},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166107,"toc":168253},[166108,166111,166115,166118,166198,166201,166222,166225,166229,166232,166294,166297,166314,166318,166321,166366,166368,166376,166380,166383,166465,166468,166471,166496,166499,166522,166526,166529,166531,166593,166596,166598,166649,166653,166657,166663,166768,166772,166778,166849,166853,166856,166924,166927,167007,167011,167017,167053,167056,167059,167169,167175,167179,167182,167254,167257,167261,167265,167270,167332,167336,167341,167409,167413,167418,167534,167538,167541,167621,167624,167628,167631,167735,167737,167752,167755,167759,167897,167905,167909,167911,167922,167924,168182,168186,168218,168222,168250],[10,166109,166105],{"id":166110},"_7-函数进阶",[14,166112,166114],{"id":166113},"_71-多返回值","7.1 多返回值",[171,166116,166117],{},"Python 函数可以返回多个值，本质上返回的是元组。",[19,166119,166121],{"className":30507,"code":166120,"language":30509,"meta":24,"style":24},"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",[26,166122,166123,166132,166140,166148,166157,166164,166168,166172,166181,166187],{"__ignoreMap":24},[29,166124,166125,166127,166130],{"class":31,"line":32},[29,166126,32076],{"class":305},[29,166128,166129],{"class":35}," get_info",[29,166131,32082],{"class":309},[29,166133,166134,166136,166138],{"class":31,"line":43},[29,166135,152499],{"class":309},[29,166137,355],{"class":305},[29,166139,149482],{"class":103},[29,166141,166142,166144,166146],{"class":31,"line":51},[29,166143,152515],{"class":309},[29,166145,355],{"class":305},[29,166147,146680],{"class":39},[29,166149,166150,166152,166154],{"class":31,"line":59},[29,166151,152530],{"class":309},[29,166153,355],{"class":305},[29,166155,166156],{"class":39}," 95\n",[29,166158,166159,166161],{"class":31,"line":67},[29,166160,4265],{"class":305},[29,166162,166163],{"class":309}," name, age, score\n",[29,166165,166166],{"class":31,"line":75},[29,166167,2575],{"emptyLinePlaceholder":233},[29,166169,166170],{"class":31,"line":83},[29,166171,2575],{"emptyLinePlaceholder":233},[29,166173,166174,166176,166178],{"class":31,"line":158},[29,166175,161435],{"class":309},[29,166177,355],{"class":305},[29,166179,166180],{"class":309}," get_info()\n",[29,166182,166183,166185],{"class":31,"line":166},[29,166184,30544],{"class":39},[29,166186,76714],{"class":309},[29,166188,166189,166191,166193,166195],{"class":31,"line":1505},[29,166190,30544],{"class":39},[29,166192,310],{"class":309},[29,166194,103236],{"class":39},[29,166196,166197],{"class":309},"(result))\n",[171,166199,166200],{},"可以直接解包：",[19,166202,166204],{"className":30507,"code":166203,"language":30509,"meta":24,"style":24},"name, age, score = get_info()\nprint(name, age, score)\n",[26,166205,166206,166215],{"__ignoreMap":24},[29,166207,166208,166211,166213],{"class":31,"line":32},[29,166209,166210],{"class":309},"name, age, score ",[29,166212,355],{"class":305},[29,166214,166180],{"class":309},[29,166216,166217,166219],{"class":31,"line":43},[29,166218,30544],{"class":39},[29,166220,166221],{"class":309},"(name, age, score)\n",[171,166223,166224],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166226,166228],{"id":166227},"_72-位置参数","7.2 位置参数",[171,166230,166231],{},"位置参数按顺序传递。",[19,166233,166235],{"className":30507,"code":166234,"language":30509,"meta":24,"style":24},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[26,166236,166237,166245,166273,166277,166281],{"__ignoreMap":24},[29,166238,166239,166241,166243],{"class":31,"line":32},[29,166240,32076],{"class":305},[29,166242,149501],{"class":35},[29,166244,149504],{"class":309},[29,166246,166247,166249,166251,166253,166255,166257,166259,166261,166263,166265,166267,166269,166271],{"class":31,"line":43},[29,166248,31428],{"class":39},[29,166250,310],{"class":309},[29,166252,361],{"class":305},[29,166254,149515],{"class":103},[29,166256,1204],{"class":39},[29,166258,79939],{"class":309},[29,166260,1254],{"class":39},[29,166262,149524],{"class":103},[29,166264,1204],{"class":39},[29,166266,70350],{"class":309},[29,166268,1254],{"class":39},[29,166270,149533],{"class":103},[29,166272,316],{"class":309},[29,166274,166275],{"class":31,"line":51},[29,166276,2575],{"emptyLinePlaceholder":233},[29,166278,166279],{"class":31,"line":59},[29,166280,2575],{"emptyLinePlaceholder":233},[29,166282,166283,166286,166288,166290,166292],{"class":31,"line":67},[29,166284,166285],{"class":309},"introduce(",[29,166287,150017],{"class":103},[29,166289,12610],{"class":309},[29,166291,958],{"class":39},[29,166293,316],{"class":309},[171,166295,166296],{},"顺序错了就会得到错误含义：",[19,166298,166300],{"className":30507,"code":166299,"language":30509,"meta":24,"style":24},"introduce(18, \"小明\")\n",[26,166301,166302],{"__ignoreMap":24},[29,166303,166304,166306,166308,166310,166312],{"class":31,"line":32},[29,166305,166285],{"class":309},[29,166307,958],{"class":39},[29,166309,12610],{"class":309},[29,166311,150017],{"class":103},[29,166313,316],{"class":309},[14,166315,166317],{"id":166316},"_73-关键字参数","7.3 关键字参数",[171,166319,166320],{},"关键字参数按参数名传递。",[19,166322,166324],{"className":30507,"code":166323,"language":30509,"meta":24,"style":24},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[26,166325,166326,166346],{"__ignoreMap":24},[29,166327,166328,166330,166332,166334,166336,166338,166340,166342,166344],{"class":31,"line":32},[29,166329,166285],{"class":309},[29,166331,79939],{"class":5391},[29,166333,355],{"class":305},[29,166335,150017],{"class":103},[29,166337,12610],{"class":309},[29,166339,70350],{"class":5391},[29,166341,355],{"class":305},[29,166343,958],{"class":39},[29,166345,316],{"class":309},[29,166347,166348,166350,166352,166354,166356,166358,166360,166362,166364],{"class":31,"line":43},[29,166349,166285],{"class":309},[29,166351,70350],{"class":5391},[29,166353,355],{"class":305},[29,166355,958],{"class":39},[29,166357,12610],{"class":309},[29,166359,79939],{"class":5391},[29,166361,355],{"class":305},[29,166363,150017],{"class":103},[29,166365,316],{"class":309},[171,166367,118063],{},[259,166369,166370,166373],{},[178,166371,166372],{},"顺序不容易错。",[178,166374,166375],{},"调用时可读性更强。",[14,166377,166379],{"id":166378},"_74-默认参数","7.4 默认参数",[171,166381,166382],{},"默认参数给参数设置默认值。",[19,166384,166386],{"className":30507,"code":166385,"language":30509,"meta":24,"style":24},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[26,166387,166388,166404,166434,166438,166442,166452],{"__ignoreMap":24},[29,166389,166390,166392,166394,166397,166399,166402],{"class":31,"line":32},[29,166391,32076],{"class":305},[29,166393,122222],{"class":35},[29,166395,166396],{"class":309},"(host, port",[29,166398,355],{"class":305},[29,166400,166401],{"class":39},"3306",[29,166403,30915],{"class":309},[29,166405,166406,166408,166410,166412,166415,166417,166419,166421,166423,166425,166428,166430,166432],{"class":31,"line":43},[29,166407,31428],{"class":39},[29,166409,310],{"class":309},[29,166411,361],{"class":305},[29,166413,166414],{"class":103},"\"连接",[29,166416,1204],{"class":39},[29,166418,27524],{"class":309},[29,166420,1254],{"class":39},[29,166422,1167],{"class":103},[29,166424,1204],{"class":39},[29,166426,166427],{"class":309},"port",[29,166429,1254],{"class":39},[29,166431,559],{"class":103},[29,166433,316],{"class":309},[29,166435,166436],{"class":31,"line":51},[29,166437,2575],{"emptyLinePlaceholder":233},[29,166439,166440],{"class":31,"line":59},[29,166441,2575],{"emptyLinePlaceholder":233},[29,166443,166444,166447,166450],{"class":31,"line":67},[29,166445,166446],{"class":309},"connect(",[29,166448,166449],{"class":103},"\"localhost\"",[29,166451,316],{"class":309},[29,166453,166454,166456,166458,166460,166463],{"class":31,"line":75},[29,166455,166446],{"class":309},[29,166457,166449],{"class":103},[29,166459,12610],{"class":309},[29,166461,166462],{"class":39},"6379",[29,166464,316],{"class":309},[171,166466,166467],{},"注意：默认参数必须放在非默认参数后面。",[171,166469,166470],{},"错误：",[19,166472,166474],{"className":30507,"code":166473,"language":30509,"meta":24,"style":24},"def connect(port=3306, host):\n    pass\n",[26,166475,166476,166492],{"__ignoreMap":24},[29,166477,166478,166480,166482,166485,166487,166489],{"class":31,"line":32},[29,166479,32076],{"class":305},[29,166481,122222],{"class":35},[29,166483,166484],{"class":309},"(port",[29,166486,355],{"class":305},[29,166488,166401],{"class":39},[29,166490,166491],{"class":309},", host):\n",[29,166493,166494],{"class":31,"line":43},[29,166495,149666],{"class":305},[171,166497,166498],{},"正确：",[19,166500,166502],{"className":30507,"code":166501,"language":30509,"meta":24,"style":24},"def connect(host, port=3306):\n    pass\n",[26,166503,166504,166518],{"__ignoreMap":24},[29,166505,166506,166508,166510,166512,166514,166516],{"class":31,"line":32},[29,166507,32076],{"class":305},[29,166509,122222],{"class":35},[29,166511,166396],{"class":309},[29,166513,355],{"class":305},[29,166515,166401],{"class":39},[29,166517,30915],{"class":309},[29,166519,166520],{"class":31,"line":43},[29,166521,149666],{"class":305},[14,166523,166525],{"id":166524},"_75-默认参数的坑","7.5 默认参数的坑",[171,166527,166528],{},"不要使用可变对象作为默认参数。",[171,166530,157752],{},[19,166532,166534],{"className":30507,"code":166533,"language":30509,"meta":24,"style":24},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[26,166535,166536,166551,166556,166563,166567,166571,166582],{"__ignoreMap":24},[29,166537,166538,166540,166543,166546,166548],{"class":31,"line":32},[29,166539,32076],{"class":305},[29,166541,166542],{"class":35}," add_item",[29,166544,166545],{"class":309},"(item, items",[29,166547,355],{"class":305},[29,166549,166550],{"class":309},"[]):\n",[29,166552,166553],{"class":31,"line":43},[29,166554,166555],{"class":309},"    items.append(item)\n",[29,166557,166558,166560],{"class":31,"line":51},[29,166559,4265],{"class":305},[29,166561,166562],{"class":309}," items\n",[29,166564,166565],{"class":31,"line":59},[29,166566,2575],{"emptyLinePlaceholder":233},[29,166568,166569],{"class":31,"line":67},[29,166570,2575],{"emptyLinePlaceholder":233},[29,166572,166573,166575,166578,166580],{"class":31,"line":75},[29,166574,30544],{"class":39},[29,166576,166577],{"class":309},"(add_item(",[29,166579,165454],{"class":103},[29,166581,30626],{"class":309},[29,166583,166584,166586,166588,166591],{"class":31,"line":83},[29,166585,30544],{"class":39},[29,166587,166577],{"class":309},[29,166589,166590],{"class":103},"\"b\"",[29,166592,30626],{"class":309},[171,166594,166595],{},"第二次调用会复用第一次的列表。",[171,166597,156017],{},[19,166599,166601],{"className":30507,"code":166600,"language":30509,"meta":24,"style":24},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[26,166602,166603,166617,166630,166639,166643],{"__ignoreMap":24},[29,166604,166605,166607,166609,166611,166613,166615],{"class":31,"line":32},[29,166606,32076],{"class":305},[29,166608,166542],{"class":35},[29,166610,166545],{"class":309},[29,166612,355],{"class":305},[29,166614,95815],{"class":39},[29,166616,30915],{"class":309},[29,166618,166619,166621,166624,166626,166628],{"class":31,"line":43},[29,166620,3276],{"class":305},[29,166622,166623],{"class":309}," items ",[29,166625,39056],{"class":305},[29,166627,39062],{"class":39},[29,166629,3914],{"class":309},[29,166631,166632,166635,166637],{"class":31,"line":51},[29,166633,166634],{"class":309},"        items ",[29,166636,355],{"class":305},[29,166638,51967],{"class":309},[29,166640,166641],{"class":31,"line":59},[29,166642,166555],{"class":309},[29,166644,166645,166647],{"class":31,"line":67},[29,166646,4265],{"class":305},[29,166648,166562],{"class":309},[14,166650,166652],{"id":166651},"_76-不定长参数","7.6 不定长参数",[275,166654,166656],{"id":166655},"_761-args","7.6.1 *args",[171,166658,166659,166662],{},[26,166660,166661],{},"*args"," 接收任意数量的位置参数，得到元组。",[19,166664,166666],{"className":30507,"code":166665,"language":30509,"meta":24,"style":24},"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",[26,166667,166668,166681,166689,166700,166709,166715,166719,166723,166742],{"__ignoreMap":24},[29,166669,166670,166672,166674,166676,166678],{"class":31,"line":32},[29,166671,32076],{"class":305},[29,166673,5384],{"class":35},[29,166675,310],{"class":309},[29,166677,763],{"class":305},[29,166679,166680],{"class":309},"args):\n",[29,166682,166683,166685,166687],{"class":31,"line":43},[29,166684,159436],{"class":309},[29,166686,355],{"class":305},[29,166688,47462],{"class":39},[29,166690,166691,166693,166695,166697],{"class":31,"line":51},[29,166692,3376],{"class":305},[29,166694,156309],{"class":309},[29,166696,26172],{"class":305},[29,166698,166699],{"class":309}," args:\n",[29,166701,166702,166704,166706],{"class":31,"line":59},[29,166703,160111],{"class":309},[29,166705,9652],{"class":305},[29,166707,166708],{"class":309}," num\n",[29,166710,166711,166713],{"class":31,"line":67},[29,166712,4265],{"class":305},[29,166714,162416],{"class":309},[29,166716,166717],{"class":31,"line":75},[29,166718,2575],{"emptyLinePlaceholder":233},[29,166720,166721],{"class":31,"line":83},[29,166722,2575],{"emptyLinePlaceholder":233},[29,166724,166725,166727,166730,166732,166734,166736,166738,166740],{"class":31,"line":158},[29,166726,30544],{"class":39},[29,166728,166729],{"class":309},"(add(",[29,166731,525],{"class":39},[29,166733,12610],{"class":309},[29,166735,386],{"class":39},[29,166737,12610],{"class":309},[29,166739,380],{"class":39},[29,166741,30626],{"class":309},[29,166743,166744,166746,166748,166750,166752,166754,166756,166758,166760,166762,166764,166766],{"class":31,"line":166},[29,166745,30544],{"class":39},[29,166747,166729],{"class":309},[29,166749,525],{"class":39},[29,166751,12610],{"class":309},[29,166753,386],{"class":39},[29,166755,12610],{"class":309},[29,166757,380],{"class":39},[29,166759,12610],{"class":309},[29,166761,601],{"class":39},[29,166763,12610],{"class":309},[29,166765,627],{"class":39},[29,166767,30626],{"class":309},[275,166769,166771],{"id":166770},"_762-kwargs","7.6.2 **kwargs",[171,166773,166774,166777],{},[26,166775,166776],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[19,166779,166781],{"className":30507,"code":166780,"language":30509,"meta":24,"style":24},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[26,166782,166783,166796,166807,166813,166817,166821],{"__ignoreMap":24},[29,166784,166785,166787,166789,166791,166793],{"class":31,"line":32},[29,166786,32076],{"class":305},[29,166788,162074],{"class":35},[29,166790,310],{"class":309},[29,166792,10836],{"class":305},[29,166794,166795],{"class":309},"kwargs):\n",[29,166797,166798,166800,166802,166804],{"class":31,"line":43},[29,166799,3376],{"class":305},[29,166801,164914],{"class":309},[29,166803,26172],{"class":305},[29,166805,166806],{"class":309}," kwargs.items():\n",[29,166808,166809,166811],{"class":31,"line":51},[29,166810,32580],{"class":39},[29,166812,164926],{"class":309},[29,166814,166815],{"class":31,"line":59},[29,166816,2575],{"emptyLinePlaceholder":233},[29,166818,166819],{"class":31,"line":67},[29,166820,2575],{"emptyLinePlaceholder":233},[29,166822,166823,166825,166827,166829,166831,166833,166835,166837,166839,166841,166843,166845,166847],{"class":31,"line":75},[29,166824,162139],{"class":309},[29,166826,79939],{"class":5391},[29,166828,355],{"class":305},[29,166830,150017],{"class":103},[29,166832,12610],{"class":309},[29,166834,70350],{"class":5391},[29,166836,355],{"class":305},[29,166838,958],{"class":39},[29,166840,12610],{"class":309},[29,166842,70401],{"class":5391},[29,166844,355],{"class":305},[29,166846,69398],{"class":103},[29,166848,316],{"class":309},[14,166850,166852],{"id":166851},"_77-参数解包","7.7 参数解包",[171,166854,166855],{},"列表或元组解包为位置参数：",[19,166857,166859],{"className":30507,"code":166858,"language":30509,"meta":24,"style":24},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[26,166860,166861,166870,166885,166889,166893,166913],{"__ignoreMap":24},[29,166862,166863,166865,166867],{"class":31,"line":32},[29,166864,32076],{"class":305},[29,166866,5384],{"class":35},[29,166868,166869],{"class":309},"(a, b, c):\n",[29,166871,166872,166874,166876,166878,166880,166882],{"class":31,"line":43},[29,166873,4265],{"class":305},[29,166875,11044],{"class":309},[29,166877,789],{"class":305},[29,166879,11057],{"class":309},[29,166881,789],{"class":305},[29,166883,166884],{"class":309}," c\n",[29,166886,166887],{"class":31,"line":51},[29,166888,2575],{"emptyLinePlaceholder":233},[29,166890,166891],{"class":31,"line":59},[29,166892,2575],{"emptyLinePlaceholder":233},[29,166894,166895,166897,166899,166901,166903,166905,166907,166909,166911],{"class":31,"line":67},[29,166896,164229],{"class":309},[29,166898,355],{"class":305},[29,166900,52355],{"class":309},[29,166902,525],{"class":39},[29,166904,12610],{"class":309},[29,166906,386],{"class":39},[29,166908,12610],{"class":309},[29,166910,380],{"class":39},[29,166912,33375],{"class":309},[29,166914,166915,166917,166919,166921],{"class":31,"line":75},[29,166916,30544],{"class":39},[29,166918,166729],{"class":309},[29,166920,763],{"class":305},[29,166922,166923],{"class":309},"nums))\n",[171,166925,166926],{},"字典解包为关键字参数：",[19,166928,166930],{"className":30507,"code":166929,"language":30509,"meta":24,"style":24},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[26,166931,166932,166940,166966,166970,166974,166998],{"__ignoreMap":24},[29,166933,166934,166936,166938],{"class":31,"line":32},[29,166935,32076],{"class":305},[29,166937,149501],{"class":35},[29,166939,149504],{"class":309},[29,166941,166942,166944,166946,166948,166950,166952,166954,166956,166958,166960,166962,166964],{"class":31,"line":43},[29,166943,31428],{"class":39},[29,166945,310],{"class":309},[29,166947,361],{"class":305},[29,166949,559],{"class":103},[29,166951,1204],{"class":39},[29,166953,79939],{"class":309},[29,166955,1254],{"class":39},[29,166957,4623],{"class":39},[29,166959,70350],{"class":309},[29,166961,1254],{"class":39},[29,166963,559],{"class":103},[29,166965,316],{"class":309},[29,166967,166968],{"class":31,"line":51},[29,166969,2575],{"emptyLinePlaceholder":233},[29,166971,166972],{"class":31,"line":59},[29,166973,2575],{"emptyLinePlaceholder":233},[29,166975,166976,166978,166980,166982,166984,166986,166988,166990,166992,166994,166996],{"class":31,"line":67},[29,166977,116443],{"class":309},[29,166979,355],{"class":305},[29,166981,4623],{"class":309},[29,166983,62808],{"class":103},[29,166985,51566],{"class":309},[29,166987,150017],{"class":103},[29,166989,12610],{"class":309},[29,166991,69253],{"class":103},[29,166993,51566],{"class":309},[29,166995,958],{"class":39},[29,166997,1741],{"class":309},[29,166999,167000,167002,167004],{"class":31,"line":75},[29,167001,166285],{"class":309},[29,167003,10836],{"class":305},[29,167005,167006],{"class":309},"info)\n",[14,167008,167010],{"id":167009},"_78-匿名函数lambda","7.8 匿名函数lambda",[171,167012,167013,167016],{},[26,167014,167015],{},"lambda"," 用于定义简单匿名函数。",[19,167018,167020],{"className":30507,"code":167019,"language":30509,"meta":24,"style":24},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[26,167021,167022,167039],{"__ignoreMap":24},[29,167023,167024,167027,167029,167032,167035,167037],{"class":31,"line":32},[29,167025,167026],{"class":309},"add ",[29,167028,355],{"class":305},[29,167030,167031],{"class":305}," lambda",[29,167033,167034],{"class":309}," a, b: a ",[29,167036,789],{"class":305},[29,167038,151233],{"class":309},[29,167040,167041,167043,167045,167047,167049,167051],{"class":31,"line":43},[29,167042,30544],{"class":39},[29,167044,166729],{"class":309},[29,167046,525],{"class":39},[29,167048,12610],{"class":309},[29,167050,386],{"class":39},[29,167052,30626],{"class":309},[171,167054,167055],{},"常和排序、过滤等函数一起使用。",[171,167057,167058],{},"按分数排序：",[19,167060,167062],{"className":30507,"code":167061,"language":30509,"meta":24,"style":24},"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",[26,167063,167064,167072,167092,167112,167132,167136,167140,167163],{"__ignoreMap":24},[29,167065,167066,167068,167070],{"class":31,"line":32},[29,167067,159845],{"class":309},[29,167069,355],{"class":305},[29,167071,55576],{"class":309},[29,167073,167074,167076,167078,167080,167082,167084,167086,167088,167090],{"class":31,"line":43},[29,167075,148514],{"class":309},[29,167077,62808],{"class":103},[29,167079,51566],{"class":309},[29,167081,150017],{"class":103},[29,167083,12610],{"class":309},[29,167085,151601],{"class":103},[29,167087,51566],{"class":309},[29,167089,1297],{"class":39},[29,167091,5105],{"class":309},[29,167093,167094,167096,167098,167100,167102,167104,167106,167108,167110],{"class":31,"line":51},[29,167095,148514],{"class":309},[29,167097,62808],{"class":103},[29,167099,51566],{"class":309},[29,167101,151065],{"class":103},[29,167103,12610],{"class":309},[29,167105,151601],{"class":103},[29,167107,51566],{"class":309},[29,167109,1119],{"class":39},[29,167111,5105],{"class":309},[29,167113,167114,167116,167118,167120,167122,167124,167126,167128,167130],{"class":31,"line":59},[29,167115,148514],{"class":309},[29,167117,62808],{"class":103},[29,167119,51566],{"class":309},[29,167121,159860],{"class":103},[29,167123,12610],{"class":309},[29,167125,151601],{"class":103},[29,167127,51566],{"class":309},[29,167129,714],{"class":39},[29,167131,5105],{"class":309},[29,167133,167134],{"class":31,"line":67},[29,167135,33375],{"class":309},[29,167137,167138],{"class":31,"line":75},[29,167139,2575],{"emptyLinePlaceholder":233},[29,167141,167142,167145,167147,167149,167151,167153,167155,167157,167159,167161],{"class":31,"line":83},[29,167143,167144],{"class":309},"students.sort(",[29,167146,154075],{"class":5391},[29,167148,154078],{"class":305},[29,167150,154081],{"class":309},[29,167152,151601],{"class":103},[29,167154,112331],{"class":309},[29,167156,163657],{"class":5391},[29,167158,355],{"class":305},[29,167160,31605],{"class":39},[29,167162,316],{"class":309},[29,167164,167165,167167],{"class":31,"line":158},[29,167166,30544],{"class":39},[29,167168,165124],{"class":309},[171,167170,167171,167172,167174],{},"如果逻辑复杂，不要硬写 ",[26,167173,167015],{},"，定义普通函数更清晰。",[14,167176,167178],{"id":167177},"_79-函数作为参数","7.9 函数作为参数",[171,167180,167181],{},"函数可以作为参数传给另一个函数。",[19,167183,167185],{"className":30507,"code":167184,"language":30509,"meta":24,"style":24},"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",[26,167186,167187,167195,167205,167209,167213,167223,167230,167234,167238],{"__ignoreMap":24},[29,167188,167189,167191,167193],{"class":31,"line":32},[29,167190,32076],{"class":305},[29,167192,5384],{"class":35},[29,167194,151222],{"class":309},[29,167196,167197,167199,167201,167203],{"class":31,"line":43},[29,167198,4265],{"class":305},[29,167200,11044],{"class":309},[29,167202,789],{"class":305},[29,167204,151233],{"class":309},[29,167206,167207],{"class":31,"line":51},[29,167208,2575],{"emptyLinePlaceholder":233},[29,167210,167211],{"class":31,"line":59},[29,167212,2575],{"emptyLinePlaceholder":233},[29,167214,167215,167217,167220],{"class":31,"line":67},[29,167216,32076],{"class":305},[29,167218,167219],{"class":35}," calculate",[29,167221,167222],{"class":309},"(a, b, func):\n",[29,167224,167225,167227],{"class":31,"line":75},[29,167226,4265],{"class":305},[29,167228,167229],{"class":309}," func(a, b)\n",[29,167231,167232],{"class":31,"line":83},[29,167233,2575],{"emptyLinePlaceholder":233},[29,167235,167236],{"class":31,"line":158},[29,167237,2575],{"emptyLinePlaceholder":233},[29,167239,167240,167242,167245,167247,167249,167251],{"class":31,"line":166},[29,167241,30544],{"class":39},[29,167243,167244],{"class":309},"(calculate(",[29,167246,754],{"class":39},[29,167248,12610],{"class":309},[29,167250,1008],{"class":39},[29,167252,167253],{"class":309},", add))\n",[171,167255,167256],{},"这种思想在排序、回调、框架中经常出现。",[14,167258,167260],{"id":167259},"_710-mapfiltersorted","7.10 map、filter、sorted",[275,167262,167264],{"id":167263},"_7101-map","7.10.1 map",[171,167266,167267,167269],{},[26,167268,74173],{}," 对每个元素执行函数。",[19,167271,167273],{"className":30507,"code":167272,"language":30509,"meta":24,"style":24},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[26,167274,167275,167299,167322],{"__ignoreMap":24},[29,167276,167277,167279,167281,167283,167285,167287,167289,167291,167293,167295,167297],{"class":31,"line":32},[29,167278,164229],{"class":309},[29,167280,355],{"class":305},[29,167282,52355],{"class":309},[29,167284,525],{"class":39},[29,167286,12610],{"class":309},[29,167288,386],{"class":39},[29,167290,12610],{"class":309},[29,167292,380],{"class":39},[29,167294,12610],{"class":309},[29,167296,601],{"class":39},[29,167298,33375],{"class":309},[29,167300,167301,167303,167305,167308,167310,167312,167315,167317,167319],{"class":31,"line":43},[29,167302,161435],{"class":309},[29,167304,355],{"class":305},[29,167306,167307],{"class":39}," map",[29,167309,310],{"class":309},[29,167311,167015],{"class":305},[29,167313,167314],{"class":309}," x: x ",[29,167316,763],{"class":305},[29,167318,14930],{"class":39},[29,167320,167321],{"class":309},", nums)\n",[29,167323,167324,167326,167328,167330],{"class":31,"line":51},[29,167325,30544],{"class":39},[29,167327,310],{"class":309},[29,167329,154199],{"class":39},[29,167331,166197],{"class":309},[275,167333,167335],{"id":167334},"_7102-filter","7.10.2 filter",[171,167337,167338,167340],{},[26,167339,80180],{}," 保留满足条件的元素。",[19,167342,167344],{"className":30507,"code":167343,"language":30509,"meta":24,"style":24},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[26,167345,167346,167374,167399],{"__ignoreMap":24},[29,167347,167348,167350,167352,167354,167356,167358,167360,167362,167364,167366,167368,167370,167372],{"class":31,"line":32},[29,167349,164229],{"class":309},[29,167351,355],{"class":305},[29,167353,52355],{"class":309},[29,167355,525],{"class":39},[29,167357,12610],{"class":309},[29,167359,386],{"class":39},[29,167361,12610],{"class":309},[29,167363,380],{"class":39},[29,167365,12610],{"class":309},[29,167367,601],{"class":39},[29,167369,12610],{"class":309},[29,167371,627],{"class":39},[29,167373,33375],{"class":309},[29,167375,167376,167378,167380,167383,167385,167387,167389,167391,167393,167395,167397],{"class":31,"line":43},[29,167377,161435],{"class":309},[29,167379,355],{"class":305},[29,167381,167382],{"class":39}," filter",[29,167384,310],{"class":309},[29,167386,167015],{"class":305},[29,167388,167314],{"class":309},[29,167390,636],{"class":305},[29,167392,14930],{"class":39},[29,167394,101688],{"class":305},[29,167396,4268],{"class":39},[29,167398,167321],{"class":309},[29,167400,167401,167403,167405,167407],{"class":31,"line":51},[29,167402,30544],{"class":39},[29,167404,310],{"class":309},[29,167406,154199],{"class":39},[29,167408,166197],{"class":309},[275,167410,167412],{"id":167411},"_7103-sorted","7.10.3 sorted",[171,167414,167415,167417],{},[26,167416,165365],{}," 返回排序后的新列表。",[19,167419,167421],{"className":30507,"code":167420,"language":30509,"meta":24,"style":24},"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",[26,167422,167423,167431,167451,167471,167491,167495,167499,167528],{"__ignoreMap":24},[29,167424,167425,167427,167429],{"class":31,"line":32},[29,167426,159845],{"class":309},[29,167428,355],{"class":305},[29,167430,55576],{"class":309},[29,167432,167433,167435,167437,167439,167441,167443,167445,167447,167449],{"class":31,"line":43},[29,167434,148514],{"class":309},[29,167436,62808],{"class":103},[29,167438,51566],{"class":309},[29,167440,150017],{"class":103},[29,167442,12610],{"class":309},[29,167444,151601],{"class":103},[29,167446,51566],{"class":309},[29,167448,1297],{"class":39},[29,167450,5105],{"class":309},[29,167452,167453,167455,167457,167459,167461,167463,167465,167467,167469],{"class":31,"line":51},[29,167454,148514],{"class":309},[29,167456,62808],{"class":103},[29,167458,51566],{"class":309},[29,167460,151065],{"class":103},[29,167462,12610],{"class":309},[29,167464,151601],{"class":103},[29,167466,51566],{"class":309},[29,167468,1119],{"class":39},[29,167470,5105],{"class":309},[29,167472,167473,167475,167477,167479,167481,167483,167485,167487,167489],{"class":31,"line":59},[29,167474,148514],{"class":309},[29,167476,62808],{"class":103},[29,167478,51566],{"class":309},[29,167480,159860],{"class":103},[29,167482,12610],{"class":309},[29,167484,151601],{"class":103},[29,167486,51566],{"class":309},[29,167488,714],{"class":39},[29,167490,5105],{"class":309},[29,167492,167493],{"class":31,"line":67},[29,167494,33375],{"class":309},[29,167496,167497],{"class":31,"line":75},[29,167498,2575],{"emptyLinePlaceholder":233},[29,167500,167501,167503,167505,167507,167510,167512,167514,167516,167518,167520,167522,167524,167526],{"class":31,"line":83},[29,167502,161435],{"class":309},[29,167504,355],{"class":305},[29,167506,163733],{"class":39},[29,167508,167509],{"class":309},"(students, ",[29,167511,154075],{"class":5391},[29,167513,154078],{"class":305},[29,167515,154081],{"class":309},[29,167517,151601],{"class":103},[29,167519,112331],{"class":309},[29,167521,163657],{"class":5391},[29,167523,355],{"class":305},[29,167525,31605],{"class":39},[29,167527,316],{"class":309},[29,167529,167530,167532],{"class":31,"line":158},[29,167531,30544],{"class":39},[29,167533,76714],{"class":309},[14,167535,167537],{"id":167536},"_711-闭包入门","7.11 闭包入门",[171,167539,167540],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[19,167542,167544],{"className":30507,"code":167543,"language":30509,"meta":24,"style":24},"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",[26,167545,167546,167556,167566,167577,167581,167588,167592,167596,167610],{"__ignoreMap":24},[29,167547,167548,167550,167553],{"class":31,"line":32},[29,167549,32076],{"class":305},[29,167551,167552],{"class":35}," outer",[29,167554,167555],{"class":309},"(base):\n",[29,167557,167558,167560,167563],{"class":31,"line":43},[29,167559,30930],{"class":305},[29,167561,167562],{"class":35}," inner",[29,167564,167565],{"class":309},"(num):\n",[29,167567,167568,167570,167573,167575],{"class":31,"line":51},[29,167569,14927],{"class":305},[29,167571,167572],{"class":309}," base ",[29,167574,789],{"class":305},[29,167576,166708],{"class":309},[29,167578,167579],{"class":31,"line":59},[29,167580,2575],{"emptyLinePlaceholder":233},[29,167582,167583,167585],{"class":31,"line":67},[29,167584,4265],{"class":305},[29,167586,167587],{"class":309}," inner\n",[29,167589,167590],{"class":31,"line":75},[29,167591,2575],{"emptyLinePlaceholder":233},[29,167593,167594],{"class":31,"line":83},[29,167595,2575],{"emptyLinePlaceholder":233},[29,167597,167598,167601,167603,167606,167608],{"class":31,"line":158},[29,167599,167600],{"class":309},"add_10 ",[29,167602,355],{"class":305},[29,167604,167605],{"class":309}," outer(",[29,167607,754],{"class":39},[29,167609,316],{"class":309},[29,167611,167612,167614,167617,167619],{"class":31,"line":166},[29,167613,30544],{"class":39},[29,167615,167616],{"class":309},"(add_10(",[29,167618,627],{"class":39},[29,167620,30626],{"class":309},[171,167622,167623],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167625,167627],{"id":167626},"_712-装饰器入门","7.12 装饰器入门",[171,167629,167630],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[19,167632,167634],{"className":30507,"code":167633,"language":30509,"meta":24,"style":24},"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",[26,167635,167636,167645,167654,167665,167670,167681,167685,167692,167696,167700,167705,167713,167723,167727,167731],{"__ignoreMap":24},[29,167637,167638,167640,167642],{"class":31,"line":32},[29,167639,32076],{"class":305},[29,167641,87320],{"class":35},[29,167643,167644],{"class":309},"(func):\n",[29,167646,167647,167649,167652],{"class":31,"line":43},[29,167648,30930],{"class":305},[29,167650,167651],{"class":35}," wrapper",[29,167653,32082],{"class":309},[29,167655,167656,167658,167660,167663],{"class":31,"line":51},[29,167657,32580],{"class":39},[29,167659,310],{"class":309},[29,167661,167662],{"class":103},"\"函数开始执行\"",[29,167664,316],{"class":309},[29,167666,167667],{"class":31,"line":59},[29,167668,167669],{"class":309},"        func()\n",[29,167671,167672,167674,167676,167679],{"class":31,"line":67},[29,167673,32580],{"class":39},[29,167675,310],{"class":309},[29,167677,167678],{"class":103},"\"函数执行结束\"",[29,167680,316],{"class":309},[29,167682,167683],{"class":31,"line":75},[29,167684,2575],{"emptyLinePlaceholder":233},[29,167686,167687,167689],{"class":31,"line":83},[29,167688,4265],{"class":305},[29,167690,167691],{"class":309}," wrapper\n",[29,167693,167694],{"class":31,"line":158},[29,167695,2575],{"emptyLinePlaceholder":233},[29,167697,167698],{"class":31,"line":166},[29,167699,2575],{"emptyLinePlaceholder":233},[29,167701,167702],{"class":31,"line":1505},[29,167703,167704],{"class":35},"@log\n",[29,167706,167707,167709,167711],{"class":31,"line":1788},[29,167708,32076],{"class":305},[29,167710,161125],{"class":35},[29,167712,32082],{"class":309},[29,167714,167715,167717,167719,167721],{"class":31,"line":1793},[29,167716,31428],{"class":39},[29,167718,310],{"class":309},[29,167720,6019],{"class":103},[29,167722,316],{"class":309},[29,167724,167725],{"class":31,"line":1799},[29,167726,2575],{"emptyLinePlaceholder":233},[29,167728,167729],{"class":31,"line":1804},[29,167730,2575],{"emptyLinePlaceholder":233},[29,167732,167733],{"class":31,"line":1818},[29,167734,161160],{"class":309},[171,167736,158403],{},[19,167738,167740],{"className":30507,"code":167739,"language":30509,"meta":24,"style":24},"say_hello = log(say_hello)\n",[26,167741,167742],{"__ignoreMap":24},[29,167743,167744,167747,167749],{"class":31,"line":32},[29,167745,167746],{"class":309},"say_hello ",[29,167748,355],{"class":305},[29,167750,167751],{"class":309}," log(say_hello)\n",[171,167753,167754],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167756,167758],{"id":167757},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[19,167760,167762],{"className":30507,"code":167761,"language":30509,"meta":24,"style":24},"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",[26,167763,167764,167772,167789,167799,167818,167828,167835,167839,167845,167849,167853,167857,167865,167875,167879,167883],{"__ignoreMap":24},[29,167765,167766,167768,167770],{"class":31,"line":32},[29,167767,32076],{"class":305},[29,167769,87320],{"class":35},[29,167771,167644],{"class":309},[29,167773,167774,167776,167778,167780,167782,167785,167787],{"class":31,"line":43},[29,167775,30930],{"class":305},[29,167777,167651],{"class":35},[29,167779,310],{"class":309},[29,167781,763],{"class":305},[29,167783,167784],{"class":309},"args, ",[29,167786,10836],{"class":305},[29,167788,166795],{"class":309},[29,167790,167791,167793,167795,167797],{"class":31,"line":51},[29,167792,32580],{"class":39},[29,167794,310],{"class":309},[29,167796,167662],{"class":103},[29,167798,316],{"class":309},[29,167800,167801,167804,167806,167809,167811,167813,167815],{"class":31,"line":59},[29,167802,167803],{"class":309},"        result ",[29,167805,355],{"class":305},[29,167807,167808],{"class":309}," func(",[29,167810,763],{"class":305},[29,167812,167784],{"class":309},[29,167814,10836],{"class":305},[29,167816,167817],{"class":309},"kwargs)\n",[29,167819,167820,167822,167824,167826],{"class":31,"line":67},[29,167821,32580],{"class":39},[29,167823,310],{"class":309},[29,167825,167678],{"class":103},[29,167827,316],{"class":309},[29,167829,167830,167832],{"class":31,"line":75},[29,167831,14927],{"class":305},[29,167833,167834],{"class":309}," result\n",[29,167836,167837],{"class":31,"line":83},[29,167838,2575],{"emptyLinePlaceholder":233},[29,167840,167841,167843],{"class":31,"line":158},[29,167842,4265],{"class":305},[29,167844,167691],{"class":309},[29,167846,167847],{"class":31,"line":166},[29,167848,2575],{"emptyLinePlaceholder":233},[29,167850,167851],{"class":31,"line":1505},[29,167852,2575],{"emptyLinePlaceholder":233},[29,167854,167855],{"class":31,"line":1788},[29,167856,167704],{"class":35},[29,167858,167859,167861,167863],{"class":31,"line":1793},[29,167860,32076],{"class":305},[29,167862,5384],{"class":35},[29,167864,151222],{"class":309},[29,167866,167867,167869,167871,167873],{"class":31,"line":1799},[29,167868,4265],{"class":305},[29,167870,11044],{"class":309},[29,167872,789],{"class":305},[29,167874,151233],{"class":309},[29,167876,167877],{"class":31,"line":1804},[29,167878,2575],{"emptyLinePlaceholder":233},[29,167880,167881],{"class":31,"line":1818},[29,167882,2575],{"emptyLinePlaceholder":233},[29,167884,167885,167887,167889,167891,167893,167895],{"class":31,"line":1823},[29,167886,30544],{"class":39},[29,167888,166729],{"class":309},[29,167890,754],{"class":39},[29,167892,12610],{"class":309},[29,167894,1008],{"class":39},[29,167896,30626],{"class":309},[171,167898,167899,167900,101147,167902,167904],{},"这个写法使用 ",[26,167901,166661],{},[26,167903,166776],{}," 接收原函数的所有参数。",[14,167906,167908],{"id":167907},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[171,167910,123421],{},[259,167912,167913,167916,167919],{},[178,167914,167915],{},"给定一组学生数据。",[178,167917,167918],{},"封装函数，根据传入规则筛选学生。",[178,167920,167921],{},"筛选及格、优秀、未成年学生。",[171,167923,10210],{},[19,167925,167927],{"className":30507,"code":167926,"language":30509,"meta":24,"style":24},"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",[26,167928,167929,167937,167965,167993,168021,168025,168029,168033,168043,168051,168061,168068,168073,168079,168083,168087,168111,168134,168157,168161,168168,168175],{"__ignoreMap":24},[29,167930,167931,167933,167935],{"class":31,"line":32},[29,167932,159845],{"class":309},[29,167934,355],{"class":305},[29,167936,55576],{"class":309},[29,167938,167939,167941,167943,167945,167947,167949,167951,167953,167955,167957,167959,167961,167963],{"class":31,"line":43},[29,167940,148514],{"class":309},[29,167942,62808],{"class":103},[29,167944,51566],{"class":309},[29,167946,150017],{"class":103},[29,167948,12610],{"class":309},[29,167950,69253],{"class":103},[29,167952,51566],{"class":309},[29,167954,958],{"class":39},[29,167956,12610],{"class":309},[29,167958,151601],{"class":103},[29,167960,51566],{"class":309},[29,167962,1297],{"class":39},[29,167964,5105],{"class":309},[29,167966,167967,167969,167971,167973,167975,167977,167979,167981,167983,167985,167987,167989,167991],{"class":31,"line":51},[29,167968,148514],{"class":309},[29,167970,62808],{"class":103},[29,167972,51566],{"class":309},[29,167974,151065],{"class":103},[29,167976,12610],{"class":309},[29,167978,69253],{"class":103},[29,167980,51566],{"class":309},[29,167982,933],{"class":39},[29,167984,12610],{"class":309},[29,167986,151601],{"class":103},[29,167988,51566],{"class":309},[29,167990,1119],{"class":39},[29,167992,5105],{"class":309},[29,167994,167995,167997,167999,168001,168003,168005,168007,168009,168011,168013,168015,168017,168019],{"class":31,"line":59},[29,167996,148514],{"class":309},[29,167998,62808],{"class":103},[29,168000,51566],{"class":309},[29,168002,159860],{"class":103},[29,168004,12610],{"class":309},[29,168006,69253],{"class":103},[29,168008,51566],{"class":309},[29,168010,983],{"class":39},[29,168012,12610],{"class":309},[29,168014,151601],{"class":103},[29,168016,51566],{"class":309},[29,168018,1190],{"class":39},[29,168020,5105],{"class":309},[29,168022,168023],{"class":31,"line":67},[29,168024,33375],{"class":309},[29,168026,168027],{"class":31,"line":75},[29,168028,2575],{"emptyLinePlaceholder":233},[29,168030,168031],{"class":31,"line":83},[29,168032,2575],{"emptyLinePlaceholder":233},[29,168034,168035,168037,168040],{"class":31,"line":158},[29,168036,32076],{"class":305},[29,168038,168039],{"class":35}," filter_students",[29,168041,168042],{"class":309},"(students, condition):\n",[29,168044,168045,168047,168049],{"class":31,"line":166},[29,168046,161352],{"class":309},[29,168048,355],{"class":305},[29,168050,51967],{"class":309},[29,168052,168053,168055,168057,168059],{"class":31,"line":1505},[29,168054,3376],{"class":305},[29,168056,152266],{"class":309},[29,168058,26172],{"class":305},[29,168060,152271],{"class":309},[29,168062,168063,168065],{"class":31,"line":1788},[29,168064,2672],{"class":305},[29,168066,168067],{"class":309}," condition(student):\n",[29,168069,168070],{"class":31,"line":1793},[29,168071,168072],{"class":309},"            result.append(student)\n",[29,168074,168075,168077],{"class":31,"line":1799},[29,168076,4265],{"class":305},[29,168078,167834],{"class":309},[29,168080,168081],{"class":31,"line":1804},[29,168082,2575],{"emptyLinePlaceholder":233},[29,168084,168085],{"class":31,"line":1818},[29,168086,2575],{"emptyLinePlaceholder":233},[29,168088,168089,168091,168093,168096,168098,168101,168103,168105,168107,168109],{"class":31,"line":1823},[29,168090,165830],{"class":309},[29,168092,355],{"class":305},[29,168094,168095],{"class":309}," filter_students(students, ",[29,168097,167015],{"class":305},[29,168099,168100],{"class":309}," s: s[",[29,168102,151601],{"class":103},[29,168104,4618],{"class":309},[29,168106,1886],{"class":305},[29,168108,157966],{"class":39},[29,168110,316],{"class":309},[29,168112,168113,168116,168118,168120,168122,168124,168126,168128,168130,168132],{"class":31,"line":1829},[29,168114,168115],{"class":309},"excellent ",[29,168117,355],{"class":305},[29,168119,168095],{"class":309},[29,168121,167015],{"class":305},[29,168123,168100],{"class":309},[29,168125,151601],{"class":103},[29,168127,4618],{"class":309},[29,168129,1886],{"class":305},[29,168131,157917],{"class":39},[29,168133,316],{"class":309},[29,168135,168136,168139,168141,168143,168145,168147,168149,168151,168153,168155],{"class":31,"line":1850},[29,168137,168138],{"class":309},"under_age ",[29,168140,355],{"class":305},[29,168142,168095],{"class":309},[29,168144,167015],{"class":305},[29,168146,168100],{"class":309},[29,168148,69253],{"class":103},[29,168150,4618],{"class":309},[29,168152,1218],{"class":305},[29,168154,156414],{"class":39},[29,168156,316],{"class":309},[29,168158,168159],{"class":31,"line":1855},[29,168160,2575],{"emptyLinePlaceholder":233},[29,168162,168163,168165],{"class":31,"line":1869},[29,168164,30544],{"class":39},[29,168166,168167],{"class":309},"(passed)\n",[29,168169,168170,168172],{"class":31,"line":1874},[29,168171,30544],{"class":39},[29,168173,168174],{"class":309},"(excellent)\n",[29,168176,168177,168179],{"class":31,"line":1903},[29,168178,30544],{"class":39},[29,168180,168181],{"class":309},"(under_age)\n",[14,168183,168185],{"id":168184},"_715-易错点","7.15 易错点",[259,168187,168188,168191,168199,168204,168215],{},[178,168189,168190],{},"默认参数不要写可变对象。",[178,168192,168193,168195,168196,168198],{},[26,168194,166661],{}," 是元组，",[26,168197,166776],{}," 是字典。",[178,168200,168201,168203],{},[26,168202,167015],{}," 只适合简单表达式。",[178,168205,168206,101147,168208,168210,168211,168214],{},[26,168207,74173],{},[26,168209,80180],{}," 的结果是迭代器，常用 ",[26,168212,168213],{},"list()"," 转换查看。",[178,168216,168217],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168219,168221],{"id":168220},"_716-本章练习","7.16 本章练习",[259,168223,168224,168231,168237,168242,168247],{},[178,168225,168226,168227,168230],{},"写函数 ",[26,168228,168229],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[178,168232,168226,168233,168236],{},[26,168234,168235],{},"print_user(**kwargs)","，输出用户所有字段。",[178,168238,104495,168239,168241],{},[26,168240,167015],{}," 对学生列表按年龄排序。",[178,168243,104495,168244,168246],{},[26,168245,80180],{}," 找出成绩不及格的学生。",[178,168248,168249],{},"写一个装饰器，统计函数执行前后的提示信息。",[223,168251,168252],{},"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":24,"searchDepth":43,"depth":43,"links":168254},[168255,168256,168257,168258,168259,168260,168264,168265,168266,168267,168272,168273,168274,168275,168276,168277],{"id":166113,"depth":43,"text":166114},{"id":166227,"depth":43,"text":166228},{"id":166316,"depth":43,"text":166317},{"id":166378,"depth":43,"text":166379},{"id":166524,"depth":43,"text":166525},{"id":166651,"depth":43,"text":166652,"children":168261},[168262,168263],{"id":166655,"depth":51,"text":166656},{"id":166770,"depth":51,"text":166771},{"id":166851,"depth":43,"text":166852},{"id":167009,"depth":43,"text":167010},{"id":167177,"depth":43,"text":167178},{"id":167259,"depth":43,"text":167260,"children":168268},[168269,168270,168271],{"id":167263,"depth":51,"text":167264},{"id":167334,"depth":51,"text":167335},{"id":167411,"depth":51,"text":167412},{"id":167536,"depth":43,"text":167537},{"id":167626,"depth":43,"text":167627},{"id":167757,"depth":43,"text":167758},{"id":167907,"depth":43,"text":167908},{"id":168184,"depth":43,"text":168185},{"id":168220,"depth":43,"text":168221},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166105,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168284,"title":168285,"body":168286,"description":230,"extension":231,"meta":170805,"navigation":233,"path":170806,"seo":170807,"stem":170808,"__hash__":170809},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168287,"toc":170780},[168288,168291,168295,168298,168301,168332,168336,168340,168343,168370,168374,168377,168428,168431,168446,168449,168484,168488,168490,168514,168517,168577,168581,168585,168588,168645,168648,168668,168672,168675,168738,168742,168745,168801,168808,168832,168836,168839,168902,168906,168911,168962,168965,168969,168974,169041,169044,169126,169130,169135,169186,169189,169193,169196,169199,169207,169210,169256,169259,169305,169309,169315,169359,169362,169408,169411,169451,169454,169515,169519,169522,169612,169615,169757,169760,169827,169831,169834,169837,169978,169981,170059,170062,170238,170242,170244,170255,170257,170456,170460,170704,170708,170742,170746,170777],[10,168289,168285],{"id":168290},"_8-文件操作",[14,168292,168294],{"id":168293},"_81-文件操作的意义","8.1 文件操作的意义",[171,168296,168297],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[171,168299,168300],{},"常见文件类型：",[259,168302,168303,168309,168315,168321,168327],{},[178,168304,168305,168308],{},[26,168306,168307],{},".txt","：普通文本。",[178,168310,168311,168314],{},[26,168312,168313],{},".csv","：表格文本。",[178,168316,168317,168320],{},[26,168318,168319],{},".json","：结构化数据。",[178,168322,168323,168326],{},[26,168324,168325],{},".log","：日志文件。",[178,168328,168329,168331],{},[26,168330,146481],{},"：Python 源代码。",[14,168333,168335],{"id":168334},"_82-路径","8.2 路径",[275,168337,168339],{"id":168338},"_821-相对路径","8.2.1 相对路径",[171,168341,168342],{},"相对当前运行目录：",[19,168344,168346],{"className":30507,"code":168345,"language":30509,"meta":24,"style":24},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[26,168347,168348],{"__ignoreMap":24},[29,168349,168350,168352,168354,168356,168358,168360,168362,168364,168366,168368],{"class":31,"line":32},[29,168351,87044],{"class":39},[29,168353,310],{"class":309},[29,168355,146925],{"class":103},[29,168357,12610],{"class":309},[29,168359,146930],{"class":103},[29,168361,12610],{"class":309},[29,168363,146935],{"class":5391},[29,168365,355],{"class":305},[29,168367,146940],{"class":103},[29,168369,316],{"class":309},[275,168371,168373],{"id":168372},"_822-绝对路径","8.2.2 绝对路径",[171,168375,168376],{},"从根目录或盘符开始：",[19,168378,168380],{"className":30507,"code":168379,"language":30509,"meta":24,"style":24},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[26,168381,168382,168405],{"__ignoreMap":24},[29,168383,168384,168386,168388,168391,168393,168395,168397,168399,168401,168403],{"class":31,"line":32},[29,168385,87044],{"class":39},[29,168387,310],{"class":309},[29,168389,168390],{"class":103},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[29,168392,12610],{"class":309},[29,168394,146930],{"class":103},[29,168396,12610],{"class":309},[29,168398,146935],{"class":5391},[29,168400,355],{"class":305},[29,168402,146940],{"class":103},[29,168404,316],{"class":309},[29,168406,168407,168409,168411,168414,168416,168418,168420,168422,168424,168426],{"class":31,"line":43},[29,168408,87044],{"class":39},[29,168410,310],{"class":309},[29,168412,168413],{"class":103},"\"D:\u002Fdata\u002Fdata.txt\"",[29,168415,12610],{"class":309},[29,168417,146930],{"class":103},[29,168419,12610],{"class":309},[29,168421,146935],{"class":5391},[29,168423,355],{"class":305},[29,168425,146940],{"class":103},[29,168427,316],{"class":309},[171,168429,168430],{},"Windows 路径建议写成：",[19,168432,168434],{"className":30507,"code":168433,"language":30509,"meta":24,"style":24},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[26,168435,168436],{"__ignoreMap":24},[29,168437,168438,168441,168443],{"class":31,"line":32},[29,168439,168440],{"class":309},"path ",[29,168442,355],{"class":305},[29,168444,168445],{"class":103}," \"D:\u002Fdata\u002Fdata.txt\"\n",[171,168447,168448],{},"或原始字符串：",[19,168450,168452],{"className":30507,"code":168451,"language":30509,"meta":24,"style":24},"path = r\"D:\\data\\data.txt\"\n",[26,168453,168454],{"__ignoreMap":24},[29,168455,168456,168458,168460,168462,168464,168467,168470,168473,168475,168477,168479,168482],{"class":31,"line":32},[29,168457,168440],{"class":309},[29,168459,355],{"class":305},[29,168461,17296],{"class":305},[29,168463,559],{"class":103},[29,168465,168466],{"class":48106},"D:",[29,168468,168469],{"class":39},"\\d",[29,168471,168472],{"class":48106},"ata",[29,168474,168469],{"class":39},[29,168476,168472],{"class":48106},[29,168478,866],{"class":39},[29,168480,168481],{"class":48106},"txt",[29,168483,25262],{"class":103},[14,168485,168487],{"id":168486},"_83-open函数","8.3 open函数",[171,168489,5356],{},[19,168491,168493],{"className":30507,"code":168492,"language":30509,"meta":24,"style":24},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[26,168494,168495],{"__ignoreMap":24},[29,168496,168497,168499,168501,168503,168506,168508,168510,168512],{"class":31,"line":32},[29,168498,45483],{"class":5391},[29,168500,13739],{"class":305},[29,168502,146920],{"class":39},[29,168504,168505],{"class":309},"(文件路径, 打开模式, ",[29,168507,146935],{"class":5391},[29,168509,355],{"class":305},[29,168511,146940],{"class":103},[29,168513,316],{"class":309},[171,168515,168516],{},"常见模式：",[445,168518,168519,168528],{},[448,168520,168521],{},[451,168522,168523,168526],{},[454,168524,168525],{},"模式",[454,168527,25998],{},[492,168529,168530,168539,168548,168557,168567],{},[451,168531,168532,168536],{},[497,168533,168534],{},[26,168535,978],{},[497,168537,168538],{},"只读，文件不存在会报错",[451,168540,168541,168545],{},[497,168542,168543],{},[26,168544,1103],{},[497,168546,168547],{},"只写，文件不存在会创建，存在会清空",[451,168549,168550,168554],{},[497,168551,168552],{},[26,168553,546],{},[497,168555,168556],{},"追加，文件不存在会创建",[451,168558,168559,168564],{},[497,168560,168561],{},[26,168562,168563],{},"rb",[497,168565,168566],{},"二进制只读",[451,168568,168569,168574],{},[497,168570,168571],{},[26,168572,168573],{},"wb",[497,168575,168576],{},"二进制只写",[14,168578,168580],{"id":168579},"_84-读取文件","8.4 读取文件",[275,168582,168584],{"id":168583},"_841-read","8.4.1 read",[171,168586,168587],{},"一次读取全部内容：",[19,168589,168591],{"className":30507,"code":168590,"language":30509,"meta":24,"style":24},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[26,168592,168593,168619,168631,168638],{"__ignoreMap":24},[29,168594,168595,168597,168599,168601,168603,168605,168607,168609,168611,168613,168615,168617],{"class":31,"line":32},[29,168596,45483],{"class":5391},[29,168598,13739],{"class":305},[29,168600,146920],{"class":39},[29,168602,310],{"class":309},[29,168604,146925],{"class":103},[29,168606,12610],{"class":309},[29,168608,146930],{"class":103},[29,168610,12610],{"class":309},[29,168612,146935],{"class":5391},[29,168614,355],{"class":305},[29,168616,146940],{"class":103},[29,168618,316],{"class":309},[29,168620,168621,168624,168626,168628],{"class":31,"line":43},[29,168622,168623],{"class":309},"content ",[29,168625,355],{"class":305},[29,168627,148282],{"class":5391},[29,168629,168630],{"class":309},".read()\n",[29,168632,168633,168635],{"class":31,"line":51},[29,168634,30544],{"class":39},[29,168636,168637],{"class":309},"(content)\n",[29,168639,168640,168642],{"class":31,"line":59},[29,168641,45483],{"class":5391},[29,168643,168644],{"class":309},".close()\n",[171,168646,168647],{},"可以指定读取字符数：",[19,168649,168651],{"className":30507,"code":168650,"language":30509,"meta":24,"style":24},"content = file.read(10)\n",[26,168652,168653],{"__ignoreMap":24},[29,168654,168655,168657,168659,168661,168664,168666],{"class":31,"line":32},[29,168656,168623],{"class":309},[29,168658,355],{"class":305},[29,168660,148282],{"class":5391},[29,168662,168663],{"class":309},".read(",[29,168665,754],{"class":39},[29,168667,316],{"class":309},[275,168669,168671],{"id":168670},"_842-readline","8.4.2 readline",[171,168673,168674],{},"一次读取一行：",[19,168676,168678],{"className":30507,"code":168677,"language":30509,"meta":24,"style":24},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[26,168679,168680,168706,168710,168721,168728,168732],{"__ignoreMap":24},[29,168681,168682,168684,168686,168688,168690,168692,168694,168696,168698,168700,168702,168704],{"class":31,"line":32},[29,168683,45483],{"class":5391},[29,168685,13739],{"class":305},[29,168687,146920],{"class":39},[29,168689,310],{"class":309},[29,168691,146925],{"class":103},[29,168693,12610],{"class":309},[29,168695,146930],{"class":103},[29,168697,12610],{"class":309},[29,168699,146935],{"class":5391},[29,168701,355],{"class":305},[29,168703,146940],{"class":103},[29,168705,316],{"class":309},[29,168707,168708],{"class":31,"line":43},[29,168709,2575],{"emptyLinePlaceholder":233},[29,168711,168712,168714,168716,168718],{"class":31,"line":51},[29,168713,147381],{"class":309},[29,168715,355],{"class":305},[29,168717,148282],{"class":5391},[29,168719,168720],{"class":309},".readline()\n",[29,168722,168723,168725],{"class":31,"line":59},[29,168724,30544],{"class":39},[29,168726,168727],{"class":309},"(line)\n",[29,168729,168730],{"class":31,"line":67},[29,168731,2575],{"emptyLinePlaceholder":233},[29,168733,168734,168736],{"class":31,"line":75},[29,168735,45483],{"class":5391},[29,168737,168644],{"class":309},[275,168739,168741],{"id":168740},"_843-readlines","8.4.3 readlines",[171,168743,168744],{},"读取所有行，返回列表：",[19,168746,168748],{"className":30507,"code":168747,"language":30509,"meta":24,"style":24},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[26,168749,168750,168776,168788,168795],{"__ignoreMap":24},[29,168751,168752,168754,168756,168758,168760,168762,168764,168766,168768,168770,168772,168774],{"class":31,"line":32},[29,168753,45483],{"class":5391},[29,168755,13739],{"class":305},[29,168757,146920],{"class":39},[29,168759,310],{"class":309},[29,168761,146925],{"class":103},[29,168763,12610],{"class":309},[29,168765,146930],{"class":103},[29,168767,12610],{"class":309},[29,168769,146935],{"class":5391},[29,168771,355],{"class":305},[29,168773,146940],{"class":103},[29,168775,316],{"class":309},[29,168777,168778,168781,168783,168785],{"class":31,"line":43},[29,168779,168780],{"class":309},"lines ",[29,168782,355],{"class":305},[29,168784,148282],{"class":5391},[29,168786,168787],{"class":309},".readlines()\n",[29,168789,168790,168792],{"class":31,"line":51},[29,168791,30544],{"class":39},[29,168793,168794],{"class":309},"(lines)\n",[29,168796,168797,168799],{"class":31,"line":59},[29,168798,45483],{"class":5391},[29,168800,168644],{"class":309},[171,168802,168803,168804,168807],{},"每一行通常带有换行符，可以用 ",[26,168805,168806],{},"strip()"," 去掉：",[19,168809,168811],{"className":30507,"code":168810,"language":30509,"meta":24,"style":24},"for line in lines:\n    print(line.strip())\n",[26,168812,168813,168825],{"__ignoreMap":24},[29,168814,168815,168817,168820,168822],{"class":31,"line":32},[29,168816,3200],{"class":305},[29,168818,168819],{"class":309}," line ",[29,168821,26172],{"class":305},[29,168823,168824],{"class":309}," lines:\n",[29,168826,168827,168829],{"class":31,"line":43},[29,168828,31428],{"class":39},[29,168830,168831],{"class":309},"(line.strip())\n",[275,168833,168835],{"id":168834},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[171,168837,168838],{},"推荐读取大文件时使用：",[19,168840,168842],{"className":30507,"code":168841,"language":30509,"meta":24,"style":24},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[26,168843,168844,168870,168874,168886,168892,168896],{"__ignoreMap":24},[29,168845,168846,168848,168850,168852,168854,168856,168858,168860,168862,168864,168866,168868],{"class":31,"line":32},[29,168847,45483],{"class":5391},[29,168849,13739],{"class":305},[29,168851,146920],{"class":39},[29,168853,310],{"class":309},[29,168855,146925],{"class":103},[29,168857,12610],{"class":309},[29,168859,146930],{"class":103},[29,168861,12610],{"class":309},[29,168863,146935],{"class":5391},[29,168865,355],{"class":305},[29,168867,146940],{"class":103},[29,168869,316],{"class":309},[29,168871,168872],{"class":31,"line":43},[29,168873,2575],{"emptyLinePlaceholder":233},[29,168875,168876,168878,168880,168882,168884],{"class":31,"line":51},[29,168877,3200],{"class":305},[29,168879,168819],{"class":309},[29,168881,26172],{"class":305},[29,168883,148282],{"class":5391},[29,168885,3914],{"class":309},[29,168887,168888,168890],{"class":31,"line":59},[29,168889,31428],{"class":39},[29,168891,168831],{"class":309},[29,168893,168894],{"class":31,"line":67},[29,168895,2575],{"emptyLinePlaceholder":233},[29,168897,168898,168900],{"class":31,"line":75},[29,168899,45483],{"class":5391},[29,168901,168644],{"class":309},[14,168903,168905],{"id":168904},"_85-with语句","8.5 with语句",[171,168907,168908,168910],{},[26,168909,107962],{}," 会自动关闭文件，推荐使用。",[19,168912,168914],{"className":30507,"code":168913,"language":30509,"meta":24,"style":24},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[26,168915,168916,168946,168956],{"__ignoreMap":24},[29,168917,168918,168920,168922,168924,168926,168928,168930,168932,168934,168936,168938,168940,168942,168944],{"class":31,"line":32},[29,168919,107962],{"class":305},[29,168921,146920],{"class":39},[29,168923,310],{"class":309},[29,168925,146925],{"class":103},[29,168927,12610],{"class":309},[29,168929,146930],{"class":103},[29,168931,12610],{"class":309},[29,168933,146935],{"class":5391},[29,168935,355],{"class":305},[29,168937,146940],{"class":103},[29,168939,13889],{"class":309},[29,168941,31512],{"class":305},[29,168943,148282],{"class":5391},[29,168945,3914],{"class":309},[29,168947,168948,168950,168952,168954],{"class":31,"line":43},[29,168949,146952],{"class":309},[29,168951,355],{"class":305},[29,168953,148282],{"class":5391},[29,168955,168630],{"class":309},[29,168957,168958,168960],{"class":31,"line":51},[29,168959,31428],{"class":39},[29,168961,168637],{"class":309},[171,168963,168964],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168966,168968],{"id":168967},"_86-写入文件","8.6 写入文件",[171,168970,168971,168973],{},[26,168972,1103],{}," 模式会清空原文件。",[19,168975,168977],{"className":30507,"code":168976,"language":30509,"meta":24,"style":24},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[26,168978,168979,169009,169026],{"__ignoreMap":24},[29,168980,168981,168983,168985,168987,168989,168991,168993,168995,168997,168999,169001,169003,169005,169007],{"class":31,"line":32},[29,168982,107962],{"class":305},[29,168984,146920],{"class":39},[29,168986,310],{"class":309},[29,168988,146925],{"class":103},[29,168990,12610],{"class":309},[29,168992,152105],{"class":103},[29,168994,12610],{"class":309},[29,168996,146935],{"class":5391},[29,168998,355],{"class":305},[29,169000,146940],{"class":103},[29,169002,13889],{"class":309},[29,169004,31512],{"class":305},[29,169006,148282],{"class":5391},[29,169008,3914],{"class":309},[29,169010,169011,169014,169017,169020,169022,169024],{"class":31,"line":43},[29,169012,169013],{"class":5391},"    file",[29,169015,169016],{"class":309},".write(",[29,169018,169019],{"class":103},"\"hello",[29,169021,156654],{"class":39},[29,169023,559],{"class":103},[29,169025,316],{"class":309},[29,169027,169028,169030,169032,169035,169037,169039],{"class":31,"line":51},[29,169029,169013],{"class":5391},[29,169031,169016],{"class":309},[29,169033,169034],{"class":103},"\"python",[29,169036,156654],{"class":39},[29,169038,559],{"class":103},[29,169040,316],{"class":309},[171,169042,169043],{},"写入多行：",[19,169045,169047],{"className":30507,"code":169046,"language":30509,"meta":24,"style":24},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[26,169048,169049,169084,169088,169119],{"__ignoreMap":24},[29,169050,169051,169053,169055,169057,169060,169062,169064,169066,169069,169071,169073,169075,169078,169080,169082],{"class":31,"line":32},[29,169052,168780],{"class":309},[29,169054,355],{"class":305},[29,169056,52355],{"class":309},[29,169058,169059],{"class":103},"\"小明,18",[29,169061,156654],{"class":39},[29,169063,559],{"class":103},[29,169065,12610],{"class":309},[29,169067,169068],{"class":103},"\"小红,17",[29,169070,156654],{"class":39},[29,169072,559],{"class":103},[29,169074,12610],{"class":309},[29,169076,169077],{"class":103},"\"小刚,19",[29,169079,156654],{"class":39},[29,169081,559],{"class":103},[29,169083,33375],{"class":309},[29,169085,169086],{"class":31,"line":43},[29,169087,2575],{"emptyLinePlaceholder":233},[29,169089,169090,169092,169094,169096,169099,169101,169103,169105,169107,169109,169111,169113,169115,169117],{"class":31,"line":51},[29,169091,107962],{"class":305},[29,169093,146920],{"class":39},[29,169095,310],{"class":309},[29,169097,169098],{"class":103},"\"students.txt\"",[29,169100,12610],{"class":309},[29,169102,152105],{"class":103},[29,169104,12610],{"class":309},[29,169106,146935],{"class":5391},[29,169108,355],{"class":305},[29,169110,146940],{"class":103},[29,169112,13889],{"class":309},[29,169114,31512],{"class":305},[29,169116,148282],{"class":5391},[29,169118,3914],{"class":309},[29,169120,169121,169123],{"class":31,"line":59},[29,169122,169013],{"class":5391},[29,169124,169125],{"class":309},".writelines(lines)\n",[14,169127,169129],{"id":169128},"_87-追加文件","8.7 追加文件",[171,169131,169132,169134],{},[26,169133,546],{}," 模式不会清空原内容，而是在末尾追加。",[19,169136,169138],{"className":30507,"code":169137,"language":30509,"meta":24,"style":24},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[26,169139,169140,169171],{"__ignoreMap":24},[29,169141,169142,169144,169146,169148,169151,169153,169155,169157,169159,169161,169163,169165,169167,169169],{"class":31,"line":32},[29,169143,107962],{"class":305},[29,169145,146920],{"class":39},[29,169147,310],{"class":309},[29,169149,169150],{"class":103},"\"log.txt\"",[29,169152,12610],{"class":309},[29,169154,165454],{"class":103},[29,169156,12610],{"class":309},[29,169158,146935],{"class":5391},[29,169160,355],{"class":305},[29,169162,146940],{"class":103},[29,169164,13889],{"class":309},[29,169166,31512],{"class":305},[29,169168,148282],{"class":5391},[29,169170,3914],{"class":309},[29,169172,169173,169175,169177,169180,169182,169184],{"class":31,"line":43},[29,169174,169013],{"class":5391},[29,169176,169016],{"class":309},[29,169178,169179],{"class":103},"\"程序启动",[29,169181,156654],{"class":39},[29,169183,559],{"class":103},[29,169185,316],{"class":309},[171,169187,169188],{},"日志类文件常用追加模式。",[14,169190,169192],{"id":169191},"_88-文件编码","8.8 文件编码",[171,169194,169195],{},"编码决定文字如何保存为字节。",[171,169197,169198],{},"常见编码：",[259,169200,169201,169204],{},[178,169202,169203],{},"UTF-8：推荐。",[178,169205,169206],{},"GBK：部分 Windows 中文文件常见。",[171,169208,169209],{},"读取文件乱码时，可以尝试：",[19,169211,169213],{"className":30507,"code":169212,"language":30509,"meta":24,"style":24},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[26,169214,169215,169246],{"__ignoreMap":24},[29,169216,169217,169219,169221,169223,169225,169227,169229,169231,169233,169235,169238,169240,169242,169244],{"class":31,"line":32},[29,169218,107962],{"class":305},[29,169220,146920],{"class":39},[29,169222,310],{"class":309},[29,169224,146925],{"class":103},[29,169226,12610],{"class":309},[29,169228,146930],{"class":103},[29,169230,12610],{"class":309},[29,169232,146935],{"class":5391},[29,169234,355],{"class":305},[29,169236,169237],{"class":103},"\"gbk\"",[29,169239,13889],{"class":309},[29,169241,31512],{"class":305},[29,169243,148282],{"class":5391},[29,169245,3914],{"class":309},[29,169247,169248,169250,169252,169254],{"class":31,"line":43},[29,169249,146952],{"class":309},[29,169251,355],{"class":305},[29,169253,148282],{"class":5391},[29,169255,168630],{"class":309},[171,169257,169258],{},"写文件时建议统一 UTF-8：",[19,169260,169262],{"className":30507,"code":169261,"language":30509,"meta":24,"style":24},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[26,169263,169264,169294],{"__ignoreMap":24},[29,169265,169266,169268,169270,169272,169274,169276,169278,169280,169282,169284,169286,169288,169290,169292],{"class":31,"line":32},[29,169267,107962],{"class":305},[29,169269,146920],{"class":39},[29,169271,310],{"class":309},[29,169273,146925],{"class":103},[29,169275,12610],{"class":309},[29,169277,152105],{"class":103},[29,169279,12610],{"class":309},[29,169281,146935],{"class":5391},[29,169283,355],{"class":305},[29,169285,146940],{"class":103},[29,169287,13889],{"class":309},[29,169289,31512],{"class":305},[29,169291,148282],{"class":5391},[29,169293,3914],{"class":309},[29,169295,169296,169298,169300,169303],{"class":31,"line":43},[29,169297,169013],{"class":5391},[29,169299,169016],{"class":309},[29,169301,169302],{"class":103},"\"中文内容\"",[29,169304,316],{"class":309},[14,169306,169308],{"id":169307},"_89-pathlib","8.9 pathlib",[171,169310,169311,169314],{},[26,169312,169313],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[19,169316,169318],{"className":30507,"code":169317,"language":30509,"meta":24,"style":24},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[26,169319,169320,169330,169334,169352],{"__ignoreMap":24},[29,169321,169322,169324,169326,169328],{"class":31,"line":32},[29,169323,30866],{"class":305},[29,169325,108440],{"class":309},[29,169327,30521],{"class":305},[29,169329,108445],{"class":309},[29,169331,169332],{"class":31,"line":43},[29,169333,2575],{"emptyLinePlaceholder":233},[29,169335,169336,169338,169340,169342,169345,169347,169349],{"class":31,"line":51},[29,169337,168440],{"class":309},[29,169339,355],{"class":305},[29,169341,108674],{"class":309},[29,169343,169344],{"class":103},"\"data\"",[29,169346,13889],{"class":309},[29,169348,892],{"class":305},[29,169350,169351],{"class":103}," \"students.txt\"\n",[29,169353,169354,169356],{"class":31,"line":59},[29,169355,30544],{"class":39},[29,169357,169358],{"class":309},"(path)\n",[171,169360,169361],{},"创建目录：",[19,169363,169365],{"className":30507,"code":169364,"language":30509,"meta":24,"style":24},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[26,169366,169367,169377,169381,169394],{"__ignoreMap":24},[29,169368,169369,169371,169373,169375],{"class":31,"line":32},[29,169370,30866],{"class":305},[29,169372,108440],{"class":309},[29,169374,30521],{"class":305},[29,169376,108445],{"class":309},[29,169378,169379],{"class":31,"line":43},[29,169380,2575],{"emptyLinePlaceholder":233},[29,169382,169383,169386,169388,169390,169392],{"class":31,"line":51},[29,169384,169385],{"class":309},"data_dir ",[29,169387,355],{"class":305},[29,169389,108674],{"class":309},[29,169391,169344],{"class":103},[29,169393,316],{"class":309},[29,169395,169396,169399,169402,169404,169406],{"class":31,"line":59},[29,169397,169398],{"class":309},"data_dir.mkdir(",[29,169400,169401],{"class":5391},"exist_ok",[29,169403,355],{"class":305},[29,169405,31605],{"class":39},[29,169407,316],{"class":309},[171,169409,169410],{},"判断文件是否存在：",[19,169412,169414],{"className":30507,"code":169413,"language":30509,"meta":24,"style":24},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[26,169415,169416,169429,169433,169440],{"__ignoreMap":24},[29,169417,169418,169420,169422,169424,169427],{"class":31,"line":32},[29,169419,168440],{"class":309},[29,169421,355],{"class":305},[29,169423,108674],{"class":309},[29,169425,169426],{"class":103},"\"data\u002Fstudents.txt\"",[29,169428,316],{"class":309},[29,169430,169431],{"class":31,"line":43},[29,169432,2575],{"emptyLinePlaceholder":233},[29,169434,169435,169437],{"class":31,"line":51},[29,169436,1707],{"class":305},[29,169438,169439],{"class":309}," path.exists():\n",[29,169441,169442,169444,169446,169449],{"class":31,"line":59},[29,169443,31428],{"class":39},[29,169445,310],{"class":309},[29,169447,169448],{"class":103},"\"文件存在\"",[29,169450,316],{"class":309},[171,169452,169453],{},"读写文本：",[19,169455,169457],{"className":30507,"code":169456,"language":30509,"meta":24,"style":24},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[26,169458,169459,169471,169475,169492,169509],{"__ignoreMap":24},[29,169460,169461,169463,169465,169467,169469],{"class":31,"line":32},[29,169462,168440],{"class":309},[29,169464,355],{"class":305},[29,169466,108674],{"class":309},[29,169468,146925],{"class":103},[29,169470,316],{"class":309},[29,169472,169473],{"class":31,"line":43},[29,169474,2575],{"emptyLinePlaceholder":233},[29,169476,169477,169480,169482,169484,169486,169488,169490],{"class":31,"line":51},[29,169478,169479],{"class":309},"path.write_text(",[29,169481,146005],{"class":103},[29,169483,12610],{"class":309},[29,169485,146935],{"class":5391},[29,169487,355],{"class":305},[29,169489,146940],{"class":103},[29,169491,316],{"class":309},[29,169493,169494,169496,169498,169501,169503,169505,169507],{"class":31,"line":59},[29,169495,168623],{"class":309},[29,169497,355],{"class":305},[29,169499,169500],{"class":309}," path.read_text(",[29,169502,146935],{"class":5391},[29,169504,355],{"class":305},[29,169506,146940],{"class":103},[29,169508,316],{"class":309},[29,169510,169511,169513],{"class":31,"line":67},[29,169512,30544],{"class":39},[29,169514,168637],{"class":309},[14,169516,169518],{"id":169517},"_810-json文件","8.10 JSON文件",[171,169520,169521],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[19,169523,169525],{"className":30507,"code":169524,"language":30509,"meta":24,"style":24},"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",[26,169526,169527,169533,169537,169545,169555,169565,169573,169577,169581,169606],{"__ignoreMap":24},[29,169528,169529,169531],{"class":31,"line":32},[29,169530,30521],{"class":305},[29,169532,147220],{"class":309},[29,169534,169535],{"class":31,"line":43},[29,169536,2575],{"emptyLinePlaceholder":233},[29,169538,169539,169541,169543],{"class":31,"line":51},[29,169540,149610],{"class":309},[29,169542,355],{"class":305},[29,169544,15747],{"class":309},[29,169546,169547,169549,169551,169553],{"class":31,"line":59},[29,169548,147149],{"class":103},[29,169550,51566],{"class":309},[29,169552,150017],{"class":103},[29,169554,31595],{"class":309},[29,169556,169557,169559,169561,169563],{"class":31,"line":67},[29,169558,164666],{"class":103},[29,169560,51566],{"class":309},[29,169562,958],{"class":39},[29,169564,31595],{"class":309},[29,169566,169567,169569,169571],{"class":31,"line":75},[29,169568,164677],{"class":103},[29,169570,51566],{"class":309},[29,169572,164682],{"class":39},[29,169574,169575],{"class":31,"line":83},[29,169576,1741],{"class":309},[29,169578,169579],{"class":31,"line":158},[29,169580,2575],{"emptyLinePlaceholder":233},[29,169582,169583,169585,169587,169590,169592,169594,169596,169598,169600,169602,169604],{"class":31,"line":166},[29,169584,156573],{"class":309},[29,169586,355],{"class":305},[29,169588,169589],{"class":309}," json.dumps(student, ",[29,169591,147266],{"class":5391},[29,169593,355],{"class":305},[29,169595,34116],{"class":39},[29,169597,12610],{"class":309},[29,169599,152141],{"class":5391},[29,169601,355],{"class":305},[29,169603,386],{"class":39},[29,169605,316],{"class":309},[29,169607,169608,169610],{"class":31,"line":1505},[29,169609,30544],{"class":39},[29,169611,164200],{"class":309},[171,169613,169614],{},"写入 JSON 文件：",[19,169616,169618],{"className":30507,"code":169617,"language":30509,"meta":24,"style":24},"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",[26,169619,169620,169626,169630,169638,169666,169694,169698,169702,169732],{"__ignoreMap":24},[29,169621,169622,169624],{"class":31,"line":32},[29,169623,30521],{"class":305},[29,169625,147220],{"class":309},[29,169627,169628],{"class":31,"line":43},[29,169629,2575],{"emptyLinePlaceholder":233},[29,169631,169632,169634,169636],{"class":31,"line":51},[29,169633,159845],{"class":309},[29,169635,355],{"class":305},[29,169637,55576],{"class":309},[29,169639,169640,169642,169644,169646,169648,169650,169652,169654,169656,169658,169660,169662,169664],{"class":31,"line":59},[29,169641,148514],{"class":309},[29,169643,62808],{"class":103},[29,169645,51566],{"class":309},[29,169647,150017],{"class":103},[29,169649,12610],{"class":309},[29,169651,69253],{"class":103},[29,169653,51566],{"class":309},[29,169655,958],{"class":39},[29,169657,12610],{"class":309},[29,169659,151601],{"class":103},[29,169661,51566],{"class":309},[29,169663,1297],{"class":39},[29,169665,5105],{"class":309},[29,169667,169668,169670,169672,169674,169676,169678,169680,169682,169684,169686,169688,169690,169692],{"class":31,"line":67},[29,169669,148514],{"class":309},[29,169671,62808],{"class":103},[29,169673,51566],{"class":309},[29,169675,151065],{"class":103},[29,169677,12610],{"class":309},[29,169679,69253],{"class":103},[29,169681,51566],{"class":309},[29,169683,933],{"class":39},[29,169685,12610],{"class":309},[29,169687,151601],{"class":103},[29,169689,51566],{"class":309},[29,169691,1119],{"class":39},[29,169693,5105],{"class":309},[29,169695,169696],{"class":31,"line":75},[29,169697,33375],{"class":309},[29,169699,169700],{"class":31,"line":83},[29,169701,2575],{"emptyLinePlaceholder":233},[29,169703,169704,169706,169708,169710,169712,169714,169716,169718,169720,169722,169724,169726,169728,169730],{"class":31,"line":158},[29,169705,107962],{"class":305},[29,169707,146920],{"class":39},[29,169709,310],{"class":309},[29,169711,151960],{"class":103},[29,169713,12610],{"class":309},[29,169715,152105],{"class":103},[29,169717,12610],{"class":309},[29,169719,146935],{"class":5391},[29,169721,355],{"class":305},[29,169723,146940],{"class":103},[29,169725,13889],{"class":309},[29,169727,31512],{"class":305},[29,169729,148282],{"class":5391},[29,169731,3914],{"class":309},[29,169733,169734,169737,169739,169741,169743,169745,169747,169749,169751,169753,169755],{"class":31,"line":166},[29,169735,169736],{"class":309},"    json.dump(students, ",[29,169738,45483],{"class":5391},[29,169740,12610],{"class":309},[29,169742,147266],{"class":5391},[29,169744,355],{"class":305},[29,169746,34116],{"class":39},[29,169748,12610],{"class":309},[29,169750,152141],{"class":5391},[29,169752,355],{"class":305},[29,169754,386],{"class":39},[29,169756,316],{"class":309},[171,169758,169759],{},"读取 JSON 文件：",[19,169761,169763],{"className":30507,"code":169762,"language":30509,"meta":24,"style":24},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[26,169764,169765,169771,169775,169805,169817,169821],{"__ignoreMap":24},[29,169766,169767,169769],{"class":31,"line":32},[29,169768,30521],{"class":305},[29,169770,147220],{"class":309},[29,169772,169773],{"class":31,"line":43},[29,169774,2575],{"emptyLinePlaceholder":233},[29,169776,169777,169779,169781,169783,169785,169787,169789,169791,169793,169795,169797,169799,169801,169803],{"class":31,"line":51},[29,169778,107962],{"class":305},[29,169780,146920],{"class":39},[29,169782,310],{"class":309},[29,169784,151960],{"class":103},[29,169786,12610],{"class":309},[29,169788,146930],{"class":103},[29,169790,12610],{"class":309},[29,169792,146935],{"class":5391},[29,169794,355],{"class":305},[29,169796,146940],{"class":103},[29,169798,13889],{"class":309},[29,169800,31512],{"class":305},[29,169802,148282],{"class":5391},[29,169804,3914],{"class":309},[29,169806,169807,169809,169811,169813,169815],{"class":31,"line":59},[29,169808,153166],{"class":309},[29,169810,355],{"class":305},[29,169812,148293],{"class":309},[29,169814,45483],{"class":5391},[29,169816,316],{"class":309},[29,169818,169819],{"class":31,"line":67},[29,169820,2575],{"emptyLinePlaceholder":233},[29,169822,169823,169825],{"class":31,"line":75},[29,169824,30544],{"class":39},[29,169826,165124],{"class":309},[14,169828,169830],{"id":169829},"_811-csv文件","8.11 CSV文件",[171,169832,169833],{},"CSV 是逗号分隔值，常用于表格数据。",[171,169835,169836],{},"写入 CSV：",[19,169838,169840],{"className":30507,"code":169839,"language":30509,"meta":24,"style":24},"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",[26,169841,169842,169849,169853,169861,169879,169895,169911,169915,169919,169959,169973],{"__ignoreMap":24},[29,169843,169844,169846],{"class":31,"line":32},[29,169845,30521],{"class":305},[29,169847,169848],{"class":309}," csv\n",[29,169850,169851],{"class":31,"line":43},[29,169852,2575],{"emptyLinePlaceholder":233},[29,169854,169855,169857,169859],{"class":31,"line":51},[29,169856,159845],{"class":309},[29,169858,355],{"class":305},[29,169860,55576],{"class":309},[29,169862,169863,169866,169868,169870,169872,169874,169877],{"class":31,"line":59},[29,169864,169865],{"class":309},"    [",[29,169867,73228],{"class":103},[29,169869,12610],{"class":309},[29,169871,73261],{"class":103},[29,169873,12610],{"class":309},[29,169875,169876],{"class":103},"\"成绩\"",[29,169878,87965],{"class":309},[29,169880,169881,169883,169885,169887,169889,169891,169893],{"class":31,"line":67},[29,169882,169865],{"class":309},[29,169884,150017],{"class":103},[29,169886,12610],{"class":309},[29,169888,958],{"class":39},[29,169890,12610],{"class":309},[29,169892,1297],{"class":39},[29,169894,87965],{"class":309},[29,169896,169897,169899,169901,169903,169905,169907,169909],{"class":31,"line":75},[29,169898,169865],{"class":309},[29,169900,151065],{"class":103},[29,169902,12610],{"class":309},[29,169904,933],{"class":39},[29,169906,12610],{"class":309},[29,169908,1119],{"class":39},[29,169910,87965],{"class":309},[29,169912,169913],{"class":31,"line":83},[29,169914,33375],{"class":309},[29,169916,169917],{"class":31,"line":158},[29,169918,2575],{"emptyLinePlaceholder":233},[29,169920,169921,169923,169925,169927,169930,169932,169934,169936,169938,169940,169942,169944,169947,169949,169951,169953,169955,169957],{"class":31,"line":166},[29,169922,107962],{"class":305},[29,169924,146920],{"class":39},[29,169926,310],{"class":309},[29,169928,169929],{"class":103},"\"students.csv\"",[29,169931,12610],{"class":309},[29,169933,152105],{"class":103},[29,169935,12610],{"class":309},[29,169937,146935],{"class":5391},[29,169939,355],{"class":305},[29,169941,146940],{"class":103},[29,169943,12610],{"class":309},[29,169945,169946],{"class":5391},"newline",[29,169948,355],{"class":305},[29,169950,7827],{"class":103},[29,169952,13889],{"class":309},[29,169954,31512],{"class":305},[29,169956,148282],{"class":5391},[29,169958,3914],{"class":309},[29,169960,169961,169964,169966,169969,169971],{"class":31,"line":1505},[29,169962,169963],{"class":309},"    writer ",[29,169965,355],{"class":305},[29,169967,169968],{"class":309}," csv.writer(",[29,169970,45483],{"class":5391},[29,169972,316],{"class":309},[29,169974,169975],{"class":31,"line":1788},[29,169976,169977],{"class":309},"    writer.writerows(students)\n",[171,169979,169980],{},"读取 CSV：",[19,169982,169984],{"className":30507,"code":169983,"language":30509,"meta":24,"style":24},"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",[26,169985,169986,169992,169996,170026,170040,170052],{"__ignoreMap":24},[29,169987,169988,169990],{"class":31,"line":32},[29,169989,30521],{"class":305},[29,169991,169848],{"class":309},[29,169993,169994],{"class":31,"line":43},[29,169995,2575],{"emptyLinePlaceholder":233},[29,169997,169998,170000,170002,170004,170006,170008,170010,170012,170014,170016,170018,170020,170022,170024],{"class":31,"line":51},[29,169999,107962],{"class":305},[29,170001,146920],{"class":39},[29,170003,310],{"class":309},[29,170005,169929],{"class":103},[29,170007,12610],{"class":309},[29,170009,146930],{"class":103},[29,170011,12610],{"class":309},[29,170013,146935],{"class":5391},[29,170015,355],{"class":305},[29,170017,146940],{"class":103},[29,170019,13889],{"class":309},[29,170021,31512],{"class":305},[29,170023,148282],{"class":5391},[29,170025,3914],{"class":309},[29,170027,170028,170031,170033,170036,170038],{"class":31,"line":59},[29,170029,170030],{"class":309},"    reader ",[29,170032,355],{"class":305},[29,170034,170035],{"class":309}," csv.reader(",[29,170037,45483],{"class":5391},[29,170039,316],{"class":309},[29,170041,170042,170044,170047,170049],{"class":31,"line":67},[29,170043,3376],{"class":305},[29,170045,170046],{"class":309}," row ",[29,170048,26172],{"class":305},[29,170050,170051],{"class":309}," reader:\n",[29,170053,170054,170056],{"class":31,"line":75},[29,170055,32580],{"class":39},[29,170057,170058],{"class":309},"(row)\n",[171,170060,170061],{},"使用字典写入：",[19,170063,170065],{"className":30507,"code":170064,"language":30509,"meta":24,"style":24},"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",[26,170066,170067,170073,170077,170085,170113,170141,170145,170149,170187,170208,170229,170234],{"__ignoreMap":24},[29,170068,170069,170071],{"class":31,"line":32},[29,170070,30521],{"class":305},[29,170072,169848],{"class":309},[29,170074,170075],{"class":31,"line":43},[29,170076,2575],{"emptyLinePlaceholder":233},[29,170078,170079,170081,170083],{"class":31,"line":51},[29,170080,159845],{"class":309},[29,170082,355],{"class":305},[29,170084,55576],{"class":309},[29,170086,170087,170089,170091,170093,170095,170097,170099,170101,170103,170105,170107,170109,170111],{"class":31,"line":59},[29,170088,148514],{"class":309},[29,170090,62808],{"class":103},[29,170092,51566],{"class":309},[29,170094,150017],{"class":103},[29,170096,12610],{"class":309},[29,170098,69253],{"class":103},[29,170100,51566],{"class":309},[29,170102,958],{"class":39},[29,170104,12610],{"class":309},[29,170106,151601],{"class":103},[29,170108,51566],{"class":309},[29,170110,1297],{"class":39},[29,170112,5105],{"class":309},[29,170114,170115,170117,170119,170121,170123,170125,170127,170129,170131,170133,170135,170137,170139],{"class":31,"line":67},[29,170116,148514],{"class":309},[29,170118,62808],{"class":103},[29,170120,51566],{"class":309},[29,170122,151065],{"class":103},[29,170124,12610],{"class":309},[29,170126,69253],{"class":103},[29,170128,51566],{"class":309},[29,170130,933],{"class":39},[29,170132,12610],{"class":309},[29,170134,151601],{"class":103},[29,170136,51566],{"class":309},[29,170138,1119],{"class":39},[29,170140,5105],{"class":309},[29,170142,170143],{"class":31,"line":75},[29,170144,33375],{"class":309},[29,170146,170147],{"class":31,"line":83},[29,170148,2575],{"emptyLinePlaceholder":233},[29,170150,170151,170153,170155,170157,170159,170161,170163,170165,170167,170169,170171,170173,170175,170177,170179,170181,170183,170185],{"class":31,"line":158},[29,170152,107962],{"class":305},[29,170154,146920],{"class":39},[29,170156,310],{"class":309},[29,170158,169929],{"class":103},[29,170160,12610],{"class":309},[29,170162,152105],{"class":103},[29,170164,12610],{"class":309},[29,170166,146935],{"class":5391},[29,170168,355],{"class":305},[29,170170,146940],{"class":103},[29,170172,12610],{"class":309},[29,170174,169946],{"class":5391},[29,170176,355],{"class":305},[29,170178,7827],{"class":103},[29,170180,13889],{"class":309},[29,170182,31512],{"class":305},[29,170184,148282],{"class":5391},[29,170186,3914],{"class":309},[29,170188,170189,170192,170194,170196,170198,170200,170202,170204,170206],{"class":31,"line":166},[29,170190,170191],{"class":309},"    fieldnames ",[29,170193,355],{"class":305},[29,170195,52355],{"class":309},[29,170197,62808],{"class":103},[29,170199,12610],{"class":309},[29,170201,69253],{"class":103},[29,170203,12610],{"class":309},[29,170205,151601],{"class":103},[29,170207,33375],{"class":309},[29,170209,170210,170212,170214,170217,170219,170221,170224,170226],{"class":31,"line":1505},[29,170211,169963],{"class":309},[29,170213,355],{"class":305},[29,170215,170216],{"class":309}," csv.DictWriter(",[29,170218,45483],{"class":5391},[29,170220,12610],{"class":309},[29,170222,170223],{"class":5391},"fieldnames",[29,170225,355],{"class":305},[29,170227,170228],{"class":309},"fieldnames)\n",[29,170230,170231],{"class":31,"line":1788},[29,170232,170233],{"class":309},"    writer.writeheader()\n",[29,170235,170236],{"class":31,"line":1793},[29,170237,169977],{"class":309},[14,170239,170241],{"id":170240},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[171,170243,123421],{},[259,170245,170246,170249,170252],{},[178,170247,170248],{},"读取文本文件。",[178,170250,170251],{},"统计每个单词出现次数。",[178,170253,170254],{},"输出出现次数最多的前 10 个单词。",[171,170256,10210],{},[19,170258,170260],{"className":30507,"code":170259,"language":30509,"meta":24,"style":24},"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",[26,170261,170262,170272,170276,170289,170305,170309,170319,170328,170332,170344,170364,170373,170377,170395,170399,170429,170433,170449],{"__ignoreMap":24},[29,170263,170264,170266,170268,170270],{"class":31,"line":32},[29,170265,30866],{"class":305},[29,170267,108440],{"class":309},[29,170269,30521],{"class":305},[29,170271,108445],{"class":309},[29,170273,170274],{"class":31,"line":43},[29,170275,2575],{"emptyLinePlaceholder":233},[29,170277,170278,170280,170282,170284,170287],{"class":31,"line":51},[29,170279,168440],{"class":309},[29,170281,355],{"class":305},[29,170283,108674],{"class":309},[29,170285,170286],{"class":103},"\"article.txt\"",[29,170288,316],{"class":309},[29,170290,170291,170293,170295,170297,170299,170301,170303],{"class":31,"line":59},[29,170292,168623],{"class":309},[29,170294,355],{"class":305},[29,170296,169500],{"class":309},[29,170298,146935],{"class":5391},[29,170300,355],{"class":305},[29,170302,146940],{"class":103},[29,170304,316],{"class":309},[29,170306,170307],{"class":31,"line":67},[29,170308,2575],{"emptyLinePlaceholder":233},[29,170310,170311,170314,170316],{"class":31,"line":75},[29,170312,170313],{"class":309},"words ",[29,170315,355],{"class":305},[29,170317,170318],{"class":309}," content.lower().split()\n",[29,170320,170321,170324,170326],{"class":31,"line":83},[29,170322,170323],{"class":309},"counter ",[29,170325,355],{"class":305},[29,170327,87997],{"class":309},[29,170329,170330],{"class":31,"line":158},[29,170331,2575],{"emptyLinePlaceholder":233},[29,170333,170334,170336,170339,170341],{"class":31,"line":166},[29,170335,3200],{"class":305},[29,170337,170338],{"class":309}," word ",[29,170340,26172],{"class":305},[29,170342,170343],{"class":309}," words:\n",[29,170345,170346,170349,170351,170354,170357,170359,170362],{"class":31,"line":1505},[29,170347,170348],{"class":309},"    word ",[29,170350,355],{"class":305},[29,170352,170353],{"class":309}," word.strip(",[29,170355,170356],{"class":103},"\".,!?;:",[29,170358,156624],{"class":39},[29,170360,170361],{"class":103},"'()[]\"",[29,170363,316],{"class":309},[29,170365,170366,170368,170370],{"class":31,"line":1788},[29,170367,3276],{"class":305},[29,170369,39059],{"class":305},[29,170371,170372],{"class":309}," word:\n",[29,170374,170375],{"class":31,"line":1793},[29,170376,148641],{"class":305},[29,170378,170379,170382,170384,170387,170389,170391,170393],{"class":31,"line":1799},[29,170380,170381],{"class":309},"    counter[word] ",[29,170383,355],{"class":305},[29,170385,170386],{"class":309}," counter.get(word, ",[29,170388,499],{"class":39},[29,170390,13889],{"class":309},[29,170392,789],{"class":305},[29,170394,55828],{"class":39},[29,170396,170397],{"class":31,"line":1804},[29,170398,2575],{"emptyLinePlaceholder":233},[29,170400,170401,170404,170406,170408,170411,170413,170415,170417,170419,170421,170423,170425,170427],{"class":31,"line":1818},[29,170402,170403],{"class":309},"items ",[29,170405,355],{"class":305},[29,170407,163733],{"class":39},[29,170409,170410],{"class":309},"(counter.items(), ",[29,170412,154075],{"class":5391},[29,170414,154078],{"class":305},[29,170416,154081],{"class":309},[29,170418,525],{"class":39},[29,170420,112331],{"class":309},[29,170422,163657],{"class":5391},[29,170424,355],{"class":305},[29,170426,31605],{"class":39},[29,170428,316],{"class":309},[29,170430,170431],{"class":31,"line":1823},[29,170432,2575],{"emptyLinePlaceholder":233},[29,170434,170435,170437,170440,170442,170445,170447],{"class":31,"line":1829},[29,170436,3200],{"class":305},[29,170438,170439],{"class":309}," word, count ",[29,170441,26172],{"class":305},[29,170443,170444],{"class":309}," items[:",[29,170446,754],{"class":39},[29,170448,165884],{"class":309},[29,170450,170451,170453],{"class":31,"line":1850},[29,170452,31428],{"class":39},[29,170454,170455],{"class":309},"(word, count)\n",[14,170457,170459],{"id":170458},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[19,170461,170463],{"className":30507,"code":170462,"language":30509,"meta":24,"style":24},"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",[26,170464,170465,170471,170481,170485,170497,170501,170505,170513,170523,170529,170533,170563,170573,170577,170581,170589,170619,170643,170647,170651,170659,170688,170693],{"__ignoreMap":24},[29,170466,170467,170469],{"class":31,"line":32},[29,170468,30521],{"class":305},[29,170470,147220],{"class":309},[29,170472,170473,170475,170477,170479],{"class":31,"line":43},[29,170474,30866],{"class":305},[29,170476,108440],{"class":309},[29,170478,30521],{"class":305},[29,170480,108445],{"class":309},[29,170482,170483],{"class":31,"line":51},[29,170484,2575],{"emptyLinePlaceholder":233},[29,170486,170487,170489,170491,170493,170495],{"class":31,"line":59},[29,170488,151953],{"class":39},[29,170490,13739],{"class":305},[29,170492,108674],{"class":309},[29,170494,151960],{"class":103},[29,170496,316],{"class":309},[29,170498,170499],{"class":31,"line":67},[29,170500,2575],{"emptyLinePlaceholder":233},[29,170502,170503],{"class":31,"line":75},[29,170504,2575],{"emptyLinePlaceholder":233},[29,170506,170507,170509,170511],{"class":31,"line":83},[29,170508,32076],{"class":305},[29,170510,151977],{"class":35},[29,170512,32082],{"class":309},[29,170514,170515,170517,170519,170521],{"class":31,"line":158},[29,170516,3276],{"class":305},[29,170518,39059],{"class":305},[29,170520,151988],{"class":39},[29,170522,151991],{"class":309},[29,170524,170525,170527],{"class":31,"line":166},[29,170526,14927],{"class":305},[29,170528,51967],{"class":309},[29,170530,170531],{"class":31,"line":1505},[29,170532,2575],{"emptyLinePlaceholder":233},[29,170534,170535,170537,170539,170541,170543,170545,170547,170549,170551,170553,170555,170557,170559,170561],{"class":31,"line":1788},[29,170536,34307],{"class":305},[29,170538,146920],{"class":39},[29,170540,310],{"class":309},[29,170542,151953],{"class":39},[29,170544,12610],{"class":309},[29,170546,146930],{"class":103},[29,170548,12610],{"class":309},[29,170550,146935],{"class":5391},[29,170552,355],{"class":305},[29,170554,146940],{"class":103},[29,170556,13889],{"class":309},[29,170558,31512],{"class":305},[29,170560,148282],{"class":5391},[29,170562,3914],{"class":309},[29,170564,170565,170567,170569,170571],{"class":31,"line":1793},[29,170566,14927],{"class":305},[29,170568,148293],{"class":309},[29,170570,45483],{"class":5391},[29,170572,316],{"class":309},[29,170574,170575],{"class":31,"line":1799},[29,170576,2575],{"emptyLinePlaceholder":233},[29,170578,170579],{"class":31,"line":1804},[29,170580,2575],{"emptyLinePlaceholder":233},[29,170582,170583,170585,170587],{"class":31,"line":1818},[29,170584,32076],{"class":305},[29,170586,152087],{"class":35},[29,170588,152090],{"class":309},[29,170590,170591,170593,170595,170597,170599,170601,170603,170605,170607,170609,170611,170613,170615,170617],{"class":31,"line":1823},[29,170592,34307],{"class":305},[29,170594,146920],{"class":39},[29,170596,310],{"class":309},[29,170598,151953],{"class":39},[29,170600,12610],{"class":309},[29,170602,152105],{"class":103},[29,170604,12610],{"class":309},[29,170606,146935],{"class":5391},[29,170608,355],{"class":305},[29,170610,146940],{"class":103},[29,170612,13889],{"class":309},[29,170614,31512],{"class":305},[29,170616,148282],{"class":5391},[29,170618,3914],{"class":309},[29,170620,170621,170623,170625,170627,170629,170631,170633,170635,170637,170639,170641],{"class":31,"line":1829},[29,170622,152126],{"class":309},[29,170624,45483],{"class":5391},[29,170626,12610],{"class":309},[29,170628,147266],{"class":5391},[29,170630,355],{"class":305},[29,170632,34116],{"class":39},[29,170634,12610],{"class":309},[29,170636,152141],{"class":5391},[29,170638,355],{"class":305},[29,170640,386],{"class":39},[29,170642,316],{"class":309},[29,170644,170645],{"class":31,"line":1850},[29,170646,2575],{"emptyLinePlaceholder":233},[29,170648,170649],{"class":31,"line":1855},[29,170650,2575],{"emptyLinePlaceholder":233},[29,170652,170653,170655,170657],{"class":31,"line":1869},[29,170654,159845],{"class":309},[29,170656,355],{"class":305},[29,170658,153171],{"class":309},[29,170660,170661,170664,170666,170668,170670,170672,170674,170676,170678,170680,170682,170684,170686],{"class":31,"line":1874},[29,170662,170663],{"class":309},"students.append({",[29,170665,62808],{"class":103},[29,170667,51566],{"class":309},[29,170669,150017],{"class":103},[29,170671,12610],{"class":309},[29,170673,69253],{"class":103},[29,170675,51566],{"class":309},[29,170677,958],{"class":39},[29,170679,12610],{"class":309},[29,170681,151601],{"class":103},[29,170683,51566],{"class":309},[29,170685,1297],{"class":39},[29,170687,165281],{"class":309},[29,170689,170690],{"class":31,"line":1903},[29,170691,170692],{"class":309},"save_students(students)\n",[29,170694,170695,170697,170699,170702],{"class":31,"line":1908},[29,170696,30544],{"class":39},[29,170698,310],{"class":309},[29,170700,170701],{"class":103},"\"保存成功\"",[29,170703,316],{"class":309},[14,170705,170707],{"id":170706},"_814-易错点","8.14 易错点",[259,170709,170710,170714,170720,170725,170732,170739],{},[178,170711,170712,168973],{},[26,170713,1103],{},[178,170715,170716,170717,28514],{},"读写中文要指定 ",[26,170718,170719],{},"encoding=\"utf-8\"",[178,170721,170722,170723,28514],{},"打开文件后要关闭，推荐使用 ",[26,170724,107962],{},[178,170726,170727,170728,170731],{},"读取大文件不要直接 ",[26,170729,170730],{},"read()"," 全部内容。",[178,170733,170734,170735,170738],{},"Windows 写 CSV 时建议加 ",[26,170736,170737],{},"newline=\"\"","，避免空行。",[178,170740,170741],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170743,170745],{"id":170744},"_815-本章练习","8.15 本章练习",[259,170747,170748,170755,170760,170763,170766],{},[178,170749,170750,170751,170754],{},"写入一个 ",[26,170752,170753],{},"students.txt","，每行保存一个学生姓名。",[178,170756,104484,170757,170759],{},[26,170758,170753],{}," 并输出所有学生。",[178,170761,170762],{},"把学生列表保存为 JSON 文件。",[178,170764,170765],{},"从 JSON 文件读取学生数据，计算平均分。",[178,170767,170768,170769,170772,170773,170776],{},"写一个日志函数 ",[26,170770,170771],{},"write_log(message)","，每次调用向 ",[26,170774,170775],{},"app.log"," 追加一行。",[223,170778,170779],{},"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":24,"searchDepth":43,"depth":43,"links":170781},[170782,170783,170787,170788,170794,170795,170796,170797,170798,170799,170800,170801,170802,170803,170804],{"id":168293,"depth":43,"text":168294},{"id":168334,"depth":43,"text":168335,"children":170784},[170785,170786],{"id":168338,"depth":51,"text":168339},{"id":168372,"depth":51,"text":168373},{"id":168486,"depth":43,"text":168487},{"id":168579,"depth":43,"text":168580,"children":170789},[170790,170791,170792,170793],{"id":168583,"depth":51,"text":168584},{"id":168670,"depth":51,"text":168671},{"id":168740,"depth":51,"text":168741},{"id":168834,"depth":51,"text":168835},{"id":168904,"depth":43,"text":168905},{"id":168967,"depth":43,"text":168968},{"id":169128,"depth":43,"text":169129},{"id":169191,"depth":43,"text":169192},{"id":169307,"depth":43,"text":169308},{"id":169517,"depth":43,"text":169518},{"id":169829,"depth":43,"text":169830},{"id":170240,"depth":43,"text":170241},{"id":170458,"depth":43,"text":170459},{"id":170706,"depth":43,"text":170707},{"id":170744,"depth":43,"text":170745},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168285,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170811,"title":170812,"body":170813,"description":230,"extension":231,"meta":172999,"navigation":233,"path":173000,"seo":173001,"stem":173002,"__hash__":173003},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170814,"toc":172966},[170815,170818,170822,170825,170828,170920,170922,170941,170946,170950,170953,170956,170985,170992,170995,170999,171002,171031,171033,171085,171091,171144,171148,171246,171249,171316,171320,171377,171379,171385,171389,171394,171400,171491,171496,171500,171503,171581,171584,171622,171626,171744,171747,171751,171754,171799,171802,171806,171811,171817,171867,171870,171901,171905,171909,171939,171943,171978,171982,172017,172057,172061,172077,172080,172084,172088,172167,172171,172212,172216,172271,172275,172309,172313,172343,172352,172359,172365,172422,172425,172433,172436,172440,172447,172450,172456,172459,172476,172481,172485,172491,172504,172507,172544,172547,172558,172561,172575,172578,172592,172596,172603,172636,172639,172641,172647,172650,172654,172656,172662,172667,172840,172844,172907,172911,172935,172939,172963],[10,170816,170812],{"id":170817},"_9-异常模块与包",[14,170819,170821],{"id":170820},"_91-什么是异常","9.1 什么是异常",[171,170823,170824],{},"异常是程序运行过程中出现的错误。",[171,170826,170827],{},"常见异常：",[445,170829,170830,170839],{},[448,170831,170832],{},[451,170833,170834,170837],{},[454,170835,170836],{},"异常",[454,170838,25998],{},[492,170840,170841,170851,170861,170870,170880,170890,170900,170910],{},[451,170842,170843,170848],{},[497,170844,170845],{},[26,170846,170847],{},"NameError",[497,170849,170850],{},"使用了未定义变量",[451,170852,170853,170858],{},[497,170854,170855],{},[26,170856,170857],{},"TypeError",[497,170859,170860],{},"类型不匹配",[451,170862,170863,170867],{},[497,170864,170865],{},[26,170866,154963],{},[497,170868,170869],{},"值不合法",[451,170871,170872,170877],{},[497,170873,170874],{},[26,170875,170876],{},"IndexError",[497,170878,170879],{},"列表索引越界",[451,170881,170882,170887],{},[497,170883,170884],{},[26,170885,170886],{},"KeyError",[497,170888,170889],{},"字典 key 不存在",[451,170891,170892,170897],{},[497,170893,170894],{},[26,170895,170896],{},"FileNotFoundError",[497,170898,170899],{},"文件不存在",[451,170901,170902,170907],{},[497,170903,170904],{},[26,170905,170906],{},"ZeroDivisionError",[497,170908,170909],{},"除数为 0",[451,170911,170912,170917],{},[497,170913,170914],{},[26,170915,170916],{},"ImportError",[497,170918,170919],{},"导入失败",[171,170921,15310],{},[19,170923,170925],{"className":30507,"code":170924,"language":30509,"meta":24,"style":24},"num = int(\"abc\")\n",[26,170926,170927],{"__ignoreMap":24},[29,170928,170929,170931,170933,170935,170937,170939],{"class":31,"line":32},[29,170930,155916],{"class":309},[29,170932,355],{"class":305},[29,170934,2557],{"class":39},[29,170936,310],{"class":309},[29,170938,156009],{"class":103},[29,170940,316],{"class":309},[171,170942,170943,170944,28514],{},"会触发 ",[26,170945,154963],{},[14,170947,170949],{"id":170948},"_92-为什么要处理异常","9.2 为什么要处理异常",[171,170951,170952],{},"如果不处理异常，程序会直接终止。",[171,170954,170955],{},"例如用户输入年龄：",[19,170957,170959],{"className":30507,"code":170958,"language":30509,"meta":24,"style":24},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[26,170960,170961,170979],{"__ignoreMap":24},[29,170962,170963,170965,170967,170969,170971,170973,170975,170977],{"class":31,"line":32},[29,170964,146675],{"class":309},[29,170966,355],{"class":305},[29,170968,2557],{"class":39},[29,170970,310],{"class":309},[29,170972,53950],{"class":39},[29,170974,310],{"class":309},[29,170976,152523],{"class":103},[29,170978,30626],{"class":309},[29,170980,170981,170983],{"class":31,"line":43},[29,170982,30544],{"class":39},[29,170984,155890],{"class":309},[171,170986,170987,170988,170991],{},"用户输入 ",[26,170989,170990],{},"abc","，程序就会报错退出。",[171,170993,170994],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,170996,170998],{"id":170997},"_93-try-except","9.3 try except",[171,171000,171001],{},"基础语法：",[19,171003,171005],{"className":30507,"code":171004,"language":30509,"meta":24,"style":24},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[26,171006,171007,171014,171019,171026],{"__ignoreMap":24},[29,171008,171009,171012],{"class":31,"line":32},[29,171010,171011],{"class":305},"try",[29,171013,3914],{"class":309},[29,171015,171016],{"class":31,"line":43},[29,171017,171018],{"class":309},"    可能出错的代码\n",[29,171020,171021,171024],{"class":31,"line":51},[29,171022,171023],{"class":305},"except",[29,171025,3914],{"class":309},[29,171027,171028],{"class":31,"line":59},[29,171029,171030],{"class":309},"    出错后的处理代码\n",[171,171032,15310],{},[19,171034,171036],{"className":30507,"code":171035,"language":30509,"meta":24,"style":24},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[26,171037,171038,171044,171062,171068,171074],{"__ignoreMap":24},[29,171039,171040,171042],{"class":31,"line":32},[29,171041,171011],{"class":305},[29,171043,3914],{"class":309},[29,171045,171046,171048,171050,171052,171054,171056,171058,171060],{"class":31,"line":43},[29,171047,152515],{"class":309},[29,171049,355],{"class":305},[29,171051,2557],{"class":39},[29,171053,310],{"class":309},[29,171055,53950],{"class":39},[29,171057,310],{"class":309},[29,171059,152523],{"class":103},[29,171061,30626],{"class":309},[29,171063,171064,171066],{"class":31,"line":51},[29,171065,31428],{"class":39},[29,171067,155890],{"class":309},[29,171069,171070,171072],{"class":31,"line":59},[29,171071,171023],{"class":305},[29,171073,3914],{"class":309},[29,171075,171076,171078,171080,171083],{"class":31,"line":67},[29,171077,31428],{"class":39},[29,171079,310],{"class":309},[29,171081,171082],{"class":103},"\"年龄必须是数字\"",[29,171084,316],{"class":309},[171,171086,171087,171088,171090],{},"不建议裸写 ",[26,171089,171023],{},"，最好指定异常类型。",[19,171092,171094],{"className":30507,"code":171093,"language":30509,"meta":24,"style":24},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[26,171095,171096,171102,171120,171126,171134],{"__ignoreMap":24},[29,171097,171098,171100],{"class":31,"line":32},[29,171099,171011],{"class":305},[29,171101,3914],{"class":309},[29,171103,171104,171106,171108,171110,171112,171114,171116,171118],{"class":31,"line":43},[29,171105,152515],{"class":309},[29,171107,355],{"class":305},[29,171109,2557],{"class":39},[29,171111,310],{"class":309},[29,171113,53950],{"class":39},[29,171115,310],{"class":309},[29,171117,152523],{"class":103},[29,171119,30626],{"class":309},[29,171121,171122,171124],{"class":31,"line":51},[29,171123,31428],{"class":39},[29,171125,155890],{"class":309},[29,171127,171128,171130,171132],{"class":31,"line":59},[29,171129,171023],{"class":305},[29,171131,152355],{"class":39},[29,171133,3914],{"class":309},[29,171135,171136,171138,171140,171142],{"class":31,"line":67},[29,171137,31428],{"class":39},[29,171139,310],{"class":309},[29,171141,171082],{"class":103},[29,171143,316],{"class":309},[14,171145,171147],{"id":171146},"_94-捕获多个异常","9.4 捕获多个异常",[19,171149,171151],{"className":30507,"code":171150,"language":30509,"meta":24,"style":24},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[26,171152,171153,171159,171180,171200,171207,171215,171226,171235],{"__ignoreMap":24},[29,171154,171155,171157],{"class":31,"line":32},[29,171156,171011],{"class":305},[29,171158,3914],{"class":309},[29,171160,171161,171164,171166,171168,171170,171172,171174,171176,171178],{"class":31,"line":43},[29,171162,171163],{"class":309},"    nums ",[29,171165,355],{"class":305},[29,171167,52355],{"class":309},[29,171169,525],{"class":39},[29,171171,12610],{"class":309},[29,171173,386],{"class":39},[29,171175,12610],{"class":309},[29,171177,380],{"class":39},[29,171179,33375],{"class":309},[29,171181,171182,171185,171187,171189,171191,171193,171195,171198],{"class":31,"line":51},[29,171183,171184],{"class":309},"    index ",[29,171186,355],{"class":305},[29,171188,2557],{"class":39},[29,171190,310],{"class":309},[29,171192,53950],{"class":39},[29,171194,310],{"class":309},[29,171196,171197],{"class":103},"\"请输入索引:\"",[29,171199,30626],{"class":309},[29,171201,171202,171204],{"class":31,"line":59},[29,171203,31428],{"class":39},[29,171205,171206],{"class":309},"(nums[index])\n",[29,171208,171209,171211,171213],{"class":31,"line":67},[29,171210,171023],{"class":305},[29,171212,152355],{"class":39},[29,171214,3914],{"class":309},[29,171216,171217,171219,171221,171224],{"class":31,"line":75},[29,171218,31428],{"class":39},[29,171220,310],{"class":309},[29,171222,171223],{"class":103},"\"索引必须是整数\"",[29,171225,316],{"class":309},[29,171227,171228,171230,171233],{"class":31,"line":83},[29,171229,171023],{"class":305},[29,171231,171232],{"class":39}," IndexError",[29,171234,3914],{"class":309},[29,171236,171237,171239,171241,171244],{"class":31,"line":158},[29,171238,31428],{"class":39},[29,171240,310],{"class":309},[29,171242,171243],{"class":103},"\"索引越界\"",[29,171245,316],{"class":309},[171,171247,171248],{},"多个异常使用相同处理逻辑：",[19,171250,171252],{"className":30507,"code":171251,"language":30509,"meta":24,"style":24},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[26,171253,171254,171260,171278,171291,171305],{"__ignoreMap":24},[29,171255,171256,171258],{"class":31,"line":32},[29,171257,171011],{"class":305},[29,171259,3914],{"class":309},[29,171261,171262,171264,171266,171268,171270,171272,171274,171276],{"class":31,"line":43},[29,171263,45722],{"class":309},[29,171265,355],{"class":305},[29,171267,2557],{"class":39},[29,171269,310],{"class":309},[29,171271,53950],{"class":39},[29,171273,310],{"class":309},[29,171275,155925],{"class":103},[29,171277,30626],{"class":309},[29,171279,171280,171282,171284,171286,171288],{"class":31,"line":51},[29,171281,31428],{"class":39},[29,171283,310],{"class":309},[29,171285,754],{"class":39},[29,171287,156175],{"class":305},[29,171289,171290],{"class":309}," num)\n",[29,171292,171293,171295,171297,171299,171301,171303],{"class":31,"line":59},[29,171294,171023],{"class":305},[29,171296,1834],{"class":309},[29,171298,154963],{"class":39},[29,171300,12610],{"class":309},[29,171302,170906],{"class":39},[29,171304,30915],{"class":309},[29,171306,171307,171309,171311,171314],{"class":31,"line":67},[29,171308,31428],{"class":39},[29,171310,310],{"class":309},[29,171312,171313],{"class":103},"\"输入不合法\"",[29,171315,316],{"class":309},[14,171317,171319],{"id":171318},"_95-获取异常信息","9.5 获取异常信息",[19,171321,171323],{"className":30507,"code":171322,"language":30509,"meta":24,"style":24},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[26,171324,171325,171331,171345,171356],{"__ignoreMap":24},[29,171326,171327,171329],{"class":31,"line":32},[29,171328,171011],{"class":305},[29,171330,3914],{"class":309},[29,171332,171333,171335,171337,171339,171341,171343],{"class":31,"line":43},[29,171334,45722],{"class":309},[29,171336,355],{"class":305},[29,171338,2557],{"class":39},[29,171340,310],{"class":309},[29,171342,156009],{"class":103},[29,171344,316],{"class":309},[29,171346,171347,171349,171351,171353],{"class":31,"line":51},[29,171348,171023],{"class":305},[29,171350,152355],{"class":39},[29,171352,64733],{"class":305},[29,171354,171355],{"class":309}," e:\n",[29,171357,171358,171360,171362,171364,171367,171369,171371,171373,171375],{"class":31,"line":59},[29,171359,31428],{"class":39},[29,171361,310],{"class":309},[29,171363,361],{"class":305},[29,171365,171366],{"class":103},"\"出错了:",[29,171368,1204],{"class":39},[29,171370,383],{"class":309},[29,171372,1254],{"class":39},[29,171374,559],{"class":103},[29,171376,316],{"class":309},[171,171378,146586],{},[19,171380,171383],{"className":171381,"code":171382,"language":5362,"meta":24},[5360],"出错了:invalid literal for int() with base 10: 'abc'\n",[26,171384,171382],{"__ignoreMap":24},[14,171386,171388],{"id":171387},"_96-else和finally","9.6 else和finally",[171,171390,171391,171393],{},[26,171392,1877],{},"：没有异常时执行。",[171,171395,171396,171399],{},[26,171397,171398],{},"finally","：无论是否异常都会执行。",[19,171401,171403],{"className":30507,"code":171402,"language":30509,"meta":24,"style":24},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[26,171404,171405,171411,171429,171437,171447,171453,171474,171480],{"__ignoreMap":24},[29,171406,171407,171409],{"class":31,"line":32},[29,171408,171011],{"class":305},[29,171410,3914],{"class":309},[29,171412,171413,171415,171417,171419,171421,171423,171425,171427],{"class":31,"line":43},[29,171414,45722],{"class":309},[29,171416,355],{"class":305},[29,171418,2557],{"class":39},[29,171420,310],{"class":309},[29,171422,53950],{"class":39},[29,171424,310],{"class":309},[29,171426,155925],{"class":103},[29,171428,30626],{"class":309},[29,171430,171431,171433,171435],{"class":31,"line":51},[29,171432,171023],{"class":305},[29,171434,152355],{"class":39},[29,171436,3914],{"class":309},[29,171438,171439,171441,171443,171445],{"class":31,"line":59},[29,171440,31428],{"class":39},[29,171442,310],{"class":309},[29,171444,153343],{"class":103},[29,171446,316],{"class":309},[29,171448,171449,171451],{"class":31,"line":67},[29,171450,1877],{"class":305},[29,171452,3914],{"class":309},[29,171454,171455,171457,171459,171461,171464,171466,171468,171470,171472],{"class":31,"line":75},[29,171456,31428],{"class":39},[29,171458,310],{"class":309},[29,171460,361],{"class":305},[29,171462,171463],{"class":103},"\"输入正确:",[29,171465,1204],{"class":39},[29,171467,1841],{"class":309},[29,171469,1254],{"class":39},[29,171471,559],{"class":103},[29,171473,316],{"class":309},[29,171475,171476,171478],{"class":31,"line":83},[29,171477,171398],{"class":305},[29,171479,3914],{"class":309},[29,171481,171482,171484,171486,171489],{"class":31,"line":158},[29,171483,31428],{"class":39},[29,171485,310],{"class":309},[29,171487,171488],{"class":103},"\"程序结束\"",[29,171490,316],{"class":309},[171,171492,171493,171495],{},[26,171494,171398],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171497,171499],{"id":171498},"_97-抛出异常","9.7 抛出异常",[171,171501,171502],{},"程序可以主动抛出异常。",[19,171504,171506],{"className":30507,"code":171505,"language":30509,"meta":24,"style":24},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[26,171507,171508,171517,171529,171542,171562,171566,171570],{"__ignoreMap":24},[29,171509,171510,171512,171515],{"class":31,"line":32},[29,171511,32076],{"class":305},[29,171513,171514],{"class":35}," set_age",[29,171516,161544],{"class":309},[29,171518,171519,171521,171523,171525,171527],{"class":31,"line":43},[29,171520,3276],{"class":305},[29,171522,15882],{"class":309},[29,171524,1218],{"class":305},[29,171526,4268],{"class":39},[29,171528,3914],{"class":309},[29,171530,171531,171533,171535,171537,171540],{"class":31,"line":51},[29,171532,103561],{"class":305},[29,171534,152355],{"class":39},[29,171536,310],{"class":309},[29,171538,171539],{"class":103},"\"年龄不能为负数\"",[29,171541,316],{"class":309},[29,171543,171544,171546,171548,171550,171552,171554,171556,171558,171560],{"class":31,"line":59},[29,171545,31428],{"class":39},[29,171547,310],{"class":309},[29,171549,361],{"class":305},[29,171551,162112],{"class":103},[29,171553,1204],{"class":39},[29,171555,70350],{"class":309},[29,171557,1254],{"class":39},[29,171559,559],{"class":103},[29,171561,316],{"class":309},[29,171563,171564],{"class":31,"line":67},[29,171565,2575],{"emptyLinePlaceholder":233},[29,171567,171568],{"class":31,"line":75},[29,171569,2575],{"emptyLinePlaceholder":233},[29,171571,171572,171575,171577,171579],{"class":31,"line":83},[29,171573,171574],{"class":309},"set_age(",[29,171576,840],{"class":305},[29,171578,525],{"class":39},[29,171580,316],{"class":309},[171,171582,171583],{},"调用者可以捕获：",[19,171585,171587],{"className":30507,"code":171586,"language":30509,"meta":24,"style":24},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[26,171588,171589,171595,171606,171616],{"__ignoreMap":24},[29,171590,171591,171593],{"class":31,"line":32},[29,171592,171011],{"class":305},[29,171594,3914],{"class":309},[29,171596,171597,171600,171602,171604],{"class":31,"line":43},[29,171598,171599],{"class":309},"    set_age(",[29,171601,840],{"class":305},[29,171603,525],{"class":39},[29,171605,316],{"class":309},[29,171607,171608,171610,171612,171614],{"class":31,"line":51},[29,171609,171023],{"class":305},[29,171611,152355],{"class":39},[29,171613,64733],{"class":305},[29,171615,171355],{"class":309},[29,171617,171618,171620],{"class":31,"line":59},[29,171619,31428],{"class":39},[29,171621,67128],{"class":309},[14,171623,171625],{"id":171624},"_98-自定义异常","9.8 自定义异常",[19,171627,171629],{"className":30507,"code":171628,"language":30509,"meta":24,"style":24},"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",[26,171630,171631,171645,171649,171653,171657,171665,171675,171686,171696,171700,171704,171710,171727,171738],{"__ignoreMap":24},[29,171632,171633,171635,171638,171640,171643],{"class":31,"line":32},[29,171634,14869],{"class":305},[29,171636,171637],{"class":35}," BalanceNotEnoughError",[29,171639,310],{"class":309},[29,171641,171642],{"class":39},"Exception",[29,171644,30915],{"class":309},[29,171646,171647],{"class":31,"line":43},[29,171648,149666],{"class":305},[29,171650,171651],{"class":31,"line":51},[29,171652,2575],{"emptyLinePlaceholder":233},[29,171654,171655],{"class":31,"line":59},[29,171656,2575],{"emptyLinePlaceholder":233},[29,171658,171659,171661,171663],{"class":31,"line":67},[29,171660,32076],{"class":305},[29,171662,150315],{"class":35},[29,171664,162941],{"class":309},[29,171666,171667,171669,171671,171673],{"class":31,"line":75},[29,171668,3276],{"class":305},[29,171670,150271],{"class":309},[29,171672,1268],{"class":305},[29,171674,162718],{"class":309},[29,171676,171677,171679,171682,171684],{"class":31,"line":83},[29,171678,103561],{"class":305},[29,171680,171681],{"class":309}," BalanceNotEnoughError(",[29,171683,150366],{"class":103},[29,171685,316],{"class":309},[29,171687,171688,171690,171692,171694],{"class":31,"line":158},[29,171689,4265],{"class":305},[29,171691,162948],{"class":309},[29,171693,840],{"class":305},[29,171695,150304],{"class":309},[29,171697,171698],{"class":31,"line":166},[29,171699,2575],{"emptyLinePlaceholder":233},[29,171701,171702],{"class":31,"line":1505},[29,171703,2575],{"emptyLinePlaceholder":233},[29,171705,171706,171708],{"class":31,"line":1788},[29,171707,171011],{"class":305},[29,171709,3914],{"class":309},[29,171711,171712,171714,171716,171719,171721,171723,171725],{"class":31,"line":1793},[29,171713,162619],{"class":309},[29,171715,355],{"class":305},[29,171717,171718],{"class":309}," withdraw(",[29,171720,619],{"class":39},[29,171722,12610],{"class":309},[29,171724,1898],{"class":39},[29,171726,316],{"class":309},[29,171728,171729,171731,171734,171736],{"class":31,"line":1799},[29,171730,171023],{"class":305},[29,171732,171733],{"class":309}," BalanceNotEnoughError ",[29,171735,31512],{"class":305},[29,171737,171355],{"class":309},[29,171739,171740,171742],{"class":31,"line":1804},[29,171741,31428],{"class":39},[29,171743,67128],{"class":309},[171,171745,171746],{},"入门阶段大多数情况使用内置异常即可。",[14,171748,171750],{"id":171749},"_99-traceback","9.9 traceback",[171,171752,171753],{},"调试时可以输出完整异常堆栈。",[19,171755,171757],{"className":30507,"code":171756,"language":30509,"meta":24,"style":24},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[26,171758,171759,171766,171770,171776,171786,171794],{"__ignoreMap":24},[29,171760,171761,171763],{"class":31,"line":32},[29,171762,30521],{"class":305},[29,171764,171765],{"class":309}," traceback\n",[29,171767,171768],{"class":31,"line":43},[29,171769,2575],{"emptyLinePlaceholder":233},[29,171771,171772,171774],{"class":31,"line":51},[29,171773,171011],{"class":305},[29,171775,3914],{"class":309},[29,171777,171778,171780,171782,171784],{"class":31,"line":59},[29,171779,2160],{"class":39},[29,171781,310],{"class":309},[29,171783,156009],{"class":103},[29,171785,316],{"class":309},[29,171787,171788,171790,171792],{"class":31,"line":67},[29,171789,171023],{"class":305},[29,171791,152355],{"class":39},[29,171793,3914],{"class":309},[29,171795,171796],{"class":31,"line":75},[29,171797,171798],{"class":309},"    traceback.print_exc()\n",[171,171800,171801],{},"日志系统中常把异常堆栈记录到文件。",[14,171803,171805],{"id":171804},"_910-什么是模块","9.10 什么是模块",[171,171807,171808,171809,126112],{},"模块就是一个 ",[26,171810,146481],{},[171,171812,171813,171814,24791],{},"例如创建 ",[26,171815,171816],{},"my_math.py",[19,171818,171820],{"className":30507,"code":171819,"language":30509,"meta":24,"style":24},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[26,171821,171822,171830,171840,171844,171848,171857],{"__ignoreMap":24},[29,171823,171824,171826,171828],{"class":31,"line":32},[29,171825,32076],{"class":305},[29,171827,5384],{"class":35},[29,171829,151222],{"class":309},[29,171831,171832,171834,171836,171838],{"class":31,"line":43},[29,171833,4265],{"class":305},[29,171835,11044],{"class":309},[29,171837,789],{"class":305},[29,171839,151233],{"class":309},[29,171841,171842],{"class":31,"line":51},[29,171843,2575],{"emptyLinePlaceholder":233},[29,171845,171846],{"class":31,"line":59},[29,171847,2575],{"emptyLinePlaceholder":233},[29,171849,171850,171852,171855],{"class":31,"line":67},[29,171851,32076],{"class":305},[29,171853,171854],{"class":35}," sub",[29,171856,151222],{"class":309},[29,171858,171859,171861,171863,171865],{"class":31,"line":75},[29,171860,4265],{"class":305},[29,171862,11044],{"class":309},[29,171864,840],{"class":305},[29,171866,151233],{"class":309},[171,171868,171869],{},"在另一个文件中导入：",[19,171871,171873],{"className":30507,"code":171872,"language":30509,"meta":24,"style":24},"import my_math\n\nprint(my_math.add(1, 2))\n",[26,171874,171875,171882,171886],{"__ignoreMap":24},[29,171876,171877,171879],{"class":31,"line":32},[29,171878,30521],{"class":305},[29,171880,171881],{"class":309}," my_math\n",[29,171883,171884],{"class":31,"line":43},[29,171885,2575],{"emptyLinePlaceholder":233},[29,171887,171888,171890,171893,171895,171897,171899],{"class":31,"line":51},[29,171889,30544],{"class":39},[29,171891,171892],{"class":309},"(my_math.add(",[29,171894,525],{"class":39},[29,171896,12610],{"class":309},[29,171898,386],{"class":39},[29,171900,30626],{"class":309},[14,171902,171904],{"id":171903},"_911-import导入","9.11 import导入",[275,171906,171908],{"id":171907},"_9111-导入模块","9.11.1 导入模块",[19,171910,171912],{"className":30507,"code":171911,"language":30509,"meta":24,"style":24},"import random\n\nprint(random.randint(1, 10))\n",[26,171913,171914,171920,171924],{"__ignoreMap":24},[29,171915,171916,171918],{"class":31,"line":32},[29,171917,30521],{"class":305},[29,171919,45457],{"class":309},[29,171921,171922],{"class":31,"line":43},[29,171923,2575],{"emptyLinePlaceholder":233},[29,171925,171926,171928,171931,171933,171935,171937],{"class":31,"line":51},[29,171927,30544],{"class":39},[29,171929,171930],{"class":309},"(random.randint(",[29,171932,525],{"class":39},[29,171934,12610],{"class":309},[29,171936,754],{"class":39},[29,171938,30626],{"class":309},[275,171940,171942],{"id":171941},"_9112-导入指定内容","9.11.2 导入指定内容",[19,171944,171946],{"className":30507,"code":171945,"language":30509,"meta":24,"style":24},"from random import randint\n\nprint(randint(1, 10))\n",[26,171947,171948,171959,171963],{"__ignoreMap":24},[29,171949,171950,171952,171954,171956],{"class":31,"line":32},[29,171951,30866],{"class":305},[29,171953,57925],{"class":309},[29,171955,30521],{"class":305},[29,171957,171958],{"class":309}," randint\n",[29,171960,171961],{"class":31,"line":43},[29,171962,2575],{"emptyLinePlaceholder":233},[29,171964,171965,171967,171970,171972,171974,171976],{"class":31,"line":51},[29,171966,30544],{"class":39},[29,171968,171969],{"class":309},"(randint(",[29,171971,525],{"class":39},[29,171973,12610],{"class":309},[29,171975,754],{"class":39},[29,171977,30626],{"class":309},[275,171979,171981],{"id":171980},"_9113-起别名","9.11.3 起别名",[19,171983,171985],{"className":30507,"code":171984,"language":30509,"meta":24,"style":24},"import random as rd\n\nprint(rd.randint(1, 10))\n",[26,171986,171987,171998,172002],{"__ignoreMap":24},[29,171988,171989,171991,171993,171995],{"class":31,"line":32},[29,171990,30521],{"class":305},[29,171992,57925],{"class":309},[29,171994,31512],{"class":305},[29,171996,171997],{"class":309}," rd\n",[29,171999,172000],{"class":31,"line":43},[29,172001,2575],{"emptyLinePlaceholder":233},[29,172003,172004,172006,172009,172011,172013,172015],{"class":31,"line":51},[29,172005,30544],{"class":39},[29,172007,172008],{"class":309},"(rd.randint(",[29,172010,525],{"class":39},[29,172012,12610],{"class":309},[29,172014,754],{"class":39},[29,172016,30626],{"class":309},[19,172018,172020],{"className":30507,"code":172019,"language":30509,"meta":24,"style":24},"from random import randint as rint\n\nprint(rint(1, 10))\n",[26,172021,172022,172038,172042],{"__ignoreMap":24},[29,172023,172024,172026,172028,172030,172033,172035],{"class":31,"line":32},[29,172025,30866],{"class":305},[29,172027,57925],{"class":309},[29,172029,30521],{"class":305},[29,172031,172032],{"class":309}," randint ",[29,172034,31512],{"class":305},[29,172036,172037],{"class":309}," rint\n",[29,172039,172040],{"class":31,"line":43},[29,172041,2575],{"emptyLinePlaceholder":233},[29,172043,172044,172046,172049,172051,172053,172055],{"class":31,"line":51},[29,172045,30544],{"class":39},[29,172047,172048],{"class":309},"(rint(",[29,172050,525],{"class":39},[29,172052,12610],{"class":309},[29,172054,754],{"class":39},[29,172056,30626],{"class":309},[275,172058,172060],{"id":172059},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[19,172062,172064],{"className":30507,"code":172063,"language":30509,"meta":24,"style":24},"from random import *\n",[26,172065,172066],{"__ignoreMap":24},[29,172067,172068,172070,172072,172074],{"class":31,"line":32},[29,172069,30866],{"class":305},[29,172071,57925],{"class":309},[29,172073,30521],{"class":305},[29,172075,172076],{"class":305}," *\n",[171,172078,172079],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172081,172083],{"id":172082},"_912-常用内置模块","9.12 常用内置模块",[275,172085,172087],{"id":172086},"_9121-random","9.12.1 random",[19,172089,172091],{"className":30507,"code":172090,"language":30509,"meta":24,"style":24},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[26,172092,172093,172099,172103,172117,172136],{"__ignoreMap":24},[29,172094,172095,172097],{"class":31,"line":32},[29,172096,30521],{"class":305},[29,172098,45457],{"class":309},[29,172100,172101],{"class":31,"line":43},[29,172102,2575],{"emptyLinePlaceholder":233},[29,172104,172105,172107,172109,172111,172113,172115],{"class":31,"line":51},[29,172106,30544],{"class":39},[29,172108,171930],{"class":309},[29,172110,525],{"class":39},[29,172112,12610],{"class":309},[29,172114,754],{"class":39},[29,172116,30626],{"class":309},[29,172118,172119,172121,172124,172126,172128,172130,172132,172134],{"class":31,"line":59},[29,172120,30544],{"class":39},[29,172122,172123],{"class":309},"(random.choice([",[29,172125,150017],{"class":103},[29,172127,12610],{"class":309},[29,172129,151065],{"class":103},[29,172131,12610],{"class":309},[29,172133,159860],{"class":103},[29,172135,33272],{"class":309},[29,172137,172138,172140,172143,172145,172147,172149,172151,172153,172155,172157,172159,172161,172163,172165],{"class":31,"line":67},[29,172139,30544],{"class":39},[29,172141,172142],{"class":309},"(random.sample([",[29,172144,525],{"class":39},[29,172146,12610],{"class":309},[29,172148,386],{"class":39},[29,172150,12610],{"class":309},[29,172152,380],{"class":39},[29,172154,12610],{"class":309},[29,172156,601],{"class":39},[29,172158,12610],{"class":309},[29,172160,627],{"class":39},[29,172162,112331],{"class":309},[29,172164,386],{"class":39},[29,172166,30626],{"class":309},[275,172168,172170],{"id":172169},"_9122-time","9.12.2 time",[19,172172,172174],{"className":30507,"code":172173,"language":30509,"meta":24,"style":24},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[26,172175,172176,172182,172186,172193,172201],{"__ignoreMap":24},[29,172177,172178,172180],{"class":31,"line":32},[29,172179,30521],{"class":305},[29,172181,31958],{"class":309},[29,172183,172184],{"class":31,"line":43},[29,172185,2575],{"emptyLinePlaceholder":233},[29,172187,172188,172190],{"class":31,"line":51},[29,172189,30544],{"class":39},[29,172191,172192],{"class":309},"(time.time())\n",[29,172194,172195,172197,172199],{"class":31,"line":59},[29,172196,95200],{"class":309},[29,172198,525],{"class":39},[29,172200,316],{"class":309},[29,172202,172203,172205,172207,172210],{"class":31,"line":67},[29,172204,30544],{"class":39},[29,172206,310],{"class":309},[29,172208,172209],{"class":103},"\"1秒后执行\"",[29,172211,316],{"class":309},[275,172213,172215],{"id":172214},"_9123-datetime","9.12.3 datetime",[19,172217,172219],{"className":30507,"code":172218,"language":30509,"meta":24,"style":24},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[26,172220,172221,172233,172237,172247,172254],{"__ignoreMap":24},[29,172222,172223,172225,172228,172230],{"class":31,"line":32},[29,172224,30866],{"class":305},[29,172226,172227],{"class":309}," datetime ",[29,172229,30521],{"class":305},[29,172231,172232],{"class":309}," datetime\n",[29,172234,172235],{"class":31,"line":43},[29,172236,2575],{"emptyLinePlaceholder":233},[29,172238,172239,172242,172244],{"class":31,"line":51},[29,172240,172241],{"class":309},"now ",[29,172243,355],{"class":305},[29,172245,172246],{"class":309}," datetime.now()\n",[29,172248,172249,172251],{"class":31,"line":59},[29,172250,30544],{"class":39},[29,172252,172253],{"class":309},"(now)\n",[29,172255,172256,172258,172261,172264,172266,172269],{"class":31,"line":67},[29,172257,30544],{"class":39},[29,172259,172260],{"class":309},"(now.strftime(",[29,172262,172263],{"class":103},"\"%Y-%m-",[29,172265,156820],{"class":39},[29,172267,172268],{"class":103}," %H:%M:%S\"",[29,172270,30626],{"class":309},[275,172272,172274],{"id":172273},"_9124-os","9.12.4 os",[19,172276,172278],{"className":30507,"code":172277,"language":30509,"meta":24,"style":24},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[26,172279,172280,172286,172290,172297],{"__ignoreMap":24},[29,172281,172282,172284],{"class":31,"line":32},[29,172283,30521],{"class":305},[29,172285,45434],{"class":309},[29,172287,172288],{"class":31,"line":43},[29,172289,2575],{"emptyLinePlaceholder":233},[29,172291,172292,172294],{"class":31,"line":51},[29,172293,30544],{"class":39},[29,172295,172296],{"class":309},"(os.getcwd())\n",[29,172298,172299,172301,172304,172307],{"class":31,"line":59},[29,172300,30544],{"class":39},[29,172302,172303],{"class":309},"(os.listdir(",[29,172305,172306],{"class":103},"\".\"",[29,172308,30626],{"class":309},[275,172310,172312],{"id":172311},"_9125-sys","9.12.5 sys",[19,172314,172316],{"className":30507,"code":172315,"language":30509,"meta":24,"style":24},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[26,172317,172318,172325,172329,172336],{"__ignoreMap":24},[29,172319,172320,172322],{"class":31,"line":32},[29,172321,30521],{"class":305},[29,172323,172324],{"class":309}," sys\n",[29,172326,172327],{"class":31,"line":43},[29,172328,2575],{"emptyLinePlaceholder":233},[29,172330,172331,172333],{"class":31,"line":51},[29,172332,30544],{"class":39},[29,172334,172335],{"class":309},"(sys.version)\n",[29,172337,172338,172340],{"class":31,"line":59},[29,172339,30544],{"class":39},[29,172341,172342],{"class":309},"(sys.path)\n",[14,172344,172346,172347,172349,172350,559],{"id":172345},"_913-if-name-main","9.13 if ",[457,172348,79939],{}," == \"",[457,172351,102187],{},[171,172353,172354,172355,172358],{},"模块被直接运行和被导入时，",[26,172356,172357],{},"__name__"," 的值不同。",[171,172360,172361,172362,24791],{},"创建 ",[26,172363,172364],{},"my_module.py",[19,172366,172368],{"className":30507,"code":172367,"language":30509,"meta":24,"style":24},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[26,172369,172370,172378,172388,172392,172396,172408],{"__ignoreMap":24},[29,172371,172372,172374,172376],{"class":31,"line":32},[29,172373,32076],{"class":305},[29,172375,5384],{"class":35},[29,172377,151222],{"class":309},[29,172379,172380,172382,172384,172386],{"class":31,"line":43},[29,172381,4265],{"class":305},[29,172383,11044],{"class":309},[29,172385,789],{"class":305},[29,172387,151233],{"class":309},[29,172389,172390],{"class":31,"line":51},[29,172391,2575],{"emptyLinePlaceholder":233},[29,172393,172394],{"class":31,"line":59},[29,172395,2575],{"emptyLinePlaceholder":233},[29,172397,172398,172400,172402,172404,172406],{"class":31,"line":67},[29,172399,1707],{"class":305},[29,172401,31349],{"class":39},[29,172403,101688],{"class":305},[29,172405,101691],{"class":103},[29,172407,3914],{"class":309},[29,172409,172410,172412,172414,172416,172418,172420],{"class":31,"line":75},[29,172411,31428],{"class":39},[29,172413,166729],{"class":309},[29,172415,525],{"class":39},[29,172417,12610],{"class":309},[29,172419,386],{"class":39},[29,172421,30626],{"class":309},[171,172423,172424],{},"作用：",[259,172426,172427,172430],{},[178,172428,172429],{},"直接运行该文件时，执行测试代码。",[178,172431,172432],{},"被其他文件导入时，不执行测试代码。",[171,172434,172435],{},"这是写模块时很常用的习惯。",[14,172437,172439],{"id":172438},"_914-包","9.14 包",[171,172441,172442,172443,172446],{},"包是包含 ",[26,172444,172445],{},"__init__.py"," 的目录，用于组织多个模块。",[171,172448,172449],{},"目录结构：",[19,172451,172454],{"className":172452,"code":172453,"language":5362,"meta":24},[5360],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[26,172455,172453],{"__ignoreMap":24},[171,172457,172458],{},"导入：",[19,172460,172462],{"className":30507,"code":172461,"language":30509,"meta":24,"style":24},"from utils.file_utils import read_file\n",[26,172463,172464],{"__ignoreMap":24},[29,172465,172466,172468,172471,172473],{"class":31,"line":32},[29,172467,30866],{"class":305},[29,172469,172470],{"class":309}," utils.file_utils ",[29,172472,30521],{"class":305},[29,172474,172475],{"class":309}," read_file\n",[171,172477,172478,172480],{},[26,172479,172445],{}," 可以为空，也可以写包初始化逻辑。",[14,172482,172484],{"id":172483},"_915-第三方包","9.15 第三方包",[171,172486,172487,172488,172490],{},"第三方包通过 ",[26,172489,24004],{}," 安装。",[19,172492,172494],{"className":21,"code":172493,"language":23,"meta":24,"style":24},"pip install requests\n",[26,172495,172496],{"__ignoreMap":24},[29,172497,172498,172500,172502],{"class":31,"line":32},[29,172499,24004],{"class":35},[29,172501,24007],{"class":103},[29,172503,146227],{"class":103},[171,172505,172506],{},"使用：",[19,172508,172510],{"className":30507,"code":172509,"language":30509,"meta":24,"style":24},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[26,172511,172512,172518,172522,172537],{"__ignoreMap":24},[29,172513,172514,172516],{"class":31,"line":32},[29,172515,30521],{"class":305},[29,172517,146227],{"class":309},[29,172519,172520],{"class":31,"line":43},[29,172521,2575],{"emptyLinePlaceholder":233},[29,172523,172524,172527,172529,172532,172535],{"class":31,"line":51},[29,172525,172526],{"class":309},"response ",[29,172528,355],{"class":305},[29,172530,172531],{"class":309}," requests.get(",[29,172533,172534],{"class":103},"\"https:\u002F\u002Fwww.example.com\"",[29,172536,316],{"class":309},[29,172538,172539,172541],{"class":31,"line":59},[29,172540,30544],{"class":39},[29,172542,172543],{"class":309},"(response.status_code)\n",[171,172545,172546],{},"查看已安装包：",[19,172548,172550],{"className":21,"code":172549,"language":23,"meta":24,"style":24},"pip list\n",[26,172551,172552],{"__ignoreMap":24},[29,172553,172554,172556],{"class":31,"line":32},[29,172555,24004],{"class":35},[29,172557,119084],{"class":103},[171,172559,172560],{},"导出项目依赖：",[19,172562,172563],{"className":21,"code":146422,"language":23,"meta":24,"style":24},[26,172564,172565],{"__ignoreMap":24},[29,172566,172567,172569,172571,172573],{"class":31,"line":32},[29,172568,24004],{"class":35},[29,172570,146431],{"class":103},[29,172572,26351],{"class":305},[29,172574,146436],{"class":103},[171,172576,172577],{},"安装项目依赖：",[19,172579,172580],{"className":21,"code":146442,"language":23,"meta":24,"style":24},[26,172581,172582],{"__ignoreMap":24},[29,172583,172584,172586,172588,172590],{"class":31,"line":32},[29,172585,24004],{"class":35},[29,172587,24007],{"class":103},[29,172589,119768],{"class":39},[29,172591,146436],{"class":103},[14,172593,172595],{"id":172594},"_916-模块搜索路径","9.16 模块搜索路径",[171,172597,172598,172599,172602],{},"Python 导入模块时会在 ",[26,172600,172601],{},"sys.path"," 中查找。",[19,172604,172606],{"className":30507,"code":172605,"language":30509,"meta":24,"style":24},"import sys\n\nfor path in sys.path:\n    print(path)\n",[26,172607,172608,172614,172618,172630],{"__ignoreMap":24},[29,172609,172610,172612],{"class":31,"line":32},[29,172611,30521],{"class":305},[29,172613,172324],{"class":309},[29,172615,172616],{"class":31,"line":43},[29,172617,2575],{"emptyLinePlaceholder":233},[29,172619,172620,172622,172625,172627],{"class":31,"line":51},[29,172621,3200],{"class":305},[29,172623,172624],{"class":309}," path ",[29,172626,26172],{"class":305},[29,172628,172629],{"class":309}," sys.path:\n",[29,172631,172632,172634],{"class":31,"line":59},[29,172633,31428],{"class":39},[29,172635,169358],{"class":309},[171,172637,172638],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[171,172640,157752],{},[19,172642,172645],{"className":172643,"code":172644,"language":5362,"meta":24},[5360],"random.py\njson.py\ntime.py\n",[26,172646,172644],{"__ignoreMap":24},[171,172648,172649],{},"这些文件名可能导致导入异常。",[14,172651,172653],{"id":172652},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[171,172655,172449],{},[19,172657,172660],{"className":172658,"code":172659,"language":5362,"meta":24},[5360],"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",[26,172661,172659],{"__ignoreMap":24},[171,172663,172664,24791],{},[26,172665,172666],{},"utils\u002Ffile_utils.py",[19,172668,172670],{"className":30507,"code":172669,"language":30509,"meta":24,"style":24},"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",[26,172671,172672,172678,172688,172692,172696,172706,172716,172724,172730,172734,172761,172771,172775,172779,172789,172815],{"__ignoreMap":24},[29,172673,172674,172676],{"class":31,"line":32},[29,172675,30521],{"class":305},[29,172677,147220],{"class":309},[29,172679,172680,172682,172684,172686],{"class":31,"line":43},[29,172681,30866],{"class":305},[29,172683,108440],{"class":309},[29,172685,30521],{"class":305},[29,172687,108445],{"class":309},[29,172689,172690],{"class":31,"line":51},[29,172691,2575],{"emptyLinePlaceholder":233},[29,172693,172694],{"class":31,"line":59},[29,172695,2575],{"emptyLinePlaceholder":233},[29,172697,172698,172700,172703],{"class":31,"line":67},[29,172699,32076],{"class":305},[29,172701,172702],{"class":35}," read_json",[29,172704,172705],{"class":309},"(path):\n",[29,172707,172708,172711,172713],{"class":31,"line":75},[29,172709,172710],{"class":309},"    path ",[29,172712,355],{"class":305},[29,172714,172715],{"class":309}," Path(path)\n",[29,172717,172718,172720,172722],{"class":31,"line":83},[29,172719,3276],{"class":305},[29,172721,39059],{"class":305},[29,172723,169439],{"class":309},[29,172725,172726,172728],{"class":31,"line":158},[29,172727,14927],{"class":305},[29,172729,51967],{"class":309},[29,172731,172732],{"class":31,"line":166},[29,172733,2575],{"emptyLinePlaceholder":233},[29,172735,172736,172738,172740,172743,172745,172747,172749,172751,172753,172755,172757,172759],{"class":31,"line":1505},[29,172737,34307],{"class":305},[29,172739,146920],{"class":39},[29,172741,172742],{"class":309},"(path, ",[29,172744,146930],{"class":103},[29,172746,12610],{"class":309},[29,172748,146935],{"class":5391},[29,172750,355],{"class":305},[29,172752,146940],{"class":103},[29,172754,13889],{"class":309},[29,172756,31512],{"class":305},[29,172758,148282],{"class":5391},[29,172760,3914],{"class":309},[29,172762,172763,172765,172767,172769],{"class":31,"line":1788},[29,172764,14927],{"class":305},[29,172766,148293],{"class":309},[29,172768,45483],{"class":5391},[29,172770,316],{"class":309},[29,172772,172773],{"class":31,"line":1793},[29,172774,2575],{"emptyLinePlaceholder":233},[29,172776,172777],{"class":31,"line":1799},[29,172778,2575],{"emptyLinePlaceholder":233},[29,172780,172781,172783,172786],{"class":31,"line":1804},[29,172782,32076],{"class":305},[29,172784,172785],{"class":35}," write_json",[29,172787,172788],{"class":309},"(path, data):\n",[29,172790,172791,172793,172795,172797,172799,172801,172803,172805,172807,172809,172811,172813],{"class":31,"line":1818},[29,172792,34307],{"class":305},[29,172794,146920],{"class":39},[29,172796,172742],{"class":309},[29,172798,152105],{"class":103},[29,172800,12610],{"class":309},[29,172802,146935],{"class":5391},[29,172804,355],{"class":305},[29,172806,146940],{"class":103},[29,172808,13889],{"class":309},[29,172810,31512],{"class":305},[29,172812,148282],{"class":5391},[29,172814,3914],{"class":309},[29,172816,172817,172820,172822,172824,172826,172828,172830,172832,172834,172836,172838],{"class":31,"line":1823},[29,172818,172819],{"class":309},"        json.dump(data, ",[29,172821,45483],{"class":5391},[29,172823,12610],{"class":309},[29,172825,147266],{"class":5391},[29,172827,355],{"class":305},[29,172829,34116],{"class":39},[29,172831,12610],{"class":309},[29,172833,152141],{"class":5391},[29,172835,355],{"class":305},[29,172837,386],{"class":39},[29,172839,316],{"class":309},[171,172841,172842,24791],{},[26,172843,154736],{},[19,172845,172847],{"className":30507,"code":172846,"language":30509,"meta":24,"style":24},"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",[26,172848,172849,172860,172864,172877,172897],{"__ignoreMap":24},[29,172850,172851,172853,172855,172857],{"class":31,"line":32},[29,172852,30866],{"class":305},[29,172854,172470],{"class":309},[29,172856,30521],{"class":305},[29,172858,172859],{"class":309}," read_json, write_json\n",[29,172861,172862],{"class":31,"line":43},[29,172863,2575],{"emptyLinePlaceholder":233},[29,172865,172866,172868,172870,172873,172875],{"class":31,"line":51},[29,172867,159845],{"class":309},[29,172869,355],{"class":305},[29,172871,172872],{"class":309}," read_json(",[29,172874,151960],{"class":103},[29,172876,316],{"class":309},[29,172878,172879,172881,172883,172885,172887,172889,172891,172893,172895],{"class":31,"line":59},[29,172880,170663],{"class":309},[29,172882,62808],{"class":103},[29,172884,51566],{"class":309},[29,172886,150017],{"class":103},[29,172888,12610],{"class":309},[29,172890,151601],{"class":103},[29,172892,51566],{"class":309},[29,172894,1297],{"class":39},[29,172896,165281],{"class":309},[29,172898,172899,172902,172904],{"class":31,"line":67},[29,172900,172901],{"class":309},"write_json(",[29,172903,151960],{"class":103},[29,172905,172906],{"class":309},", students)\n",[14,172908,172910],{"id":172909},"_918-易错点","9.18 易错点",[259,172912,172913,172916,172921,172926,172929,172932],{},[178,172914,172915],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[178,172917,172918,172919,28514],{},"能指定异常类型就不要裸写 ",[26,172920,171023],{},[178,172922,172923,172925],{},[26,172924,171398],{}," 无论是否出错都会执行。",[178,172927,172928],{},"模块文件名不要和标准库重名。",[178,172930,172931],{},"导入自己写的模块时，要注意运行目录。",[178,172933,172934],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172936,172938],{"id":172937},"_919-本章练习","9.19 本章练习",[259,172940,172941,172944,172947,172953,172960],{},[178,172942,172943],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[178,172945,172946],{},"写函数读取文件，如果文件不存在则返回空字符串。",[178,172948,172361,172949,172952],{},[26,172950,172951],{},"math_utils.py","，实现加减乘除函数并导入使用。",[178,172954,172955,172956,172959],{},"创建一个 ",[26,172957,172958],{},"utils"," 包，把 JSON 读写函数放进去。",[178,172961,172962],{},"写一个程序，捕获除零异常和输入格式异常。",[223,172964,172965],{},"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":24,"searchDepth":43,"depth":43,"links":172967},[172968,172969,172970,172971,172972,172973,172974,172975,172976,172977,172978,172984,172991,172993,172994,172995,172996,172997,172998],{"id":170820,"depth":43,"text":170821},{"id":170948,"depth":43,"text":170949},{"id":170997,"depth":43,"text":170998},{"id":171146,"depth":43,"text":171147},{"id":171318,"depth":43,"text":171319},{"id":171387,"depth":43,"text":171388},{"id":171498,"depth":43,"text":171499},{"id":171624,"depth":43,"text":171625},{"id":171749,"depth":43,"text":171750},{"id":171804,"depth":43,"text":171805},{"id":171903,"depth":43,"text":171904,"children":172979},[172980,172981,172982,172983],{"id":171907,"depth":51,"text":171908},{"id":171941,"depth":51,"text":171942},{"id":171980,"depth":51,"text":171981},{"id":172059,"depth":51,"text":172060},{"id":172082,"depth":43,"text":172083,"children":172985},[172986,172987,172988,172989,172990],{"id":172086,"depth":51,"text":172087},{"id":172169,"depth":51,"text":172170},{"id":172214,"depth":51,"text":172215},{"id":172273,"depth":51,"text":172274},{"id":172311,"depth":51,"text":172312},{"id":172345,"depth":43,"text":172992},"9.13 if name == \"main\"",{"id":172438,"depth":43,"text":172439},{"id":172483,"depth":43,"text":172484},{"id":172594,"depth":43,"text":172595},{"id":172652,"depth":43,"text":172653},{"id":172909,"depth":43,"text":172910},{"id":172937,"depth":43,"text":172938},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170812,"description":230},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173005,"title":173006,"body":173007,"description":173170,"extension":231,"meta":173171,"navigation":233,"path":173172,"seo":173173,"stem":173174,"__hash__":173175},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173008,"toc":173165},[173009,173012,173015,173018,173029,173031,173105,173108,173111,173114,173117,173120,173123,173126,173129,173132,173135],[10,173010,173006],{"id":173011},"python教程",[171,173013,173014],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[171,173016,173017],{},"建议学习环境：",[259,173019,173020,173023,173026],{},[178,173021,173022],{},"Python 版本：Python 3.10 及以上。",[178,173024,173025],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[178,173027,173028],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173030,117207],{"id":117207},[259,173032,173033,173039,173045,173051,173057,173063,173069,173075,173081,173087,173093,173099],{},[178,173034,173035],{},[546,173036,173038],{"href":173037},".\u002Fch1-Python","Python环境与第一个程序",[178,173040,173041],{},[546,173042,173044],{"href":173043},".\u002Fch2","基础语法、变量与字符串",[178,173046,173047],{},[546,173048,173050],{"href":173049},".\u002Fch3","判断语句",[178,173052,173053],{},[546,173054,173056],{"href":173055},".\u002Fch4","循环语句",[178,173058,173059],{},[546,173060,173062],{"href":173061},".\u002Fch5","函数基础",[178,173064,173065],{},[546,173066,173068],{"href":173067},".\u002Fch6","数据容器",[178,173070,173071],{},[546,173072,173074],{"href":173073},".\u002Fch7","函数进阶",[178,173076,173077],{},[546,173078,173080],{"href":173079},".\u002Fch8","文件操作",[178,173082,173083],{},[546,173084,173086],{"href":173085},".\u002Fch9","异常、模块与包",[178,173088,173089],{},[546,173090,173092],{"href":173091},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[178,173094,173095],{},[546,173096,173098],{"href":173097},".\u002Fch11","面向对象基础",[178,173100,173101],{},[546,173102,173104],{"href":173103},".\u002Fch12","综合案例与复习路线",[14,173106,173107],{"id":173107},"学习路线",[171,173109,173110],{},"第一阶段：能运行程序。",[171,173112,173113],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[171,173115,173116],{},"第二阶段：能组织数据。",[171,173118,173119],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[171,173121,173122],{},"第三阶段：能封装逻辑。",[171,173124,173125],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[171,173127,173128],{},"第四阶段：能做小项目。",[171,173130,173131],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173133,173134],{"id":173134},"参考资料",[259,173136,173137,173144,173151,173158],{},[178,173138,173139,173140],{},"黑马程序员 Python 入门教程推荐：",[546,173141,173142],{"href":173142,"rel":173143},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24038],[178,173145,173146,173147],{},"Python 官方中文教程：",[546,173148,173149],{"href":173149,"rel":173150},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24038],[178,173152,173153,173154],{},"Python 标准库文档：",[546,173155,173156],{"href":173156,"rel":173157},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24038],[178,173159,173160,173161],{},"pyecharts 文档：",[546,173162,173163],{"href":173163,"rel":173164},"https:\u002F\u002Fpyecharts.org\u002F",[24038],{"title":24,"searchDepth":43,"depth":43,"links":173166},[173167,173168,173169],{"id":117207,"depth":43,"text":117207},{"id":173107,"depth":43,"text":173107},{"id":173134,"depth":43,"text":173134},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23553},"\u002Fwiki\u002F2024-10-10-python",{"title":173006,"description":173170},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331398827]